历史上的今天
今天是:2025年05月18日(星期日)
2018年05月18日 | STM32中通过普通延时函数来精确延时
2018-05-18 来源:eefocus
在STM32中处处会用到延时函数,一般而言,对于普通的控制延时,并不会要求特别精确,所以可以使用普通的延时函数,例如
void delay(u32 time)
{
while(time--);
}
但是在某些情况下,例如读取传感器数据,就需要精确的延时,对于这种,这时候可以考虑使用软件定时器或者系统定时器进行精确定时延时。在这篇博文中不在详细对这两种进行描述。
本文主要是针对某些情况下,使用系统滴答定时器或者软件定时器对工程造成阻塞影响或者定时器用作其他用途,不够使用的情况下的另一种解决方法。
因此本文主要是解决通过普通延时函数实现精确的定时。
博主测试的开发板芯片是STM32f103c8t6,外部晶振是8M,系统使用经过倍频至72M,编译器选择的Keil5,使用的是库函数开发。通过普通延时函数来实现读取温湿度传感器DHT11的数据,由于使用的freeRTOS操作系统,同时各个软件定时器用作其他用途。。。理由不再赘述。
刚开始,通过使用__NOP()函数,因为使用了8M晶振9倍频,72MHz,所以一个nop约等于1/72us,所以使用72个nop函数为一个us,然后根据需要的定时时间进行计算。
void delay_us(u32 nTimer)
{
u32 i=0;
for(i=0;i __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP(); } } void delay_ms(u32 nTimer) { u32 i=1000*nTimer; delay_us(i); } 之后通过测试读取传感器数据,得到了数据,证明该延时函数相对比较准确,但是由于博主身边并没有逻辑分析仪或示波器,所以不能对其延时时间进行精确测试。 第二种延时方法是在电子发烧友论坛看到版主通过逻辑分析仪对另一种普通延时进行的精确测试。同样可以实现读取数据。具体延时函数如下所示: void delay_us(u32 time) { u32 i=8*time; while(i--); } void delay_ms(u32 time) { u32 i=8000*time; while(i--); } 

史海拾趣
|
现在正是年后,各种招聘会招聘广告铺天盖地,我们很多的大学生们又该忙找工作了。我作为一个人到中年的职场油子,今天跟大家谈谈招聘,希望能对大家的择业有所帮助吧。 首先要解开一个误区,那就是应届的大学毕业生很难找工作。 对于 ...… 查看全部问答> |
|
我的电脑上先安装了iis,然后我又安装了vs.net2005,继续安装sql server 2000(个人版)+ sql server 2000 sp4 我安装了sp4后查询sql的版本仍然是Microsoft SQL Server 2000 - 8.00.194 (Intel X86)不知道为什么没有改过来。 后来安装 ...… 查看全部问答> |
|
本帖最后由 dontium 于 2015-1-23 13:40 编辑 最近学习了一篇介绍芯海科技的高性能ADC设计的文章,感觉收获颇丰。特别是觉得其中有几个创新设计思路有一定的参考价值,贴出来给和我一样的学习者分享下吧,有经验的高手们也可以来点评一下:   ...… 查看全部问答> |
|
一.DSP系统设计经典问答 一、时钟和电源 问:DSP的电源设计和时钟设计应该特别注意哪些方面?外接晶振选用有源的好还是无源的好? 答:时钟一般使用晶体,电源可用TI的配套电源。外接晶振用无源的好。 问:TMS320LF2407的A/D转换精度保 ...… 查看全部问答> |
|
各位大虾 有没有人用过 At89C4051的处理器 我仿照网上的资料做了一个串口的下载器 但是就是下不了 希望哪位朋友能给个说明啊 非常感谢了… 查看全部问答> |
|
具体错误如下: Xst:528 - Multi-source in Unit on signal ; this signal is connected to multiple drivers. Xst:528 - Multi-source in Unit on signal ; this signal is connected to multiple drivers. Xst:528 - Multi-source in Unit ...… 查看全部问答> |
|
今天刚做的小东西,传输效率有点低,只有百分之十左右。 http://v.youku.com/v_show/id_XNDcwMTI2NTIw.html… 查看全部问答> |
|
如题啊,用Msp430G2553的launchPad和HC-SR501做一个人体检测工具,硬件电路怎么接啊,HC-SR501输出3V,60uA 可以直接接单片机,设置I /O口中断检测吗?还是需要搭三极管,如果搭三极管,电路怎么搭啊,HC-SR501需要5V供电,可以给HC-SR501单独供电 ...… 查看全部问答> |




