STM32 定时器设定准确定时时间的使用心得
这里说的主要是比较输出的定时长短算法原理。TIM_Period 这
个是记数周期,Prescaler 是 TIM 时钟频率除数的预分频值。在一般
记时使用中,举个例子我们要产生 50ms 一次的中断,这时 TIM2 的工
作频率是 72M。
50000 = (1000000/(72000000/TIM_Prescaler)) * TIM_Period,
这里单位都转化成 us 和 Hz,1000000 是 1 秒用来算频率。假定
TIM_Period 为 1000,那 TIM_Prescaler=3600,这里 TIM_Prescaler
的数值越大精度越高。TIM_Period 主要是定时长度
现在说明清楚。还是要用上面的公式说明。
1、72000000/TIM_Prescaler:这一步是求出一秒种的系统时钟周
期里会产生多少次定时器累加。如果 TIM_Prescaler 为 720 那就是 1
秒钟累加 100000 次。
2、1000000/(72000000/TIM_Prescaler):这里将 1 秒放大为一百
万微秒,如果 TIM_Prescaler 为 720 那就是每次累加间隔 10us,这
样就算出了这个定时器最小的定时时间,就是精度。
3、(1000000/(72000000/TIM_Prescaler)) * TIM_Period:这个最
后一乘就是整个定时器一个定时周期的时间就是定时最长时间。如果
TIM_Period 为 60000(最大 65535),TIM_Prescaler 为 720 那最长时
间就是 600ms。
4、TIM_OCInitStructure.TIM_Pulse:这个的值是单个通道的定时
时间。他是定时器最小定时时间的倍数。
5、当定时精度达到微秒级后每次的中断间隔不能小于 6 个微秒
因为定时器内的代码执行要时间
6、要想获得连续的自动记数翻转
TIM_TimeBaseStructure.TIM_Period 的值必须是(0xFFFF)。否则这
些通道就会按照 TIM_TimeBaseStructure.TIM_Period 的最大定时时
间工作一次(最长定时周期)然后停止工作一次而不是连续自动重装。