嵌入式学习(十)—系统定时器systick
SysTick定时器又称为系统嘀嗒定时器,ARM-M系列内核的MCU都包含这个定时器,使用内核的SysTick定时器来实现延时,可以不占用系统定时器,节约资源。它是在MCU内核中实现的,与MCU外设无关,它的代码可以在不同的MCU之间移植。
SysTick是一个24位递减定时器,涉及到的寄存器主要有4个,控制和状态寄存器,重装载值寄存器,当前值寄存器,校准寄存器,即计数器可以从最大值224开始,最多,每个时钟周期减1,当减到0时,产生SysTick异常,同时再自动重载定时器初值,开始新一轮计数。通过设置初值,就可以得到期望时间。如图所示,y为定时器初值,随着时间增加,y值逐渐减小,直至为零,再重新加载初值,如此往复,得到x1,x2,x3这些时间段,就是我们延时的时间。举个例子,stm32f407的工作频率为164MHz,意味着1s时间内,会计数168000000次,那么1ms计数168000次,168000这个数字可以作为systick计数器的初值。把这个值写入系统定时器,定时器在每个时钟周期减1,同时产生中断通知,再次加载168000,如此反复。
-------------------------------------------------------------------------
系统定时器的控制寄存器比较少,整体比较简单,包括STK_CTRL,STK_LOAD,STK_VAL,STK_CALIB四个寄存器,因为系统嘀嗒定时器属于内核的外设,相关寄存器在内核编程手册中,不在STM32F4xx的参考手册中。
----------------------------------------------------------------------------
bit[23:0]一共24位,用来设置系统嘀嗒定时器的初值,范围为1~16777216----------------------------------------------------------------------------
bit[23:0]一共24位,用来获取当前系统嘀嗒定时器的计数器的值。----------------------------------------------------------------------------
----------------------------------------------------------------------------