在STM32 HAL库中,中断服务函数(如USART1_IRQHandler)在stm32fxxx_it.c里定义为__weak,用户重定义后仍进默认死循环,通常是链接阶段没选中用户实现。排查顺序:1) 确认用户函数名与启动文件向量表里的名字完全一致(大小写、拼写),且无static;2) 检查用户文件是否加入编译、是否被条件编译宏屏蔽;3) 查看map文件,确认该符号解析到用户目标文件而非stm32fxxx_it.o;4) 若用户函数放在C++文件,需extern "C";5) 检查是否在HAL_xxx_IRQHandler里调用了HAL_xxx_IRQHandler后又误调用默认处理,或中断标志未清除导致反复进入;6) 确认启动文件向量表未被自定义链接脚本覆盖。最直接的办法是在用户ISR入口加断点或翻转GPIO,若没执行说明链接未生效,重点查map和编译选项。
mcuku 阿沐 · 2026-10-20