SysTick简介:
SysTick—系统定时器是属于CM3内核中的一个外设,内嵌在NVIC中。系统定时器 是一个24bit的向下递减的计数器,计数器每计数一次的时间为1/SYSCLK,一般我们设置 系统时钟SYSCLK等于72M。当重装载数值寄存器的值递减到0的时候,系统定时器就产生一次中断,以此循环往复。
SysTick寄存器介绍
SysTick—系统定时器有4个寄存器,简要介绍如下。在使用SysTick产生定时的时候,只需要配置前三个寄存器,最后一个校准寄存器不需要使用。
寄存器名称 寄存器描述
CTRL SysTick控制及状态寄存器
LOAD SysTick重装载数值寄存器
VAL SysTick当前数值寄存器
CALIB SysTick校准数值寄存器
SysTick属于内核的外设,有关的寄存器定义和库函数都在内核相关的库文件core_cm3.h中。
用固件库编程的时候我们只需要调用库函数SysTick_Config()即可,形参ticks用来设置重装载寄存器的值,最大不能超过重装载寄存器的值2的24次方,当重装载寄存器的值递减到0的时候产生中断,然后重装载寄存器的值又重新装载往下递减计数,以此循环往复。紧随其后设置好中断优先级,最后配置系统定时器的时钟等于AHBCLK=72M,使能定时器和定时器中断,这样系统定时器就配置好了,一个库函数搞定。
SysTick中断时间的计算
SysTick定时器的计数器是向下递减计数的,计数一次的时间TDEC=1/CLKAHB,当重装 载寄存器中的值VALUELOAD减到0的时候,产生中断,可知中断一次的时间 TINT=VALUELOAD*TDEC=VALUELOAD/CLKAHB,其中CLKAHB=72MHZ。如果设置 VALUELOAD为72,那中断一次的时间TINT=72/72M=1us。
SysTick_Config()的形参ticks对应的值VALUELOAD;
举个例子 :把定时器设为1s:
ticks的值为720,那么得到的时间就是10us;
SysTick定时时间的计算:
当设置好中断时间TINT后,我们可以设置一个变量t,用来记录进入中断的次数,那 么变量t乘以中断的时间TINT就可以计算出需要定时的时间。
//main.c
void SysTick_Init(void)
{
(SysTick_Config(SystemCoreClock/100000));
}
volatile uint32_t TimingDelay =0;
void Delay_us(__IO u32 ntime)
{
TimingDelay = ntime;
while(TimingDelay);
}
//stm3210x_it.c
extern uint32_t TimingDelay ;
void SysTick_Handler(void)
{
if(TimingDelay!=0x00)
{
TimingDelay--;
}
}