HAL_Delay(1000)真准吗?SysTick的1ms基准从哪来

短文标题: HAL_Delay(1000) 真准吗?SysTick的1ms基准从哪来

你有没有想过一个问题:HAL_Delay(1000)为什么能延时1秒?靠SysTick。 它每1ms中断一次,累加uwTick变量。HAL_Delay循环读取uwTick直到差值达到参数值。1ms基准的计算,

HAL_InitTick(TickPriority)

{

HAL_SYSTICK_Config(SystemCoreClock / 1000); // 设置1ms中断周期

}

SystemCoreClock是当前CPU内核时钟频率(Hz):

  • HSI 8MHz → 8000000/1000 = 8000 → SysTick每8000个时钟周期中断1次 → 1ms
  • HSE 8MHz,PLL 72MHz → SystemCoreClock更新为72000000 → 72000000/1000 = 72000

SysTick的LOAD值随系统时钟频率动态调整,确保中断周期始终是1ms。时钟频率改变后延时不准 ,上电后默认使用HSI(8MHz)→ SystemCoreClock=8000000 → HAL_InitTick配置SysTick。执行SystemClock_Config后,系统时钟切换为PLL输出(72MHz),但SystemCoreClock变量被更新,SysTick的LOAD值仍是8000 。72MHz下8000个时钟周期 = 8000/72MHz ≈ 111μs,不是1ms。结果: HAL_Delay(1000)实际延时约111ms,而不是1000ms。解决方案:重新配置SysTick

HAL库的HAL_RCC_ClockConfig在系统时钟切换后,自动调用HAL_InitTick重新配置SysTick,使用新的SystemCoreClock计算LOAD值。用户手动修改时钟配置时(不通过HAL_RCC_ClockConfig),必须手动调用HAL_InitTick重新初始化SysTick。否则延时功能全部出错。

HAL_Delay的局限性

  • 精度有限:中断周期1ms,误差±1ms(中断周期本身)。叠加中断嵌套延迟(高优先级中断阻塞SysTick),误差可达数毫秒
  • 阻塞延时:延时期间CPU空转,无法执行其他任务
  • 重入问题:在SysTick中断内调用HAL_Delay会死锁(因为uwTick不再累加)
  • 不能用于微秒延时:1ms分辨率不够,微秒需用硬件定时器或DWT计数器

这个故事的启示, HAL_Delay的1ms基准依赖正确的SystemCoreClock值。改时钟,必须重配SysTick。 SysTick中断负责累加uwTick,高优先级中断长时间抢占会导致HAL_Delay变慢。写在最后, HAL_Delay方便,但不精准,不适用于高精度定时。微秒级延时用硬件定时器或DWT,毫秒级用HAL_Delay省心。知其然,知其所以然------延时功能背后藏着系统时钟与SysTick的联动。


(本文灵感源于于振南《新概念ARM32单片机》教程第6.3节"SYSTICK定时器代码与时钟配置关联解析"。)

觉得有用?点赞、转发,让更多人看懂HAL_Delay背后的SysTick机制。

相关推荐
Freedom_my17 小时前
STM32项目3
stm32·单片机·嵌入式硬件
国科安芯18 小时前
星间光链路:AS32S601型抗辐射MCU在空间激光通信终端控制中的技术实现
服务器·网络·单片机·嵌入式硬件·物联网·安全·信息与通信
小李不困还能学20 小时前
基于 51 单片机的8 路抢答器设计教程
单片机·嵌入式硬件·mongodb·抢答器
维基框架20 小时前
汽车座舱开发上云 Google的Arm实例解决了什么实际问题
arm开发·人工智能·汽车
萌动的小火苗20 小时前
嵌入式开发中的栈与队列:任务调度为什么依赖数据结构
数据结构·c++·单片机·嵌入式硬件
振浩微433射频芯片21 小时前
工业遥控器总在关键时刻“掉链子”?——433MHz芯片方案如何破局
网络·单片机·嵌入式硬件·物联网·工业遥控
blevoice21 小时前
抖抖燃脂机单 AC6966B 主控调试踩坑:Type-C 整机供电喇叭无声排障
c语言·开发语言·单片机
三易串口屏1 天前
三易串口屏开发教程:如何使用键盘控件输入参数并发送给单片机
单片机·嵌入式硬件·串口屏·三易串口屏·键盘控件
十月的皮皮1 天前
STM32从零到量产开发:四路继电器工业控制模块开发实战笔记(小白视角)
c语言·笔记·stm32·stm32cubemx·hal库
2CM_Embed1 天前
F28379D 下载后 VOFA+ 无数据、Reset 后恢复:一次 TZ 中断误触发排查记录
笔记·单片机·sci·c2000·f28379d·vofa·tz