单片机编程过程当中常常用到延时函数,最经常使用的莫过于微秒级延时delay_us()和毫秒级delay_ms()。本文基于STM32F207介绍4种不一样方式实现的延时函数。git
一、普通延时
这种延时方式应该是你们在51单片机时候,接触最先的延时函数。这个比较简单,让单片机作一些可有可无的工做来打发时间,常常用循环来实现,在某些编译器下,代码会被优化,致使精度较低,用于通常的延时,对精度不敏感的应用场景中。github
1 //微秒级的延时
2 voiddelay_us(uint32_t delay_us)3 {4 volatile unsigned intnum;5 volatile unsigned intt;6
7
8 for (num = 0; num < delay_us; num++)9 {10 t = 11;11 while (t != 0)12 {13 t--;14 }15 }16 }17 //毫秒级的延时
18 voiddelay_ms(uint16_t delay_ms)19 {20 volatile unsigned intnum;21 for (num = 0; num < delay_ms; num++)22 {23 delay_us(1000);24 }25 }
二、定时器中断
定时器具备很高的精度,咱们能够配置定时器中断,好比配置1ms中断一次,而后间接判断进入中断的次数达到精确延时的目的。这种方式精度能够获得保证,可是系统一直在中断,不利于在其余中断中调用此延时函数,有些高精度的应用场景不适合,好比其余外设正在输出,不容许任何中断打断的状况。app
STM32任何定时器均可以实