根因是HAL_Delay基于SysTick中断更新uwTick,并通过while循环等待uwTick递增。若在中断上下文中调用,且该中断优先级高于或等于SysTick优先级,SysTick中断无法抢占,uwTick永不更新,形成死等。修正方法:在HAL_Init()中或之后调用HAL_InitTick(TICK_INT_PRIORITY)设置SysTick优先级,通常设为最低(如15),确保任何外设中断都能抢占它;同时避免在中断中调用HAL_Delay,改用基于DWT周期计数或硬件定时器的非阻塞延时。若必须阻塞,应临时提升SysTick优先级或使用短忙等循环,但需评估实时性。检查NVIC优先级分组,确保SysTick优先级数值大于所有可能调用HAL_Delay的中断优先级。