文章目录
- 所需工具
- 安装调试
- 搭建过程中遇到的问题
写在前面 老大上周让我用vscode开发STM32,我爽快的答应了,心想大学四年装了这么多环境了这不简简单单,更何况vscode这两年还用过,然而现实总是令人不快的——我竟然花了差不多两周时间在这上面,并且不知道花费了多少流量😭😭😭。这玩意就给了所需要的主要工具,形象一点就如标题,问其他人他们也搞不定。因此,大家有空还是多涉猎一些开发环境,这玩意以前有兄弟跟我提过,但是我觉得没意义,所以没用过😅😅😅。
所需工具
- 代码编写ide vscode
- 调试连接工具 openocd
- 交叉编译工具链 gcc-arm-none-eabi
- 调试工具 gdb-multiarch
- 工程管理工具
make与cmake - 其他一些依赖
gcc-multilib与g++-multilib
本文基于ubuntu书写记录
安装调试
步骤一: vscode安装可采取现在官网想下载.deb文件,后续可双击直接安装,或者找到ubuntu中软件管理工具也可安装,也可使用命令·sudo dpkg -i 文件名.deb进行安装。
步骤二:至于后续几个工具可直接使用apt命令完成安装sudo apt install gcc-multilib g++-multilib gdb-multiarch gcc-arm-none-eabi openocd,使用命令安装后,这些工具的可执行文件会自动生成在/usr/bin目录中。
(说明:后续使用openocd时会用到stlink适配文件stlink-v2.cf 与 stm32适配文件stm32f1x.cfg,如果是使用的apt命令安装,那就就会存在于/usr/share/openocd/scripts目录下。或者,如果大家想直接查找也可使用whereis + 查找内容 或 find命令。)
步骤三:在vscode中下载插件:cortex-debug + Cortex-Debug: Device Support Pack - STM32F1+ venu's cortex-debug + rtos views + MemoryView + peripheral viewer 这写插件。(我搭环境的时候文档上就只写了前两个😢,不过有些是会自动下载的)上述这些插件也就差不多跟cortex-debug全都相关的插件了(如下图),哈哈哈。(说明:插件 Cortex-Debug: Device Support Pack - STM32F1是一个支持包,自己用的哪一款就下载哪一版本即可。不过,小编发现下载插件 venu's cortex-debug 后不安装这玩意似乎也行🤣。)
步骤四:在命令行中,使用命令 sudo apt-get install make cmake 下载工程管理工具。这里建议搭建先去学习一下makefile 与 cmake,不管自己要不要写这部分代码,起码要能够看懂吧。
步骤五:搭建STM32项目,验证自己所搭环境是否可用。这里可使用cubemx生成待makefile管理的工程,创建时选择makefile管理文件即可。 
或者大家也可参考这个项目gcc+vscode开发stm32,在这个项目中也有成功移植FreeRTOS 与 RT-Thread的工程供大家参考。
完成上述步骤后大家还需要配置gdb调试配置文件launch.json,下面这个配置大家可参考:
{// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"cwd": "${workspaceRoot}","executable": "./build/FreeRtos_Hao.elf","name": "myDebug","request": "launch","type": "cortex-debug","interface": "swd","runToEntryPoint": "main","servertype": "openocd","configFiles": [// 下面这两个根据自己的openocd目录更改"/usr/share/openocd/scripts/interface/stlink-v2.cfg","/usr/share/openocd/scripts/target/stm32f1x.cfg"],// 这个就是交叉编译工具链所在的目录"armToolchainPath": "/usr/bin",// 所用gdb目录"gdbPath": "/usr/bin/gdb-multiarch","showDevDebugOutput": "raw"},]
}
如果大家是使用github上的工程验证大家还需要更改makefile文件一处,如下:
OPENOCD_DOWN_PATH = /usr/share/openocd/scripts/interface/stlink-v2.cfg
OPENOCD_CHIP_PATH = /usr/share/openocd/scripts/target/stm32f1x.cfg
最后,借用其他兄弟的图画来表示这个调试过程就如下图:

搭建过程中遇到的问题
问题:
在移植过程中,小编遇到了报错 Failed to launch OpenOCD GDB Server: Timeout.(就是这个问题困扰了我近两周)
解决方案:
首先,检查在命令行中使用openocd是否可以连接开发板,这里可使用命令:
openocd -f xxx/openocd/scripts/stlink-v2.cfg -f xxx/openocd/scripts/interface/target/stm32f1.cfg
其次,使用gdb连接openocd调试开发板。如果使用gdb-multiarch,那么命令为:
gdb-multiarch + xxx.elf,进入gdb后就可使用target remote localhost:3333连接openocd服务。
最后,如果命令行可成功连接,那么就是vscode配置问题(小编就是这样,小编是缺少插件)。如果链接不成功,那么可能是版本问题,建议大家换版本重新尝试(ubuntu20.04安装的openocd是0.10版本的,而目前最新是0.12)。
如果大家碰到问题,可去官网查看有没有相关解析;或者 更换软件版本,可能是软件本班不兼容导致的;大家也可以去github上看看有没有相关issue。
如果大家在windows上尝试,大家将对应工具换成win版本与MinGW即可,不过这种方式小编没尝试过,网上普遍在windows上都使用arm-none-eabi-gdb调试😅。