HAL_Delay依赖SysTick中断递增的uwTick全局变量,并通过while循环等待计数变化。在中断上下文中调用时,若该中断优先级高于或等于SysTick优先级,SysTick中断无法抢占,uwTick停止更新,HAL_Delay将永久阻塞形成死锁;即使优先级较低,长时间忙等也会阻塞同级及低优先级中断,破坏实时性。正确做法是:中断服务程序中绝对避免阻塞延时,改用状态机+时间戳的非阻塞方式,例如记录HAL_GetTick()起始值,在主循环或定时器回调中判断超时;短延时可用DWT周期计数器忙等(需使能DWT->CYCCNT);需要精确时序时用硬件定时器单次触发中断。同时应确保SysTick优先级设为最高,并在设计上禁止在ISR中调用任何带超时轮询的HAL函数。