STM32 定时器定时计算
- STM32 定时器频率
- 例子
- 公式
- reference
STM32 定时器频率
定时时间 = 定时器频率 / 倍频 /装载周期
htim1.Init.Prescaler = 72-1;
htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
htim1.Init.Period = 1*1000*1000;
tim = 72x10^6 / (72-1)/ 110001000 = 1us
根据定时器时钟的频率,比如时钟的频率是72MHZ,可以理解为一秒钟STM32会自己数72M次,预分频系数就是将频率分割,比如分频系数是72,则该时钟的频率会变成72MHZ/72=1MHZ,但是在设置的时候要注意,数值应该是72-1。假定分频系数是72-1,那么频率变成1MHZ,也就意味着STM32在一秒钟会数1M次,即1us数一次。好了,接下来就是确定预装载值,比如需要定时1ms,由于1ms=1us*1000,那么预装载值就是1000-1;如此类推,在预分频系数确定的情况下,定时的时长就由预装载值确定了。至于要把值减一的原因,估计是计数是从0开始,所以要减一。
例子
//对于71MHZ的频率,500ms中断一次,这两个参数设置如下:
TIM_Prescaler=7199; //预分频值
TIM_Period=4999; //下一个更新事件装入活动的自动重装载寄存器周期的值
//分频7200,用72000000/7200=10000Hz
//此时的周期就是1/10000=0.0001s
//500ms=0.0001s*5000次
//5000-1=4999次
//即通过4999次系统的运行,就是500ms
公式
对定时器周期公式的理解:
T=(arr+1)*(PSC+1)/Tck
其中TCK为时钟频率,PSC为时钟预分频系数,arr为自动重装载值。
f=Tck/(psc+1)*(arr+1)
Tck/(psc+1)即为时钟频率,1/f为机器周期,乘以(arr+1)即可得出定时器周期。
例子:TCK=72MHZ,psc=71.时钟周期=1us.(arr+1)值为多少,定时器周期就为多少毫秒。
reference
- 通用定时器中两个重要参数的设置心得(TIM_Prescaler、TIM_Period)