STM32中通过普通延时函数来精确延时

发布者:星光闪耀最新更新时间:2018-05-18 来源: eefocus关键字:STM32  延时函数  精确延时 手机看文章 扫描二维码
随时随地手机看文章

在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--);  

}  

关键字:STM32  延时函数  精确延时 引用地址:STM32中通过普通延时函数来精确延时

上一篇:STM32 SysTick 精确延时(非中断方式)
下一篇:s3c2440_LCD控制器设置及代码详解

推荐阅读最新更新时间:2024-03-16 16:03

通过 stm32 cubemx 配置 串口中断
首先选择好串口 ① 第三项的配置 ② 第三项 ③串口的全局中断 ④部分代码: voidHAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(HAL_UART_Receive_IT(&huart1,a1,1)!=HAL_OK) //判断是否接受到电脑传输过来的数据,并放入到数组a1。 { Error_Handler(); }else { HAL_GPIO_EXTI_Callback(GPIO_PIN_6); } } voidHAL_G
[单片机]
通过 <font color='red'>stm32</font> cubemx 配置 串口中断
STC12延时函数的探究
这种写法是C中嵌套了汇编。精确延时时间=2*t*T+5*T,T为一个机器周期。对于8051, 如果t=1,那么这个函数执行应该是7us。如果是STC12,那么这个延时函数的延时应该是:若t=1,精确延时=2*1*1/12+5*1/12=(7/12)us啊。 昨天也查了STC12手册 手册上对时钟写的很笼统,其中一句话是:与8051指令执行时间对比,一共有12个指令,一个时钟就可以执行完成,工作在相同频率下运行速度提高8~12倍 难道这里应该是(7/8)us?而不是(7/12)us? 这个是uint型函数时间是近似的 那么可以用延时时间=8*t*T 应该是8*1*(1/12)=8/12 根据程序分析猜想t=1时这个延时
[单片机]
STC12<font color='red'>延时</font><font color='red'>函数</font>的探究
stm32虚拟串口安装失败的原因
本人在网上也看到了好多说,按照以下步骤可以解决问题,但是不幸的是我的盗版系统不行: 将mdmcpq.inf复制到c:\windows\inf 将usbser.sys复制到c:\windows\system32\drivers 但是,还是借助于这个思路去找一些原因最后发现,在c:\windows\inf 文件夹下,有一个名叫mdmcpq2.inf的文件,突发奇想将2去掉试试可不可以,后来一试可以了,成功安装了!
[单片机]
STM32掌机教程9,完成掌机
  这是教程的最后一篇了,完成之前的任务,到这里一切都应当水到渠成,没什么好讲的了。结尾可能略显仓储,未尽之处,自己看代码吧,看不懂的地方可以在下边评论。 修改BGM   之前已经实现了根据不同的按键切换不同的BGM的功能。接下来把切换BGM的代码放到加命、减命、加分、升级的函数中。 //main.c //加命并显示 void add_life(void) { BGM = LIFE_BGM; BGM_change_flg = 1;//修改BGM add_life_cnt++; life++; showNumber(56,2,life,DEC,8,FONT_16_EN); } //难度提升并显示 void leve
[单片机]
STM32达人的GPIO使用心得
1. 我使用GPIO的不同就是,GPIO 操作是直接动用了STM32内部的寄存器的.虽说库好用,但对于某些IO 操作,很多人都会嫌库的效率底下(包括我自己在内),总得对STM32 的寄存器看两眼的吧,不然还不敢叫STM32 达人! 2. 当然了,即使直接操作寄存器了,但一些方便的宏定义还是用库里面的好,反正宏定义本身并不影响效率.这里要说一下MDK 的一个重要技巧,就是把工程编译完以后,在变量或函数体上按下F12 键,就会自动跳转到这个变量或函数的定义处.要研究库代码,这个技巧必不可少,不然在大堆C文件里找一个定义是相当累人的. 大家看看ST 官方库里面对各个寄存器的定义,是使用结构体的,可谓相当有技巧,首先要定义几个基础
[单片机]
2023 STM32全国巡展,米尔限量发STM32MP135开发板优惠券
2023年9月12日至10月27日,以“STM32,不止于芯”为主题的第十六届STM32全国巡回研讨会将走进11个城市,本届研讨会为全天会议,我们将围绕STM32最新产品开展技术演讲和方案演示。 本次STM32全国研讨会,米尔电子将现场展出STM32相关的最新产品技术和应用演示,为工程师们提供共话交流共同探索开放式平台,届时,米尔电子的技术工程师将与各位嘉宾面对面深入交流。感兴趣的客户和朋友欢迎莅临参观了解! 米尔电子的明星产品将精彩亮相 米尔MYC-YF13X 核心板及开发板 基于STM32MP1系列MPU,STM32MP135高性价比入门级MPU设计平台,完整的安全生态系统让MCU开发者友好地过渡到MPU平
[单片机]
2023 <font color='red'>STM32</font>全国巡展,米尔限量发STM32MP135开发板优惠券
STM32 SPI DMA 的使用
一是想总结一下SPI总线的特点与注意点,二是总结一下SPI DMA的使用 一、SPI信号线说明   通常SPI通过4个引脚与外部器件相连: MISO:主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。 MOSI:主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。 SCK:串口时钟,作为主设备的输出,从设备的输入 NSS:从设备选择。这是一个可选的引脚,用来选择主/从设备。它的功能是用来作为 片选引脚 ,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。 二、原理   MOSI脚相互连接,MISO脚相互连接。这样,数据在主和从之间串行地传输(MSB位在前)。  
[单片机]
<font color='red'>STM32</font> SPI DMA 的使用
按键开关机电路图 按键开关机电路设计方案
最近做个基于STM32脑波检测的项目,甲方爸爸要求使用按键进行开关机。在网上查了一些资料,找到了很多案例分享,在此进行总结。 主要分为以下两部分: 单片机控制按键开关机电路 独立按键开关机电路 1、单片机控制按键开关机电路 1.1、简约版 图中Ctr和Key接单片机管脚,作用如下: Ctr作为开关控制用 Key作为按键检测用 操作流程: 开机:按下按键,Q1导通,单片机上电,控制Ctr为低电平,保持Q1导通。 关机:再按下按键,单片机控制Ctr为高电平,此时松开按键Q1截至,单片机停电。 如图: 简约版 优缺点分析: 优点:电路简单,元器件比较少。 缺点:在停机状态下单片机的IO口依旧带电,正常使用没问
[单片机]
按键开关机电路图 按键开关机电路设计方案
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved