Stm32延时手段大体分为两种:软件延时,滴答定时器延时
1、软件延时:
//毫秒级的延时
void delay_ms(u16 time)
{
u16 i=0;
while(time--)
{
i=12000; //自己定义
while(i--) ;
}
}
软件延时不精确
2、SysTick 定时器延时
处理器内部有SysTick定时器,他的时钟来源可以是外部时钟也可以是内部时钟,是一个倒数的计数器,当计到0 时,将从RELOAD寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息。可在权威手册查看。
SysTick_Config()定义中断时间段,入口参数叫systick重装定时器的值,也就是说计多少数就触发一次中断。
volatile unsigned long time_delay; // 延时时间,注意定义为全局变量
//延时n_ms
void delay_ms(volatile unsigned long nms)
{
//SYSTICK分频--1ms的系统时钟中断
if (SysTick_Config(SystemFrequency/1000))//确定是否设定为1ms一次中断,并且使能中断,否则1ms后没有动作发生,会陷入死循环
{
while(time_delay);//1ms的空转,直到1ms时的中断服务函数执行(上面的config已经开启并配置好了中断)
}
}
//在中断中将time_delay递减。实现延时
void SysTick_Handler(void)//中断服务函数,执行的动作是--,执行完之后回到delay_ms()函