VScode+CubeMx开发STM32
前提拥有Ninja构建工具ARM GCC工具链
一、STM32CubeMX
这里还是使用原本的STM32CubeMX软件来生成框架代码
主要区别是
在Project Manager页面选择CMake和GCC
![]()
二、VScode
在配置文件中新建一个新的配置文件
名称可以随便起,按自己的来
创建新的配置文件是为了隔离之前的环境,也避免污染其他环境
![]()
之后下载STM32Cube拓展
选择第一个,进行下载。(这里是一个整合包,可以关联下载所有的)
![]()
下载完成之后把工程导入进来,等待配置完成就可以进行开发了
" title="
">
点击Debug生成即可生成构建系统进行编译
之后在运行和调试端,这里插入STLink就可以下载了
![]()
三、DapLink下载调试
由于ST官方没有加入CMSIS-DAP这个调试,所以如果使用daplink需要手动配置
这里使用
DAPLink + OpenOCD + Cortex-Debug
这个配置来进行Daplink下载调试
1.下载Cortex-Debug插件
![]()
2.下载OpenOCD
打开电脑PowerShell
winget install xpack-dev-tools.openocd-xpack装完之后重新打开 VS Code,再在终端里测试:
openocd --version如果能显示版本号,就说明 OpenOCD 装好了。(或者先检查一下电脑之前有没有安装过这个OpenOCD)
3. 新建配置文件
新建:
.vscode/launch.json{
"version": "0.2.0",
"configurations": [
{
"name": "DAPLink OpenOCD Debug STM32F407",
"type": "cortex-debug",
"request": "launch",
"servertype": "openocd",
"cwd": "${workspaceFolder}",
"executable": "${workspaceFolder}/build/Debug/${workspaceFolderBasename}.elf",
"configFiles": [
"interface/cmsis-dap.cfg",
"target/stm32f4x.cfg"
],
"serverArgs": [
"-c",
"adapter speed 500"
],
"runToEntryPoint": "main",
"showDevDebugOutput": "raw"
}
]
}如果你的 .elf 文件名不是工程文件夹名,比如不是:
工程名.elf那就把这一行:
"executable": "${workspaceFolder}/build/Debug/${workspaceFolderBasename}.elf"改成实际文件名,例如:
"executable": "${workspaceFolder}/build/Debug/USART_for_RK3506_test.elf"![]()
之后可以点击这个进行调试
4. 配置一键编译下载
这个是 Ctrl + Shift + B 一键编译 + 下载
新建或修改:
.vscode/tasks.json{
"version": "2.0.0",
"tasks": [
{
"label": "CMake Build",
"type": "shell",
"command": "cube-cmake",
"args": [
"--build",
"${workspaceFolder}/build/Debug",
"--"
],
"group": "build",
"problemMatcher": "$gcc"
},
{
"label": "OpenOCD Flash",
"type": "shell",
"command": "openocd",
"args": [
"-f",
"interface/cmsis-dap.cfg",
"-f",
"target/stm32f4x.cfg",
"-c",
"adapter speed 500",
"-c",
"program build/Debug/${workspaceFolderBasename}.elf verify reset exit"
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": []
},
{
"label": "Build and Flash",
"dependsOrder": "sequence",
"dependsOn": [
"CMake Build",
"OpenOCD Flash"
],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": []
}
]
}如果 .elf 文件名不是工程文件夹名,就改这里:
"program build/Debug/${workspaceFolderBasename}.elf verify reset exit"比如改成:
"program build/Debug/USART_for_RK3506_test.elf verify reset exit"四、解决不能及时检查问题
有时候会发现STM32自带的clangd这个插件不会自动纠错,不会出现红色警告,需要编译的时候才能知道错误,所以可以把自带的clangd这个禁用,使用微软的C/C++进行语法纠错
即流程是这样的:
不用 STM32Cube clangd
使用 Microsoft C/C++ 插件负责 IntelliSense 和语法报错
使用 compile_commands.json 提供 STM32 编译信息
CMake / OpenOCD / Cortex-Debug 继续负责构建、下载和调试具体步骤是:
先禁用stm32的Clangd插件
![]()
之后下载C/C++插件![]()
修改配置文件
.vscode/settings.json
{
"cmake.cmakePath": "cube-cmake",
"cmake.configureArgs": [
"-DCMAKE_COMMAND=cube-cmake"
],
"cmake.preferredGenerators": [
"Ninja"
],
"C_Cpp.intelliSenseEngine": "default",
"C_Cpp.errorSquiggles": "enabled",
"C_Cpp.default.compileCommands": "${workspaceFolder}/build/Debug/compile_commands.json",
"C_Cpp.default.compilerPath": "arm-none-eabi-gcc",
"editor.renderValidationDecorations": "on"
}