Linux下使用vscode开发STM32
linux下使用vscode一键式编译烧录调试STM32
1. 环境准备
在开始之前,需要安装以下必要的软件和工具:
- STM32CubeMX:用于生成STM32工程代码,提供了图形化界面,可以方便地配置STM32的各0种参数。
- vscode:一个轻量级的代码编辑器,支持多种编程语言,支持插件扩展,可以通过插件实现STM32的编译、烧录和调试。
- OpenOCD:一个开源的调试工具,支持多种调试器,可以通过OpenOCD实现对STM32的调试。
- gcc-arm-none-eabi编译器,用于编译STM32的代码。
- gdb-multiarch:一个多架构的调试器,支持多种架构的调试,用于vscode一键调试STM32。
1.1 安装STM32CubeMX
在ST官网下载STM32CubeMX-Linux安装包,解压后,右键赋予SetupSTM32CubeMX-6.x.x.linux
可执行权限,然后双击运行,按照提示安装即可。
安装完成后,在安装目录下双击STM32CubeMX
打开STM32CubeMX,依次点击Help
->Manage embedded software packages
,然后根据自己的STM32型号,勾选相应的STM32Cube MCU Package
,然后点击Install
安装HAL
库。
1.2 安装vscode
在官网下载vscode .deb
安装包,在下载目录下打开中端并执行sudo dpkg -i vscode-amd64.deb
然后打开vscode,按下Ctrl+Shift+X
打开插件商店,分别搜索并安装插件Cortex-Debug
,C/C++
,CMake
,CMake Tools
,Arm Assembly
。
1.3 安装OpenOCD
可以使用sudo apt-get install openocd gcc-arm-none-eabi gdb-multiarch
一条命令安装OpenOCD、gcc-arm-none-eabi和gdb-multiarch,也可以单独安装。
在终端执行sudo apt-get install openocd
即可安装OpenOCD。
安装完成后,可以通过openocd -v
命令查看OpenOCD的版本。
如果连接上烧录器,可通过lsusb
查看OpenOCD是否识别到烧录器,如下图所示,我的烧录器是ST-LINK/V2
。
1.4 安装gcc-arm-none-eabi
在终端执行sudo apt-get install gcc-arm-none-eabi
即可安装gcc-arm-none-eabi。
安装完成后,可以通过arm-none-eabi-gcc -v
命令查看gcc-arm-none-eabi的版本。
网上的教程使用了arm-none-eabi-gdb
调试器,我在配置过程中先是发现安装目录没有arm-none-eabi-gdb
,后来在官网下载源文件并添加到环境变量后,发现arm-none-eabi-gdb
调试器无法正常调试,并报出以下错误:
1
2
3
4
5Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
Python runtime state: core initialized
ModuleNotFoundError: No module named 'encodings'
Current thread 0x00007c3a754ecc00 (most recent call first):arm-none-eabi-gdb
不支持python3.10,但由于电脑上的其他项目需要python3.10,所以不能降级python,后面大量搜索相关经验发现gdb-multiarch
调试器可以正常调试,所以建议使用gdb-multiarch
调试器。
1.5 安装gdb-multiarch
直接在终端执行sudo apt-get install gdb-multiarch
安装gdb-multiarch。
2.生成STM32工程代码
这一部分的主要内容是,演示如何使用STM32CubeMX生成STM32工程代码,配置PB0、PB1,一闪一灭实现LED跑马灯效果
2.1 新建工程
主页点击New Project
,下方的ACCESS TO MCU SELECTOR
选择自己的STM32型号
然后双击选中自己的开发板,这里我的STM32型号是STM32F767IGT6
,然后在弹窗中点击Yes
,进入Pinout & Configuration
界面。
2.2 配置RCC
在Pinout & Configuration
界面,依次点击System Core
->RCC
,将High Speed Clock (HSE)
和Low Speed Clock (LSE)
设置为Crystal/Ceramic Resonator
2.3 配置引脚
在Pinout view
界面,找到PB0
,PB1
,分别单击设置为GPIO_Output
。
然后在System Core
->GPIO
中,进行如下配置,并为PB0
,PB1
设置标签LED0
,LED1
,在后面生成代码时会自动生成对应的宏定义,可以方便地找到对应的引脚。
2.4 配置时钟树
在Clock Configuration
界面,配置时钟树,使得STM32的时钟频率为216MHz。
有以下三处需要配置:
然后细调GPIO的配置,设置初始化状态为High
,使得LED灭时为高电平,点亮LED时为低电平。GPIO设置为推挽输出,输出速度为High
,使得LED点亮时电流较大,亮度较高。
2.5 生成代码
设置完成后,点击右上角Generate Code
,填写工程名称,选择工程路径,选择Toolchain/IDE
为Makefile
然后转到
Code Generator
界面,选择Generate peripheral initialization as a pair of '.c/.h' files per peripheral
,这样做可以将每个外设的初始化代码分别放在.c
和.h
文件中,方便查找和修改,然后点击右上角的Generate Code
生成代码。
2.6 编写代码
使用vscode打开生成的工程代码,然后在Src
目录下的main.c
文件的while(1)
循环,替换为以下代码,实现LED跑马灯效果:
1 | while (1) |
如果发现代码中有undefined reference
的错误,可以参考4.2解决。
在vscode中按下Ctrl+Shift+‵
,打开内置终端,输入make
编译代码,编译成功后,会在build
目录下生成led.elf
,led.bin
,led.hex
三个文件。
3. OpenOCD烧录
打开OpenOCD
将ST-LINK/V2
连接到电脑和STM32开发板,并打开STM32的电源,然后在终端执行openocd -f interface/stlink-v2.cfg -f target/stm32f7x.cfg
- openocd:启动OpenOCD - -f
interface/stlink-v2.cfg:指定烧录器为ST-LINK/V2
,支持的烧录器可在/usr/share/openocd/scripts/interface
目录下查看
- -f
target/stm32f7x.cfg:指定目标芯片为STM32F7x
,支持的芯片可在/usr/share/openocd/scripts/target
目录下查看
烧录代码
在vscode中按下Ctrl+Shift+‵
,打开内置终端,然后依次执行以下命令:
1 | telnet localhost 4444 #通过telnet连接OpenOCD |
此时可以看到板子上的两个LED灯在交替闪烁,实现了跑马灯效果。
4. 一键编译烧录调试
如果像上文那样手动编译、烧录、调试,会比较繁琐,可以通过vscode及其丰富的插件实现F5
一键编译、烧录、调试。
4.1 下载SVD文件
SVD文件是芯片的寄存器描述文件,在调试时被用于查看和修改寄存器的值。
可以在这里下载自己的STM32开发版的SVD文件,然后将SVD文件放在工程目录下。
4.2 配置c_cpp_properties.json
按下Ctrl+Shift+P
打开命令面板,输入C/C++
,点击Edit Configurations(JSON)
,然后在c_cpp_properties.json
中
修改"defines": [],
为: 1
2
3
4"defines": [
"USE_HAL_DRIVER",
"STM32F767xx"
],USE_HAL_DRIVER
和STM32F767xx
这两个宏定义,这样在代码中就可以使用这两个宏定义,不会再出现undefined reference
的错误。
4.2 配置launch.json
按下Ctrl+Shift+D
打开调试视图,然后点击create a launch.json file
,选择Cortex-Debug
,然后在launch.json
中修改为以下配置:
1 | { |
4.3 配置tasks.json
按下Ctrl+Shift+P
打开命令面板,输入Tasks
,选择Tasks: Configure Task
,然后选择Create tasks.json file from template
,选择Others
,然后在tasks.json
中修改为以下配置:
1 | { |
最终的目录结构如下:
4.4 一键编译烧录调试
在开始前先把之前打开的OpenOCD关闭,在main.c
中的main
函数中设置如图所示断点,然后按下F5
,vscode会自动编译、烧录、调试,然后跳转到第一个断点处,通过F10
逐过程调试,可以看到LED灯的交替闪烁。
5. 总结
本文介绍了如何在Linux下使用vscode开发STM32,通过STM32CubeMX生成STM32工程代码,然后通过vscode一键式编译、烧录、调试STM32,实现了LED跑马灯效果。希望本文对大家有所帮助。
参考文献: