文章目录
- 所需工具
- 安装调试
- 搭建过程中遇到的问题
写在前面 老大上周让我用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调试😅。