STM32的四种延时方法
时间:2021-09-06 15:22:35
手机看文章
扫描二维码
随时随地手机看文章
[导读]▼点击下方名片,关注公众号▼欢迎关注【玩转单片机与嵌入式】公众号,回复关键字获取更多免费资料。回复【电容】,获取电容、元器件选型相关的内容;回复【阻抗匹配】,获取电磁兼容性、阻抗匹配相关的资料回复【资料】,获取全部电子设计、单片机开发相关的资料回复【终端电阻】,获取CAN终端电阻...
▼点击下方名片,关注公众号▼
欢迎关注【玩转单片机与嵌入式】公众号,回复关键字获取更多免费资料。
回复【电容】,获取电容、元器件选型相关的内容;
回复【阻抗匹配】,获取电磁兼容性、阻抗匹配相关的资料回复【资料】,获取全部电子设计、单片机开发相关的资料回复【终端电阻】,获取CAN终端电阻相关的资料回复【单片机】,获取单片机全套视频教程和参考设计
回复【STM32】,获取STM32相关设计和视频教程回复【PCB】,获取PCB设计相关的资料回复【硬件知识】、【硬件设计】,获取硬件开发工程必备手册
回复【经典电路】,获取5000个经典电路
回复【论文】,获取毕业设计、电子竞赛、学术专业等相关论文资料…………
欢迎关注【玩转单片机与嵌入式】公众号,本公众号会以连载的形式对电容进行深入讲解,欢迎持续关注。
单片机编程过程中经常用到延时函数,最常用的莫过于微秒级延时delay_us()和毫秒级delay_ms()。本文基于STM32F207介绍4种不同方式实现的延时函数。
一:普通延时
这种延迟方式应该是每个人在51台单片机时接触最早的延迟函数。这个比较简单,让单片机做一些无关紧要的工作来打发时间,经常通过循环来实现。在一些编译器下,代码会被优化,导致精度低,用于一般延迟和对精度不敏感的应用场景。
二:定时器中断
定时器精度很高,可以配置定时器中断,比如配置1ms中断一次,然后间接判断进入中断的次数,达到精确延迟的目的。这种方法的精度可以保证,但是系统一直在中断,不利于在其他中断中调用这个延迟函数。有些高精度的应用场景不适合,比如其他外部设备输出,不允许中断。
STM32任何定时器都可以实现,下面我们以SysTick 定时器为例介绍:
初始化SysTick 定时器:
回复【电容】,获取电容、元器件选型相关的内容;
回复【阻抗匹配】,获取电磁兼容性、阻抗匹配相关的资料回复【资料】,获取全部电子设计、单片机开发相关的资料回复【终端电阻】,获取CAN终端电阻相关的资料回复【单片机】,获取单片机全套视频教程和参考设计
回复【STM32】,获取STM32相关设计和视频教程回复【PCB】,获取PCB设计相关的资料回复【硬件知识】、【硬件设计】,获取硬件开发工程必备手册
回复【经典电路】,获取5000个经典电路
回复【论文】,获取毕业设计、电子竞赛、学术专业等相关论文资料…………
欢迎关注【玩转单片机与嵌入式】公众号,本公众号会以连载的形式对电容进行深入讲解,欢迎持续关注。
单片机编程过程中经常用到延时函数,最常用的莫过于微秒级延时delay_us()和毫秒级delay_ms()。本文基于STM32F207介绍4种不同方式实现的延时函数。
一:普通延时
这种延迟方式应该是每个人在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); }}二:定时器中断
定时器精度很高,可以配置定时器中断,比如配置1ms中断一次,然后间接判断进入中断的次数,达到精确延迟的目的。这种方法的精度可以保证,但是系统一直在中断,不利于在其他中断中调用这个延迟函数。有些高精度的应用场景不适合,比如其他外部设备输出,不允许中断。
STM32任何定时器都可以实现,下面我们以SysTick 定时器为例介绍:
初始化SysTick 定时器:
/* 配置SysTick为1ms */RCC_GetClocksFreq( 




