延迟功能通常用于微控制器编程中。最常用的是微秒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& lt; delay_us; num ++){t = 11; while(t!= 0){t--;}}} //毫秒延迟void delay_ms(uint16_t delay_ms){volatile unsigned int num;对于(num = 0; num& lt; delay_ms; num ++){delay_us(1000); }}上述项目的源代码存储库:https://github.com/strongercjd/STM32F207VCT6/tree/master/02-Template(注意:官方帐户不支持外部链接,请将该链接复制到浏览器中进行下载)定时器中断定时器具有较高的精度,我们可以配置定时器中断,例如,配置一次1ms的中断,然后间接判断中断的数量,以达到准确延迟的目的。可以保证此方法的准确性,但是系统总是在中断,这不利于在其他中断中调用此延迟函数。
一些高精度的应用场景不合适,例如正在输出其他外围设备,并且不允许任何中断。 。
可以使用STM32的任何定时器。让我们以SysTick计时器为例进行介绍:初始化SysTick计时器:/ *将SysTick配置为1ms * / RCC_GetClocksFreq(& amp; RCC_Clocks); SysTick_Config(RCC_Clocks.HCLK_Frequency / 1000);中断服务函数:无效SysTick_Handler(void){TimingDelay_Decrement();} void TimingDelay_Decrement(void){if(TimingDelay!= 0x00){TimingDelay--; }}延迟函数:void Delay(__ IO uint32_t nTime){TimingDelay = nTime; while(TimingDelay!= 0);}上述项目的源代码存储库:https://github.com/strongercjd/STM32F207VCT6/tree/master/02-Template(注意:官方帐户不支持外部链接,请复制链接到浏览器以进行下载)查询计时器为了解决计时器频繁中断的问题,我们可以使用计时器,但是禁用中断并使用查询方法进行延迟。
这样可以解决频繁中断的问题,并保证准确性。可以使用STM32的任何定时器。
让我们以SysTick计时器为例进行介绍。 STM32的CM3核心处理器内部包含一个SysTick计时器。
SysTick是一个24位倒数计时器。当它计数到0时,它将自动从RELOAD寄存器中重新加载时序初始值。
只要不清除SysTick控制和状态寄存器中的启用位,它就永远不会停止。 SYSTICK时钟固定为HCLK时钟的1/8。
在这里,我们选择内部时钟源120M,因此SYSTICK时钟为(120/8)M,即SYSTICK定时器以(120/8)M的频率减少。 SysTick主要包含4个寄存器,例如CTRL,LOAD,VAL和CALIB。
▼CTRL:控制和状态寄存器▼LOAD:自动重载除数值寄存器▼VAL:当前值寄存器▼CALIB:不使用校准值寄存器,不再引入代码void delay_us(uint32_t nus){uint32_t temp; SysTick-& gt; LOAD = RCC_Clocks.HCLK_Frequency / 1000000/8 * nus; SysTick-& gt; VAL = 0X00; //清除计数器SysTick-> CTRL = 0X01; //启用,减小到零是没有作用,请使用外部时钟源CTRL; //读取当前的倒计时值)while((temp& amp; 0x01)& amp; amp;(!(temp& amp;(1& lt;& lt; 16)))); / /等待时间达到SysTick-> CTRL = 0x00; //关闭计数器SysTick-> VAL = 0X00; //清除计数器)void delay_ms(uint16_t nms){uint32_t temp; SysTick-> LOAD = RCC_Clocks.HCLK_Frequency / 1000/8 * nms; SysTick-& gt VAL = 0X00; //清除计数器SysTick-> CTRL = 0X01; //启用,减小到零是没有作用,请使用外部时钟源CTRL; //读取当前倒计时值)while((temp& amp; 0x01)& amp; amp;(!(temp& amp;(1& lt& lt; 16))))); //等待时间达到SysTick-CTRL = 0x00; //关闭计数器SysTick-& gt VAL = 0X00; //清空计数器}上面的项目源代码存储库:https://github.com/strongercjd/STM32F207VCT6/tree/master/04-Delay(注意:官方帐户不支持外部链接,请将链接复制到浏览器下载)汇编指令如果系统硬件资源紧张,或者没有提供其他计时器,并且您不希望方法1的普通延迟,则可以使用汇编指令进行延迟,
公司: 深圳市捷比信实业有限公司
电话: 0755-29796190
邮箱: momo@jepsun.com
产品经理: 李经理
QQ: 2215069954
地址: 深圳市宝安区翻身路富源大厦1栋7楼

更多资讯
获取最新公司新闻和行业资料。
- 计时延迟与SCR控制器应用详解 在工业自动化和电力电子领域,计时延迟和SCR(Silicon Controlled Rectifier,可控硅整流器)控制器是两个非常关键的技术概念。它们被广泛应用于各种设备和系统中,从家用电器到大型工业设备,都离不开这两项技术的支持。下面我...
- 零延迟缓冲器工作原理及应用 零延迟缓冲器是一种在信号处理领域广泛应用的技术,它主要用于消除信号传输过程中的延迟问题。在数字信号处理、音频工程以及视频处理等领域中,延迟是一个常见问题,可能导致信号失真或同步问题。零延迟缓冲器通过先...
- ABB塑壳断路器(S系列.T系列): 高效可靠的配电解决方案 ABB塑壳断路器以其卓越的性能和可靠性在电气行业中享有盛誉。S系列和T系列作为ABB断路器中的佼佼者,分别针对不同的应用领域提供了高效且灵活的解决方案。S系列塑壳断路器设计紧凑、功能全面,适用于各种工业及商业环境...
- 提高功率因数的几种方法 提高功率因数的几种方法可分为两种方法:提高自然功率因数和使用人工补偿:改善自然因素的方法:1) 合理选择电动机的容量,降低电动机的无功功率消耗,防止“大马拉小车”。2) 对于平均负载小于其额定容量约40%的轻负...
- QA-/3 隔离开关熔断器组(上海人民):一种高效可靠的低压配电解决方案 QA-/3 隔离开关熔断器组是由上海人民电器厂生产的一种集开关与保护功能于一体的电器设备。这种装置广泛应用于低压配电系统中,作为线路及电气设备的不频繁接通和分断操作,并在过载或短路时通过熔断器进行保护。QA-/3 隔...
- ST45-M智能控制器:高性能与灵活性的完美结合 ST45-M智能控制器是由一家专注于自动化控制技术的公司研发生产的一款高性能设备。该控制器集成了先进的微处理器和数字化信号处理技术,适用于多种工业环境下的自动化控制需求。它能够实现精准的数据采集与处理,支持多...
- Thunderbolt切换器使用方法及功能详解 Thunderbolt技术自推出以来,便以其高速的数据传输能力和多功能性受到用户的广泛欢迎。作为Thunderbolt技术的一部分,Thunderbolt切换器允许用户在多个设备之间共享一个或多个Thunderbolt端口,从而实现更灵活、高效的设备连接和数据...
- USB切换器使用方法及功能详解 USB切换器是一种非常实用的小工具,它能够帮助用户在多台计算机之间轻松切换USB设备,如键盘、鼠标、打印机等,无需频繁插拔线缆。这对于需要同时操作多台电脑的专业人士来说,无疑大大提高了工作效率和便利性。首先,...
- 爱普瑞BRT-205L-T:高效实用的智能设备 爱普瑞BRT-205L-T是一款高效实用的智能设备。该产品以其卓越的性能和便捷的操作体验,受到了广大用户的青睐。首先,在设计上,爱普瑞BRT-205L-T采用了先进的技术理念,确保了其在同类产品中的领先地位。无论是外观设计还是内...
- 单通道USB切换器使用方法及功能详解 在当今快节奏的工作环境中,单通道USB切换器成为了许多办公室和家庭用户的必备工具。它主要用于在多台计算机之间便捷地共享一套键盘、鼠标和打印机等外设,极大地提高了工作效率并减少了桌面杂乱。本文将详细介绍单通...
- UART串口桥接器详解:功能、应用与配置方法 UART(通用异步收发传输器)是一种常见的串行通信接口,广泛应用于各种嵌入式系统和设备之间数据传输。UART串口桥接器作为连接不同设备或系统间数据交换的重要工具,在物联网、工业自动化、嵌入式开发等领域发挥着重要作...
- 3-Phase Gate Drivers 3相栅极驱动器技术详解 在电力电子系统中,3相栅极驱动器是实现高效电机控制的关键组件之一。3相栅极驱动器主要用于控制三相电机中的功率开关器件(如IGBT或MOSFET),通过精确地控制这些开关器件的导通与关断时间,可以有效提高电机运行效率、...
- TP-S 系列接近开关:高性能与可靠性的结合 TP-S 系列接近开关是由 TEND/天得制造的一款高品质传感设备。这款接近开关具有卓越的检测性能和耐用性,适用于多种工业自动化环境。它主要用于非接触式位置检测,能够在无需物理接触的情况下感知金属物体的存在,从而实现...
- KROM霍科德DG6U-3及DG50U-3压力开关:精密可靠的工业应用选择 KROM霍科德是一家在燃烧技术领域享有盛誉的公司,其提供的产品广泛应用于工业生产过程中。其中,DG6U-3和DG50U-3两款压力开关是该公司的代表性产品之一。这两种型号的压力开关设计精良,能够精确监测和控制气体或液体的压力...
- 压敏电阻的电阻值可以通过多种方式进行测量,例如什么是最常用的方法? 压敏电阻的电阻值可以通过多种方式进行测量,其中最常用的方法是使用万用表来测量。这种方法非常简单和方便,可以在家中或办公室中进行。使用万用表测量压敏电阻的电阻值的步骤如下:选择合适的万用表。数字万用表可...
- 费斯托SMT-8-NS-S-LED-24-B:精准可靠的位置控制解决方案 费斯托的SMT-8-NS-S-LED-24-B是一款高性能行程开关,它在自动化领域中扮演着重要角色。这款行程开关具有8毫米的检测距离,适用于需要精确位置控制的应用场景。其内置的LED指示灯可以直观地显示开关状态,便于用户监控和维护。...
- S.J.X自动压力开关隔膜泵:高效稳定的流体传输解决方案 S.J.X自动压力开关隔膜泵是一种高效、耐用的流体传输设备,广泛应用于化工、制药、食品加工等行业。该泵采用先进的自动压力开关技术,能够根据系统的压力变化自动调节运行状态,有效防止过压或欠压情况的发生,从而保护...
- GGL-200/3负荷隔离开关:性能与应用 GGL型低压配电柜是一种广泛应用于电力系统的设备,其中的负荷隔离开关是其关键部件之一。以GL-200/3型号的负荷隔离开关为例,它主要用于额定电压为400V及以下的电力系统中,作为接通、承载和分断正常条件下电路中的电流之...
- 如何延长TVS管的使用寿命? 为了延长TVS管的使用寿命,有几点需要注意:首先,在使用TVS管之前,应确保其型号、规格和参数与电路中的要求相符;其次,应确保电路中的电压和电流不超过TVS管的额定值;最后,应确保电路中有足够的散热措施,以防止TVS...
- 四脚电容能用二脚的代替吗 毫欧电阻:即电阻值小的低电阻,通常小于1Ω。毫欧姆电阻也称为采样电阻、电流检测电阻、电流传感电阻、采样电阻和微电阻。毫欧姆电阻主要包括康铜电阻、锰铜电阻和低电阻芯片电阻。毫欧姆电阻通常具有导电性强、过电...