SysTick定时器常用来做延时,或者用实时系统的心跳时钟。这样可以节省MCU资源,不浪费定时器。Systick定时器就是系统滴答定时器,一个24 位的倒计数定时器,计到0 时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息,即使在睡眠模式下也能工作。
SysTick 自动重装载除值寄存器
VAL SysTick 当前值寄存器 CALIB
SysTick 校准值寄存器
SysTick控制及状态寄存器
SysTick重装载数值寄存器
SysTick当前数值寄存器
SysTick_CLKSourceConfig() //Systick时钟源选择
SysTick_Config(uint32_t ticks) //初始化systick,时钟为HCLK,并开启中断
void SysTick_Handler(void);
用Systick写延时函数的步骤:
第一步:初始化函数中,配置Systick的工作频率。通过寄存器CTRL
第二步:在延时函数中,计算出在配置的工作频率下1us或者1ms的震荡n次。(函数中需要多少us或者多少ms,直接乘以n次)。
第三步:把VAL的值清零。清零之后,VAL的值重新加载。
第四部:使能Systick,通过寄存器CTRL。
第五步:通过判断Systick->COUNTFLAG 寄存器判断定时是否到了。
第六步:定时时间到了,那就关闭定时器,同时清空Systick->VAL。
通过一个简单的函数来理解。
@kexuexyz
可以很好的理解。
再举一个完整的函数