这是HAL库中典型的弱符号覆盖问题。__weak函数(如HAL_GPIO_EXTI_Callback)在库中以弱符号定义,用户在同名强符号定义后,链接器应优先选择强符号。若仍调用原函数,常见原因:1)用户函数签名或命名不一致(如漏了extern "C"或参数类型不同),导致变成另一个符号;2)用户函数定义在未被编译进工程的源文件中,或该文件被排除;3)链接顺序/库以静态库形式引入,且使用了--whole-archive或符号被本地化;4)在C++中未加extern "C"导致名字修饰不同。验证方法:用arm-none-eabi-nm查看目标文件,确认用户.o中该符号为T(强定义),库中为W(弱);用arm-none-eabi-objdump -d反汇编调用点,看跳转地址是否指向用户函数;也可在用户函数入口加GPIO翻转或打印,实测是否进入。建议将回调实现放在main.c或明确加入编译的源文件,并保持签名与HAL声明完全一致。