根因是HAL_Delay依赖SysTick中断,而SysTick中断优先级通常低于外部中断。在EXTI中断服务函数中调用HAL_Delay时,SysTick中断无法抢占当前EXTI中断,导致uwTick不更新,HAL_Delay陷入死等,表现为死机。此外,HAL_Delay在中断中长时间阻塞会破坏实时性。替代方案:1) 在中断中仅置标志位,主循环处理延时逻辑;2) 使用DWT周期计数器实现非阻塞微秒级延时,不依赖中断;3) 若必须短延时,用__NOP()循环或定时器计数轮询,但需评估精度;4) 将EXTI中断优先级设为低于SysTick,但HAL_Delay仍不推荐在ISR中使用。最佳实践是ISR短小精悍,延时任务交给主循环或RTOS任务。