rust+stm32+vscode搭建开发调试环境
1.安装rust
2.安装调试和烧写软件(二者选其一)
3.安装stlink
4.搭建gcc-arm-none-eabi编译环境
5.安装vscode
6.安装相关插件
rust-analyzer:使用VSCode开发Rust必备
cortex-debug:基于openocd的调试和烧录插件
Debugger for probe-rs:基于probe-rs的调试和烧录插件
crates:提升编辑Cargo.toml的体验,辅助包管理
7.编写调试配置
7.1 添加构建任务和烧写任务
.vscode/task.json
{ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0", "tasks": [ { /* * This is the default cargo build task, * but we need to provide a label for it, * so we can invoke it from the debug launcher. */ "label": "Cargo Build (debug)", "type": "process", "command": "cargo", "args": ["build"], "problemMatcher": [ "$rustc" ], "group": { "kind": "build", "isDefault": true } }, { "label": "Cargo Build (release)", "type": "process", "command": "cargo", "args": ["build", "--release"], "problemMatcher": [ "$rustc" ], "group": "build" }, { "label": "Flash", "type": "shell", "command": "openocd -s /usr/local/share/openocd/scripts -f ${workspaceFolder}/openocd.cfg -c \"program target/thumbv7m-none-eabi/debug/led preverify verify reset exit\"", "dependsOn": [ "Cargo Build (debug)" ], "group": "build" }, { "label": "Cargo Build Examples (debug)", "type": "process", "command": "cargo", "args": ["build","--examples"], "problemMatcher": [ "$rustc" ], "group": "build" }, { "label": "Cargo Build Examples (release)", "type": "process", "command": "cargo", "args": ["build","--examples", "--release"], "problemMatcher": [ "$rustc" ], "group": "build" }, { "label": "Cargo Clean", "type": "process", "command": "cargo", "args": ["clean"], "problemMatcher": [], "group": "build" }, ] }
7.2编写调试配置
以下是两种调试配置,一个是基于probe-rs的调试配置,一个是基于openocd的调试配置
probe-rs的优势是使用方便,缺点是功能不如openocd
openocd的优势是功能强大,缺点是配置相对繁琐,注意(部分版本有坑,建议使用最新版)
两种调试方式都需要安装对应的插件,openocd对应的插件是cortex-debug,probe-rs对应的插件是Debugger for probe-rs
{
/*
* Requires the Rust Language Server (rust-analyzer) and Cortex-Debug extensions
* https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer
* https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug
*/
"version": "0.2.0",
"configurations": [
{
/* Configuration for the STM32F303 Discovery board */
"type": "probe-rs-debug",
"request": "launch",
"name": "Debug (probe-rs)",
"cwd": "${workspaceRoot}",
"preLaunchTask": "Cargo Build (debug)",
"chip": "STM32F103ZE",
"runtimeExecutable": "probe-rs",
"flashingConfig": {
"flashingEnabled": true,
"haltAfterReset": false,
},
"coreConfigs": [
{
"coreIndex": 0,
"programBinary": "${workspaceFolder}/target/thumbv7m-none-eabi/debug/led",
"svdFile": "${workspaceFolder}/STM32F103.svd"
}
],
},
{
/* Configuration for the STM32F303 Discovery board */
"type": "cortex-debug",
"request": "launch",
"name": "Debug (OpenOCD)",
"servertype": "openocd",
"cwd": "${workspaceRoot}",
"preLaunchTask": "Flash",
"runToEntryPoint": "main",
"executable": "./target/thumbv7m-none-eabi/debug/led",
/* Run `cargo build --example itm` and uncomment this line to run itm example */
// "executable": "./target/thumbv7em-none-eabihf/debug/examples/itm",
"device": "STM32F103ZE",
"configFiles": [
"${workspaceRoot}/openocd.cfg"
],
"svdFile": "${workspaceRoot}/STM32F103.svd",
"gdbPath": "/usr/local/gcc-arm-none-eabi/bin/arm-none-eabi-gdb",
"showDevDebugOutput":"raw"
}
]
}
8.带调试配置的demo项目
https://gitee.com/navysummer/stm32-rust-demo

浙公网安备 33010602011771号