HAL_Delay 卡死通常是 SysTick 中断优先级配置问题或中断被屏蔽。首先检查 HAL_Init() 是否调用了 HAL_InitTick(),它默认将 SysTick 优先级设为最低(数值最大)。若你的外设中断优先级数值小于 SysTick,且发生中断嵌套,SysTick 无法抢占,HAL_Delay 的 while 循环将永远等待。解决:1) 在 HAL_Init() 后调用 HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0) 提升优先级;2) 确认没有在临界区(如 __disable_irq())内调用 HAL_Delay;3) 若使用 FreeRTOS,需用 vTaskDelay 替代,并配置 SysTick 为最低优先级(configKERNEL_INTERRUPT_PRIORITY)。实操建议:在调试器中暂停,查看 PC 指针是否停在 HAL_Delay 的 while 循环,并检查 SysTick->CTRL 的 COUNTFLAG 位。若 SysTick 未使能,检查 RCC 时钟配置。
mcuku 阿沐 · 2026-08-17