HAL_Delay 依赖 SysTick 中断递增的全局变量 uwTick,并在 while 循环中等待该变量变化。如果在中断上下文中调用,且该中断优先级不低于 SysTick(默认最低优先级),SysTick 中断无法抢占当前中断,uwTick 不再更新,HAL_Delay 就会永久死等;即使优先级较低,也会阻塞中断响应,破坏实时性。替代方案:1) 中断中只置标志或发信号,主循环延时处理;2) 需要短延时时用 DWT 周期计数器或硬件定时器做忙等;3) 用硬件定时器实现非阻塞状态机,记录时间戳比较;4) 若必须延时,可临时提升 SysTick 优先级,但不推荐。核心原则:中断服务程序应短小、非阻塞,禁止调用 HAL_Delay。