SysTick
Cortex-M3 在内核部分 包含了一个简单的定时器——SysTick timer。且所有的 CM3 芯片都带有这个定时器。
在 STM32 中 SysTick 以 HCLK(AHB 时钟)或 HCLK/8 作为运行时钟。
SysTick timer工作分析
SysTick 是一个 24 位的定时器,即一次最多可以计数 224 个时钟脉冲,这个脉冲计数值被保存到 当前计数值寄存器 STK_VAL (SysTick current value register) 中,只能向下计数。
每接收到一个时钟脉冲 STK_VAL 的值就向下减 1,直至 0,当 STK_VAL 的值被减至 0 时,由硬件自动把重载寄存器 STK_LOAD(SysTick reload value register)中保存的数据加载到 STK_VAL,重新向下计数。
当 STK_VAL 的值被计数至 0 时,触发异常,就可以在中断服务函数中处理定时事件了。当然,要使 SysTick 进行以上工作必须要进行 SysTick 配置。配置在寄存器STK_CTRL中完成。
定时时间的计算
经过ticks个脉冲(经过ticks个时钟周期)后将触发中断,触发中断后又重新开始计数。
定时的时间计算公式:T=ticks*(1/f),ticks为SysTick_Config()的输入参数,1/f为SysTick timer使用的时钟源的时钟周期,f为该时钟源的时钟频率 。