STM32延时函数的四种方法

本文详细介绍了基于STM32F207的四种延时函数实现方法:普通延时、定时器中断、查询定时器和汇编指令。普通延时简单但精度低,适合一般应用;定时器中断精度高但可能影响其他中断;查询定时器解决了中断问题,保持了精度;汇编指令方式避免优化,适合资源紧张场景。

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

单片机编程过程中经常用到延时函数,最常用的莫过于微秒级延时delay_us()和毫秒级delay_ms()。本文基于STM32F207介绍4种不同方式实现的延时函数。

1、普通延时

这种延时方式应该是大家在51单片机时候,接触最早的延时函数。这个比较简单,让单片机做一些无关紧要的工作来打发时间,经常用循环来实现,在某些编译器下,代码会被优化,导致精度较低,用于一般的延时,对精度不敏感的应用场景中。

//微秒级的延时
void delay_us(uint32_t delay_us)
{
   
  volatile unsigned int num;
  volatile unsigned int t;

  for (num = 0; num < delay_us; num++)
  {
   
    t = 11;
    while (t != 0)
    {
   
      t--;
    }
  }
}
//毫秒级的延时
void delay_ms(uint16_t delay_ms)
{
   
  volatile unsigned int num;
  for (num = 0; num < delay_ms; num++)
  {
   
    delay_us(1000);
  }
}

2、定时器中断

定时器具有很高的精度,我们可以配置定时器中断,比如配置1ms中断一次,然后间接判断进入中断的次数达到精确延时的目的。这种方式精度可以得到保证,但是系统一直在中断,不利于在其他中断中调用此延时函数,有些高精度的应用场景不适合,比如其他外设正在输出,不允许任何中断打断的情况。

STM32任何定时器都可以实现,下面我们以SysTick 定时器为例介绍:

初始化SysTick 定时器:

/* 配置SysTick为1ms */
RCC
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值