Linux下使用VSCode,GCC,OpenOCD实现STM32一键编译烧录调试(STM32CubeMX篇)

一. 开发工具安装

1. Visual Studio Code与插件

Visual Studio Code的安装和使用参考Linux下使用VSCode和CMake搭载C/C++开发环境
插件安装:

在这里插入图片描述

2. STM32CubeMX

可以去ST官网直接下载
选择STM32Cube init code generator for Linux,下载完后直接右键打开安装

3. OpenOCD烧录工具

打开终端直接安装就好,这样还能自动安装其他依赖包

sudo apt install openocd

成功安装完后可以看到openOCD版本号,连接上烧录器用lsusb命令可以看到相关信息

在这里插入图片描述

4. gcc-arm-none-eabi编译器

GNU Toolchain for Arm processors
Open source GNU tools for Arm processors: GCC, GDB, binutils, and libraries
下载完后首先解压到合适的位置,我这里解压到了/opt
ls看看里边的内容

在这里插入图片描述
然后把编译器路径添加到环境变量:
方法一(进当前用户生效):

cd ~
vi .bashrc
#打开.bashrc后把下面这句添加到最后面
export PATH=$PATH:/opt/gcc-arm-none-eabi-10-2020-q4-major/bin
#保存退出后需要使环境变量生效:
source .bashrc

方法二(所有用户生效):

sudo vi /etc/profile
#打开/etc/profile后把下面这句添加到最后面
export PATH=$PATH:/opt/gcc-arm-none-eabi-10-2020-q4-major/bin
#保存退出后需要重启使环境变量生效:
reboot

一切顺利的话,可以查到编译器的版本号

在这里插入图片描述

二. 生成工程

1. STM32CubeMX生成工程代码

生成工程的方法可以参考STM32CubeMX系列教程
这里需要注意两点:
一是SYSDebug要选择合适的接口配置,二是要选择生成Makefile文件

在这里插入图片描述
在这里插入图片描述

2. VSCode编辑工程

用VSCode打开工程目录,发现已经有Makefile文件了,而且打开main.c后一堆红色报错,虽然这里的报错并不影响你正常编译,但是强迫症实在难受,解决办法如下:
按下快捷键Ctrl+Shift+p,输入C/C++然后点击Edit Configurrations(JSON)

在这里插入图片描述
输入以下内容,对应的是MDK配置里的宏定义,需要根据你的工程来填写

在这里插入图片描述
保存后关闭所有文件,重新打开main.c,没有报错了强迫症十分满足,接着愉快编写点灯测试代码。

在这里插入图片描述
写完测试代码,按快捷键Ctrl+Shift+`打开VSCode内置终端,输入make命令回车开始编译

在这里插入图片描述
成功编译后会提示生成了elf,hex,和bin文件

在这里插入图片描述

三. OpenOCD烧录

首先烧录器连上STM32并打开电源,另外单独打开一个终端,输入以下指令

openocd -f interface/stlink-v2.cfg -f target/stm32f4x.cfg

  • stlink-v2.cfg对应烧录器,支持的烧录器在/usr/share/openocd/scripts/interface
  • stm32f4x.cfg对应MCU,支持的芯片在/usr/share/openocd/scripts/target

在这里插入图片描述

烧录器成功连接上后回到VSCode刚才的内置终端,分别输入

  • telnet localhost 4444 通过telnet连接openocd
  • program /home/lps/stm32/test01/build/test01.hex 烧录hex文件
  • reset 复位STM32
  • exit 关闭连接

在这里插入图片描述
此时可以看到STM32板子LED在闪烁

四. json脚本实现一键编译烧录调试

创建json脚本,创建方法还是参考Linux下使用VSCode和CMake搭载C/C++开发环境
只需注意launch.json要选择Cortex Debug

1. launch.json

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Cortex Debug",
            "cwd": "${workspaceRoot}",
            "executable": "./build/test01.elf",
            "request": "launch",
            "type": "cortex-debug",
            "servertype": "openocd",
            "configFiles": [
                "interface/stlink-v2.cfg",
                "target/stm32f4x.cfg"
            ],
            "armToolchainPath": "/opt/gcc-arm-none-eabi-10-2020-q4-major/bin",
            "svdFile": "STM32F427x.svd",
            "preLaunchTask": "Build"
        }
    ]
}

2. task.json

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Build",
            "type": "shell",
            "command": "make"
        }
    ]
}

3. SVD文件

.svd文件能在调试的时候方便看到各个外设的状态,在之前Windows下MDK和EWARM安装目录里都可以找到
MDK514/ARM/Pack/Keil/STM32F4xx_DFP/2.9.0/CMSIS/SVD/*.svd
EWARM7.5/arm/config/debugger/ST/*.svd
选择自己芯片的svd文件拷贝工程主目录

4. 工程目录

如果添加完这几个文件发现有小红点报错,重新打开VSCode即可,最终的文件目录如下

在这里插入图片描述

5. 一键调试

开始前把前面连接openocd的终端全都关掉,在main函数最开头打一个断点,修改一下延时时间(为了验证工程是否能重新编译和烧录)
按F5,发现工程自动编译,烧录并且进入调试状态,最终停在了startup_stm32f427xx.s开头,跟在MDK里调试一样,继续按F5就运行到了在main函数里打的断点。

在这里插入图片描述
调试界面打开CORTEX_PERIPHERALS能看到各个外设的状态

六. 总结

此文最终实现了STM32CubeMX自动生成Makefile和工程框架代码,然后在VSCode里继续完成编辑,烧录和调试,适用于在Linux下新建工程开发STM32,openocd还支持各种烧录器,包括且不仅限于stlink和jlink。
如果不想用STM32CubeMX生成的库,想用旧的标准外设库或者想编译以前写好的工程代码,那就需要用CMake来生成makefile,参考:
Linux下使用VSCode,GCC,OpenOCD实现STM32一键编译烧录调试(CMake篇)

七. 工程代码下载

Linux下开发STM32测试工程(STM32CubeMX篇和CMake篇)

  • 14
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值