SysTick系统定时器,又称为滴答定时器,是属于CM3内核中的一个外设,内嵌在NVIC中。
它是一个24bit的向下递减的重装载计数器,所以最多计数不超过2^24个。
计数器每计数一次的时间为 1/SYSCLK,一般我们设置系统时钟 SYSCLK等于 72M。当重装载数值寄存器的值递减到 0 的时候,系统定时器就产生一次中断,以此循环往复。
SysTick中断时间的计算
SysTick 定时器的计数器是向下递减计数的,计数一次的时间 T=1/CLK(1/72M),当重装载寄存器中的值 VALUELOAD(数值<2^24) 减到 0 的时候,产生中断,可知中断一次的时间 TINT=VALUELOAD * T=VALUELOAD/CLK,其中 CLK =72MHZ。如果设置 VALUELOAD 为 72,那中断一次的时间TINT=72/72M=1us。不过 1us 的中断没啥意义,整个程序的重心都花在进出中断上了,根本没有时间处理其他的任务。
所以我们可以在SysTick的初始化函数里调用 SysTick_Config() 这个固件库函数,通过设置该固件
库函数的形参,就决定了系统定时器经过多少时间就产生一次中断。
下面我们将其设定为10us产生一次中断
其中SystemCoreClock的值为72M,所以VALUELOAD=SystemCoreClock / 100000=10us。
SysTick 定时时间的计算
当设置好中断时间 T 后,我们可以设置一个变量 t,用来记录进入中断的次数,那么变量 t 乘
以中断的时间 T 就可以计算出需要定时的时间。
延时函数的编写
根据改变形参nTime就可以自定义延时时间
SysTick 中断服务函数
这样,我们就把延时程序完成了。
LED与GPIO口的端口配置编程
主函数
以上。