VSCode + OpenOCD 远程调试开发STM32

[PC] --Wi-Fi--> [树莓派5] --USB--> [DAPLink] --SWD--> [STM32目标板] 树莓派配置 测试Daplink USB连接状态 lsusb 必要的包 openocd gdb-multiarch git make sudo apt install openocd gdb-multiarch git make OpenOCD openocd -f interface/cmsis-dap.cfg -f target/stm32f1x.cfg 默认情况下,OpenOCD启动的GDB服务器(3333端口)只监听本地回环地址(127.0.0.1) 我们需要让OpenOCD监听所有网络接口(0.0.0.0) nano ~/remote_daplink.cfg # 指定使用CMSIS-DAP接口 adapter driver cmsis-dap # 使用SWD协议,STM32F1支持SWD transport select swd # 可选:设置适配器速度,如果连接不稳定可以降低速度(单位kHz) adapter speed 1000 # 指定STM32F1x的目标配置文件 source [find target/stm32f1x.cfg] bindto 0.0.0.0 gdb_port 3333 telnet_port 4444 tcl_port 6666 # 可选:如果你希望OpenOCD在后台运行(作为守护进程 # daemon_startup attach sudo openocd -f ~/remote_daplink.cfg Tips: -d:输出调试信息 ...

November 1, 2025 · LingC

Keil5 编译错误 error: call to undeclared function '__enable_irq'

stm32f1xx_hal_i2c.c 中 __enable_irq 和 disable_irq 函数出现了报错: error: call to undeclared function '__enable_irq'; ISO C99 and later do not support implicit of function declarations 在 core_cm3.h -> cmsis_compiler.h -> cmsis_armclang.h (ARM Compiler 6) 或 cmsis_armcc.h (AC5) 中对这两个方法没有定义,只有一段注释: __enable_irq 和 disable_irq 控制的是PRIMASK寄存器值。 是一种 intrinsic 函数,编译器会自动识别并替换为相关的指令,它们其实是编译器的一部分,实际的定义位于Keil的 arm_compat.h 中。 /* * Arm Compiler 6 (armclang) */ #elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) #include "cmsis_armclang.h" 在其中,这个头文件 arm_compat.h 本该是不存在的: #include <arm_compat.h> 在.\Drivers\CMSIS\Include 中多了一个arm_compat.h文件,这会导致覆盖编译器的头文件,所以会出现一系列错误。 ...

September 6, 2025 · LingC