Windows环境下使用Visual Studio Code与CMake编译烧录STM32工程代码指南
一、软件安装
已默认电脑上存在VScode,这里不讲述Vscode的安装。
涉及软件的安装配置:
1.1 安装CMake
1.1.1 安装
下载地址:
https://cmake.org/download/
选择适合自己电脑的最新版本进行下载并安装
1.1.2 添加环境变量
我们需要将cmake的可执行文件的文件夹路径添加到环境变量,方便使用命令调用cmake,路径为:(CMake的安装路径,bin文件夹的路径)
X:\…\CMake\bin
将以上目录添加到系统环境变量中去。
1.1.3 验证
在终端输入以下命令,验证是否安装成功。
cmake
1.2 安装arm-none-eabi-gcc
1.2.1 安装
下载地址:
https://developer.arm.com/downloads/-/gnu-rm
1.2.2 添加环境变量
我们需要将arm-gcc的可执行文件的文件夹路径添加到环境变量,方便使用命令调用arm-gcc,路径为:(arm-none-eabi-gcc的安装路径,bin文件夹的路径)
X:\…\bin
我的路径是:D:\Program Files (x86)\GNU Arm Embedded Toolchain\10 2021.10\bin
将以上目录添加到系统环境变量中去。
1.2.3 验证
在终端输入以下命令,验证是否安装成功。
arm-none-eabi-gcc
1.3 安装OpenOCD
1.3.1 安装
下载地址:
https://gnutoolchains.com/arm-eabi/openocd/
选择适合自己电脑的最新版本进行下载,直接下载的是压缩包文件,解压后可直接使用
1.3.2 添加环境变量
我们需要将OpenOCD的可执行文件的文件夹路径添加到环境变量,方便使用命令调用OpenOCD,路径为:(arm-none-eabi-gcc的安装路径,bin文件夹的路径)
X:\…\OpenOCD-20231002-0.12.0\bin
我的路径是:D:\Program Files (x86)\OpenOCD-20231002-0.12.0\bin
将以上目录添加到系统环境变量中去。
1.3.3 验证
在终端输入以下命令,验证是否安装成功。
openOCD
1.4 安装MinGW
1.4.1 安装
下载地址:
https://sourceforge.net/projects/mingw-w64/files/
选择适合自己电脑的最新版本进行下载,直接下载的是压缩包文件,解压后的mingw64可直接使用,我这里选择MinGW-W64GCC-8.1.0下的x86_64-posix-sjlj
1.4.2 添加环境变量
我们需要将make的可执行文件的文件夹路径添加到环境变量,方便使用命令调用make,路径为:
X:\…\mingw64\bin
我的路径是:D:\Program Files (x86)\mingw64\bin
将以上目录添加到系统环境变量中去。
1.4.3 验证
在终端输入以下命令,验证是否安装成功(由于Window下make执行程序为mingw32-make.exe)。
mingw32-make
1.5 在Vscode中安装插件
要安装的插件如下:
二、编译和烧录
2.1 编译前的准备
选用的工程是网友上传参考资料,如下:
链接:https://pan.baidu.com/s/1N4DI9GpaRnCr-4J0uCTTHw?pwd=wqfz
提取码:wqfz
–来自百度网盘超级会员V4的分享
首先把.vscode文件夹了json配置改掉,改成自己的路径和名称,编译就正常。
2.2 烧录
我是使用jlink的swd烧录,有点麻烦。进入build文件夹下执行以下命令,其中将Project.hex替换为自己的目标文件,stlink-v2.cfg是选择下载器类型,stm32f1x.cfg是芯片型号
openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c "program Project.hex verify reset exit"
因为我的是jink下载器,那就照葫芦画瓢,改为
openocd -f interface/jlink.cfg -f target/stm32f1x.cfg -c "program Project.hex verify reset exit"
在vscode终端输入后发现不行,
Jlink比STlink烦一点的就是驱动不能直接用。 OpenOCD无需Jlink驱动,但需要USB驱动,要不然会有如下几行报错:
Warn : Failed to open device: LIBUSB_ERROR_NOT_SUPPORTED.
Info : No device selected, using first device.
Error: No J-Link device found.
解决办法:
- 安装zadig
- 勾上
options->List all device
- 找到对应的Jlink设备,并将driver替换成libusbK:
运行
如果是USB连接,使用SWD接口的,直接打开终端,运行命令:openocd -f interface/jlink.cfg -c "transport select swd" -f target/stm32f1x.cfg
这时就可以看到开放了几个端口了,表明成功了。
Open On-Chip Debugger 0.12.0 (2023-01-14-23:37)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html
swd
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections
Info : J-Link V9 compiled May 7 2021 16:26:12
Info : Hardware version: 9.40
Info : VTarget = 3.287 V
Info : clock speed 1000 kHz
Info : SWD DPIDR 0x1ba01477
Info : [stm32f1x.cpu] Cortex-M3 r2p1 processor detected
Info : [stm32f1x.cpu] target has 6 breakpoints, 4 watchpoints
Info : starting gdb server for stm32f1x.cpu on 3333
Info : Listening on port 3333 for gdb connections
注:如果需要远程gdb调试,记得: 1. 加上命令选项 -c "bindto 0.0.0.0"
。即:openocd -f interface/jlink.cfg -c "transport select swd" -f target/stm32f1x.cfg -c "bindto 0.0.0.0"
2. 防火墙得配置得当,不要被拦截了
完成后重新运行
openocd -f interface/jlink.cfg -f target/stm32f1x.cfg -c "program Project.hex verify reset exit"
发现报错,由于我使用的是jlink的swd,但openodb的安装目录D:\Program Files (x86)\OpenOCD-20231002-0.12.0\share\openocd\scripts\interface下只有jlink.cfg,没有与swd相关的文件,因此只能自己新建一个文件,把jlink.cfg复制一份并重命名为jlink_swd.cfg,修改内容如下:
transport select swd(增加这条),保存。
重新运行
openocd -f interface/jlink.cfg -f target/stm32f1x.cfg -c "program Project.hex verify reset exit"
发现烧录正常了。仿真也可以。
但是使用了Zadig把对应的Jlink设备,并将driver替换成libusbK后,在Keil MDK里识别不到JLink了,尴尬。
参考网友资料
1、使用VScode开发STM32:基于CMake(包含标准库和HAL库工程)_vscode cmake stm32-CSDN博客2、Vscode搭建开发调试STM32/RISC-V环境IDE(最全面)_vscode stm32-CSDN博客
3、https://zhuanlan.zhihu.com/p/681137030
4、Jetson平台使用Jlink给stm32下载程序_jtag scan chain interrogation-CSDN博客
作者:rawgan