Windows环境下使用Visual Studio Code与CMake编译烧录STM32工程代码指南

一、软件安装

已默认电脑上存在VScode,这里不讲述Vscode的安装。

涉及软件的安装配置:

  • 安装Cmake
  • 安装arm-none-eabi-gcc
  • 安装OpenOCD
  • MinGW
  • 安装VScode插件C/C++、CMake、Cortex-Debug
  • 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.

    解决办法:

    1. 安装zadig
    2. 勾上options->List all device
    3. 找到对应的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

    物联沃分享整理
    物联沃-IOTWORD物联网 » Windows环境下使用Visual Studio Code与CMake编译烧录STM32工程代码指南

    发表回复