HAL_Delay基于SysTick中断递增的uwTick全局变量做忙等,并依赖HAL_IncTick在SysTick_Handler中更新。若在中断上下文中调用,且该中断优先级不低于SysTick(默认最低优先级),SysTick无法抢占,uwTick停止递增,HAL_Delay永远等不到目标tick,形成死锁;此外忙等会阻塞同级及低优先级中断。替代方案:1) 中断内绝对不要用HAL_Delay,改用硬件定时器单次触发或DWT->CYCCNT做短延时;2) 需要等待时用状态机+时间戳,在主循环判断HAL_GetTick()差值;3) 若必须阻塞,用__NOP()循环或TIM计数轮询,且确保不依赖SysTick;4) 将耗时逻辑从中断移到主循环或RTOS任务,中断只置标志。注意提高SysTick优先级并非良策,会破坏时基。