定时器定时时间的计算(SystemCoreClock与OS_TICKS_PER_SEC的关系)
定时器定时时间的计算
xcj 2015/06/03 09:23
假设定时器的时钟频率为f,f已知。
那么定时器每计数一次所用时间为1/f。
1/f代表了定时器的定时的时间精度(或最小计时单位)。
往计数器写的初值为Ticks,就是经过Ticks个周期后,定时器值变为0,定时时间到了。
如果我们要定时的时间为T,那么计算公式为:
T = ticks * (1/f) (1)
整理后可得
ticks = f * T (2)
举个例子,假如定时器的时钟为SystemCoreClock,要定时1mS。
那么 ticks = SystemCoreClock * 1mS =SystemCoreClock * 1 * 10^(-3)=SystemCoreClock/1000
换个思路,如果已知定时器的时钟频率为f,要用定时器产生一个频率为f1的定时中断(T=1/f1)。
根据公式(2)有
ticks = f /f1 (3)
上面的式子中 f1<f
如果定时器的时钟频率为SystemCoreClock,要用定时器产生一个频率为1KHz(1000Hz,周期为1ms)的定时中断,
那么ticks = SystemCoreClock /1000
公式(3)比较常用,也好计算。
在ucos ii中,OS_TICKS_PER_SEC代表每秒产生的中断个数,也就是是说OS_TICKS_PER_SEC的单位是Hz。
由于SysTick定时器的时钟频率为SystemCoreClock,那么Ticks就需要设置为
Ticks = SystemCoreClock/OS_TICKS_PER_SEC
这也是函数OS_CPU_SysTickInit()的参数为什么是SystemCoreClock/OS_TICKS_PER_SEC的原因了。