在STM32 HAL库中,HAL_Delay依赖HAL_GetTick()和SysTick中断递增的uwTick变量,通过while循环等待计数到达。若在中断上下文中调用,由于SysTick中断优先级通常低于或等于当前中断,SysTick无法抢占执行,uwTick不再递增,HAL_Delay会死等,导致系统卡死;即使SysTick优先级更高,长时间忙等也会阻塞其他中断,破坏实时性。安全实现中断内延时的方法:1)短延时(几微秒到几十微秒)用DWT周期计数器或NOP循环做忙等,不依赖中断;2)需要精确延时用硬件定时器单次触发+中断/回调,或定时器轮询计数;3)避免在ISR中做毫秒级等待,改为置标志或发消息,把延时处理放到主循环或低优先级任务;4)若必须等待,可临时提高SysTick优先级并确保不会重入,但不推荐。核心原则:ISR应短小,延时尽量移出中断上下文。