运用Systick编写延时函数以及遇到的问题及其解决方法
我对Systick的理解
Systick属于Cotex-M4内核中的外设,是一个24位的向下递减计数器,我们每次所配置是PLL锁相环的时钟,正是Systick的时钟;定时器都有一个自动重装载值寄存器,当自动重装载值递减到0的时,会产生一次中断,而我们可以通过改变这个重装载值,来设定我们要的延时时间,从而起到延时作用。
开发平台
1、运用STM32F429在标准库上开发
2、KEIL 5.25.2.0
初始化Systick
void SYSTICK_INIT(uint16_t fosc) //F429的时钟频率为180M,所以填入的参数我会填入180
{ //这样我每一次进入中断的时间为1us。(180/180M = 1us)
if(SysTick_Config(fosc)==1) //SysTick_Config()已经在cm4.h文件里写好,直接调用
{
while(1);
}
}
编写延时函数思路
编写延时函数的思路是:我定义一个全局变量,当Systick每次进入中断时,中断服务函数让这个全局变量自减1,而我要延时多少秒,就进入这个中断多少次,而当进入延时函数时,我用一个while一直死循环来等待这个全局变量减到0为止,从而起到了精准的延时效果。
定义一个全局变量
__I