MCU硬件和软件延时是啥意思?

strongerHuang 2025-11-10 19:59

关注+星标公众,不错过精彩内容

作者 | strongerHuang

微信公众号 | 嵌入式专栏


MCU开发过程中延时用的比较多,软件延时和硬件延时在做项目时他俩有什么区别?

今天就来讲讲关于硬件延时和软件延时的内容,以及它们的区别。

硬件和软件延时

延时的种类很多,先给大家普及一下延时相关概念和分类。

1.硬件延时

指利用具有计数功能的硬件进行延时。


比如:定时器(Timer)、 实时时钟(RTC)、 系统滴答定时器(SysTick)等具有计数功能的硬件。


2.软件延时

相对硬件延时而言,软件延时就是写一段软件代码,通过消耗CPU时间进行延时。


比如软件延时函数:

voidDelay(uint32_t Cnt){uint32_t i;
while(Cnt--)  {for(i=0; i<0x80000; i++);  }}


阻塞和非阻塞延时

实际应用中,延时分阻塞和非阻塞延时。


1.阻塞延时

指CPU一直停留阻塞,不去做其它事情,直到延时结束结束。


像上面那个软件延时(Delay)就是一个典型的阻塞延时,一直消耗CPU,直到延时结束。


2.非阻塞延时

指在延时期间,没有阻塞CPU,也就是说CPU在延时期间可以执行其它代码。


比如:利用定时器中断延时,只需要开启定时器,在中断(计数)到来之前,CPU可以执行其它代码。


3.额外举例

a.利用定时器也能实现阻塞延时,比如STM32的HAL自带的阻塞延时:

__weak voidHAL_Delay(uint32_t Delay){uint32_t tickstart = HAL_GetTick();uint32_t wait = Delay;
/* Add a freq to guarantee minimum wait */if (wait < HAL_MAX_DELAY)  {    wait += (uint32_t)(uwTickFreq);  }
while ((HAL_GetTick() - tickstart) < wait)  {  }}


b.利用RTOS自带的系统延时实现非阻塞延时,这个实现原理实际是利用了硬件延时(系统滴答)。


当然,这个延时的原理(延时函数代码)相对比较复杂,对于普通用户只需要知道如何调用以及简单原理即可,感兴趣的老铁可以自行研究一下。


通常在一些RTOS的(Demo)例子的任务中都有系统延时,ucos非阻塞延时:

OSTimeDly(10);

MCU硬件和软件延时是啥意思?图1

再比如FreeRTOS非阻塞延时:

vTaskDelay(10);

MCU硬件和软件延时是啥意思?图2


关于RTOS的延时,这里额外拓展一下关于RTOS中的相对延时和绝对延时的内容,请移步至文章《


硬件和软件延时区别

通过以上分析,其实不难得出,硬件延时相对软件延时更普遍。

1.软件相对硬件延时精度更差;

2.软件延时为阻塞延时,硬件延时可阻塞,也可非阻赛延时;

3.硬件延时应用更灵活、更广泛;

......


实际应用中,硬件延时、非阻塞延时相对更普遍。

------------ END ------------


MCU硬件和软件延时是啥意思?图3


关注公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。


点击“阅读原文”查看更多分享。

声明:内容取材于网络,仅代表作者观点,如有内容违规问题,请联系处理。 
MCU 软件
more
分享一个面向MCU的事件调度器
MCU的AI竞赛,已经打响
MCU上AI,只需要简单六步,即可实现AI模型部署
物联网MCU,再次繁荣
为MCU加上AI,安谋科技Arm China发布新一代CPU IP——“星辰”STAR-MC3
中国“芯”再突破!22nm高端车规MCU率先量产,抢跑下一代区域控制器市场
低成本超低功耗带触摸MCU正在崛起
完成C+轮融资,芯钛科技自研MCU芯片已成功上车
一文说透:CPU、SoC、MCU什么区别
家电MCU,迎来利好
Copyright © 2025 成都区角科技有限公司
蜀ICP备2025143415号-1
  
川公网安备51015602001305号