介绍
目前大家用 Keil 和 IAR 工具来开发 STM32 的比较多,而 Keil 和 STM 都是 ARM 的自己产品,适配做的不错,目前大家也是用 Keil 的居多,Keil 有优点也有缺点,Keil 调试方面做的很好,但是编辑器做的一般,在编辑器使用体验上 VS Code 会好用很多,Keil 6 已经做成了 VS Code 的插件形式,名字叫 STM32 VS Code Extension,不过目前还没正式上线,使用起来问题较多,今天介绍另一种方式在 VS Code 上开发 STM32。
调试效果图

编辑器最底部的状态条有两个快捷按钮:Build、Load,添加教程查看 增加快捷按钮
安装依赖
VS Code
- 安装 VS Code 编辑器
- 安装 Cortex Debug 调试插件
OpenOCD
1 | brew install openocd |
安装成功后测试下
1 | $ openocd --version |
GCC (ARM)
安装指定版本 GCC,可以在官网查看有哪些版本 GNU Arm Embedded Toolchain Downloads,例如我的项目用的是 6-2017-q2-update 版本,以下为安装步骤
- 执行
brew tap-new $USER/local-tap - 进入
/usr/local/Homebrew/Library/Taps/$USER/homebrew-local-tap目录 - 新建
arm-none-eabi@6-2017-q2-update.rb(注意文件名版本号) - 写入下方内容,类名
AT后、url、version修改为指定版本号,sha256修改为当前版本文件计算出来的
1 | require 'formula' |
执行以下命令安装 GCC 库
1 | brew install $USER/local-tap/arm-none-eabi@6-2017-q2-update |
安装成功后测试下
1 | $ arm-none-eabi-gcc --version |
1 | $ arm-none-eabi-gdb --version |
配置调试环境
配置 OpenOCD
在项目根目录创建 ./vscode/openocd.cfg,以下配置调试器为 cmsis-dap,芯片为 stm32f4x,可以根据自己项目实际使用情况进行修改
- 查看支持的调试器 https://github.com/openocd-org/openocd/tree/master/tcl/interface 列表
- 查看支持的芯片 https://github.com/openocd-org/openocd/tree/master/tcl/target 列表
1 | source [find interface/cmsis-dap.cfg] |
配置 tasks.json
在项目根目录创建 ./vscode/tasks.json 文件,配置两个任务,一个是编译源代码,另一个是把编译的固件下载到芯片中,可根据自己的项目情况修改 command、args 参数来指定编译和下载命令
1 | { |
配置 launch.json
- 下载 STM32F407x.svd 文件到
./vscode目录下,这里查看所有支持的 芯片列表 - 在项目根目录创建
./vscode/launch.json文件,写入下方数据,可以根据自己的项目进行修改相关参数
1 | { |
增加快捷按钮
- 安装 Task Buttons 插件
- 在项目根目录创建
./vscode/settings.json文件,展示两个按钮,一个编译,一个下载
1 | { |
效果查看 调试效果图 编辑器最底部的状态条,有两个按钮:Build、Load
Dev Container
使用 Dev Container 可以实现只需配置一次开发环境,以后换别的开发机器只需要点几下就可快速启动一个一摸一样的开发环境,避免了每次配置开发环境所浪费的时间。还有就是开发环境可以和本机完全隔离,当不需要这个开发环境时,只需要在 Docker 中一键删除就行,非常的清爽、干净
安装依赖
- 安装 Docker Desktop
- 安装 Dev Containers VS Code 插件
配置 devcontainer.json
在项目根目录创建 ./.devcontainer/devcontainer.json 文件,写入下方数据
如果想要安装其它版本的 gcc,可以在 安装 gcc 中查看
1 |
|
在项目根目录创建 ./.devcontainer/Dockerfile 文件,配置一个容器,使用 ubuntu 系统,安装 gcc 编译环境
1 | FROM ubuntu:20.04 |
使用快捷键 Command + Shift + P 打开命令板面(或者点击左下角 Open a Remote Window 快捷图标),搜索 Rebuild and Reopen in Container 命令并执行,VS Code 就会连接到刚刚创建的容器中
问题列表
- 调试区域的
VARIABLES、WATCH板面变量不会自动更新,断点停止的时候才会刷新,可以使用CORTEX LIVE WATCH板面添加变量,添加到这里的会定时刷新,刷新周期可以在 配置 launch.json 的liveWatch字段中配置 - 调试区域的
XPERIPHERAL板面外设点击刷新报错peripheral-viewer: readMemory failed @ 0x40021000 for 40 bytes: CodeExpectedError: Busy,好像是 Peripheral Viewer 插件有 BUG - 如果断点结束后芯片停止运行,确认 配置 OpenOCD 环节是否忽略了以下内容,添加后即可恢复
1
2
3$_TARGETNAME configure -event gdb-detach {
resume
}






















