当前位置:首页 > > 玩转单片机与嵌入式
[导读]▼点击下方名片,关注公众号▼欢迎关注【玩转单片机与嵌入式】公众号,回复关键字获取更多免费资料。回复【电容】,获取电容、元器件选型相关的内容;回复【阻抗匹配】,获取电磁兼容性、阻抗匹配相关的资料回复【资料】,获取全部电子设计、单片机开发相关的资料回复【终端电阻】,获取CAN终端电阻...

点击下方名片,关注公众号

欢迎关注【玩转单片机与嵌入式】公众号,回复关键字获取更多免费资料。


回复【电容】,获取电容、元器件选型相关的内容;

回复【阻抗匹配】,获取电磁兼容性、阻抗匹配相关的资料

回复【资料】,获取全部电子设计、单片机开发相关的资料

回复【终端电阻】,获取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(
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭