蓝桥杯学习笔记四:stm32延时函数总结,滴答定时器中断来实现流水灯

本文是蓝桥杯学习笔记的一部分,重点探讨了STM32的两种延时方法。首先介绍了软件延时,尽管其精度不高,常用于毫秒级延时。接着详细阐述了SysTick定时器的工作原理,这是一个内部倒计时的定时器,适合用于中断驱动的延时操作,如流水灯控制。 SysTick与普通定时器的主要区别在于其内核定位、操作系统心跳功能以及倒数限制。文章最后提到,对于复杂的外设控制,通常会使用其他更功能丰富的定时器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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()函
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值