HAL_Delay 依赖 SysTick 中断里递增的 uwTick,并在 while 循环中轮询该变量直到超时。若在中断上下文(优先级不低于 SysTick 的中断)调用,SysTick 中断无法抢占当前中断,uwTick 不再更新,循环永不退出,表现为卡死。即使中断优先级低于 SysTick,长时间忙等也会阻塞其他中断,破坏实时性。替代方案:1) 中断中只置标志/发信号,延时逻辑放到主循环或任务中;2) 需要短延时时用 DWT->CYCCNT 做忙等(需使能 DWT,注意精度与功耗);3) 用硬件定时器单次触发或比较输出实现非阻塞延时;4) 在 RTOS 中用 osDelay/vTaskDelay,但注意不能在中断里调用阻塞 API,应使用 FromISR 接口通知任务。原则:中断服务程序应短小,禁止阻塞等待。