在stm32的Cortex—M3内核中存在SysTick定时器外设,可以定时也可以产生中断。SysTick定时器内部是一个24bit向下递减的计数器。所有Cortex-M3系列的单片机都有这个外设,因此方便移植,是SysTick一个显著的优点。
查看M3内核编程手册,可以找到有关SysTick定时的寄存器有四个,分别是SysTick控制及状态寄存器、SysTick重装载数值寄存器、SysTick当前数值寄存器和SysTick校准数值寄存器。配置SysTick只需配置前两个寄存器,对应固件库中SysTick_Config(uint32_t ticks)函数。
变量ticks代表我们需要定时的时间,SysTick定时器的计数器向下递减,技数一次产生的时间T=1/CLK(AHB),默认情况下CLK(AHB)是72MHZ(由SysTick——CTRL_CLKSOURCE_Msk决定),因此我们计数72次为1us,72000次为1ms。
这样我们就写好了一个比较精准毫秒级别的延时函数。还有一种方法是使用SysTick定时器中断来写延时函数,但较为麻烦。