本帖最后由 四汐 于 2024-3-21 22:11 编辑
前两天发现STC原来也有官方的软件库函数,于是今天就花时间看了一下定时器部分的代码,然后结合手册写了一个这样的“一键”定时任意值的函数。
相对的范围大小,我也算出来了,大家需要自取。(注:最好还是去ISP软件点一点看看误差大不大)
其他定时器设置也可以参考.H文件仿写一个出来。
欢迎大家一起讨论 。
- /**
- * @name Timer0_config
- * @brief 定时器/计数器0配置
- * @version 版本:v1.0
- * @date 日期:2024-3-21
- * @author 作者:汐
- * @note 注释:
- * Mode, 工作模式 0: 16位自动重装, 1: 16位定时/计数, 2: 8位自动重装, 3: 不可屏蔽16位自动重装
- * ClkSource 时钟源 0,1: 做定时器, 12T/1T(12T模式可以定时更长); 2: 做计数器
- * TIM_Value 装载初值 (u16)(65536UL - (MAIN_Fosc*定时时间s) / (TIM_ClkSource * (TIM_PS+1)))
- * 16位 Xms: (MAIN_Fosc / 1000) * X Xus: (MAIN_Fosc / 1000000) * X
- * 35,000,000L 1T:0~1ms 12T:0~22ms 1T:0~1,872us 12T:0~22,469us
- * 24,000,000L 1T:0~2ms 12T:0~32ms 1T:0~2,739us 12T:0~32,768us
- * 22,118,400L 1T:0~2ms 12T:0~35ms 1T:0~2,962us 12T:0~35,555us
- * 12,000,000L 1T:0~5ms 12T:0~65ms 1T:0~5,461us 12T:0~65,536us
- * 11,059,200L 1T:0~5ms 12T:0~71ms 1T:0~5,925us 12T:0~71,111us
- */
- void Timer0_config()
- {
- TIM_InitTypeDef TIM_InitStructure;
- TIM_InitStructure.TIM_Mode = TIM_16BitAutoReload; // 工作模式 TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask
- TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_12T; // 时钟源 TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
- TIM_InitStructure.TIM_ClkOut = DISABLE; // 是否输出高速脉冲 ENABLE,DISABLE
- TIM_InitStructure.TIM_Value = (u16)(65536UL - ((MAIN_Fosc / 1000 /*ms:1000;us:1000000*/) * 1 /*X*/) / 12 /*12T;1T*/); // 装载初值, 1ms
- TIM_InitStructure.TIM_PS = 0; // 8位预分频器(n+1), 0~255
- TIM_InitStructure.TIM_Run = ENABLE; // 是否初始化后启动定时器 ENABLE,DISABLE
- Timer_Inilize(Timer0, &TIM_InitStructure); // 初始化Timer0 Timer0,Timer1,Timer2,Timer3,Timer4
- // NVIC_Timer0_Init(ENABLE, Priority_0); // 中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
- }
复制代码
|