Rust嵌入式开发环境搭建指南(基于Stm32+Vscode)
部分目录如下所示:
目录
- 简介
- Rust开发环境安装
- STM32开发工具链安装
- VSCode环境配置
- VSCode插件安装
- 调试器配置
- 项目创建与配置
- 常见问题与解决方案
简介
本文档旨在指导开发者如何搭建基于Rust语言的STM32嵌入式开发环境。相比传统的C/C++开发方式,Rust提供了更强的内存安全保障和现代化的语言特性,非常适合嵌入式系统开发。本指南将详细介绍从环境搭建到项目配置的全过程,特别关注VSCode作为IDE的配置以及STLink和DAPLink调试器的使用。
Rust开发环境安装
1. 安装Rust工具链
作用:Rust工具链是进行Rust开发的基础环境,包含以下核心组件:
- rustc:Rust编译器,负责将Rust代码编译成可执行文件或库
- cargo:Rust的包管理器和构建系统,用于管理依赖、编译项目、运行测试等
- rustup:Rust工具链管理器,用于安装和更新Rust组件,管理不同版本的Rust
使用rustup安装Rust工具链:
# Windows PowerShell
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh# 或者直接下载rustup-init.exe安装(推荐)
安装过程中选择默认配置即可。安装完成后,可以通过以下命令验证安装:
#检查版本
rustc --version
cargo --version#升级到最新版本
rustup upgrade stable
2. 安装Rust嵌入式开发组件
作用:嵌入式开发需要特定的工具和目标支持,这些组件使Rust能够为ARM Cortex-M系列微控制器生成代码。
# 添加Rust交叉编译目标
rustup target add thumbv6m-none-eabi # Cortex-M0和Cortex-M0+
rustup target add thumbv7m-none-eabi # Cortex-M3
rustup target add thumbv7em-none-eabi # Cortex-M4和Cortex-M7(无FPU)
rustup target add thumbv7em-none-eabihf # Cortex-M4F和Cortex-M7F(带FPU)# 安装cargo-binutils工具
cargo install cargo-binutils
rustup component add llvm-tools-preview# 安装cargo-embed工具(用于烧录和调试)
cargo install cargo-embed# 安装probe-rs工具(用于与调试器交互)
cargo install probe-rs --features cli
各组件作用:
- 交叉编译目标:根据STM32芯片的Cortex-M核心类型选择适当的目标,使Rust能够生成适合特定ARM架构的代码
- cargo-binutils:提供二进制工具集,用于检查和操作编译后的二进制文件,如查看大小、反汇编等
- llvm-tools-preview:提供LLVM工具链支持,cargo-binutils依赖此组件
- cargo-embed:用于将编译好的程序烧录到目标设备,并提供RTT调试功能
- probe-rs:现代化的调试器后端,支持多种调试探针(如STLink、DAPLink等),提供烧录和调试功能
解决rustup-init.exe下载安装缓慢和Cargo下载慢的问题
Rust官网:https://rustup.rs/ 打开这个链接下载。如下下载慢可以使用下面镜像。实际下载速度还可以。
1. rustup-init.exe下载缓慢
可以通过以下国内镜像站点直接下载rustup-init.exe:
- 清华大学镜像:https://mirrors.tuna.tsinghua.edu.cn/rustup/rustup/dist/x86_64-pc-windows-msvc/rustup-init.exe
- 其他镜像等
下载完成后直接运行安装程序。
2.rustup-init.exe安装缓慢,永久设置国内镜像源(推荐)
为了避免每次都需要设置临时环境变量,建议将镜像源设置为系统环境变量,这样可以永久解决下载慢的问题。
方法一:通过Windows图形界面设置(推荐)
-
按下Win键 输入"编辑系统环境变量"
-
分别添加以下两个环境变量:
- 变量名:
RUSTUP_DIST_SERVER
- 变量值:
https://mirrors.aliyun.com/rustup
- 变量名:
RUSTUP_UPDATE_ROOT
变量值:https://mirrors.aliyun.com/rustup/rustup
- 变量名:
方法二:通过PowerShell命令行永久设置
以管理员身份运行PowerShell,然后执行以下命令:
# 设置系统环境变量(需要管理员权限)
[Environment]::SetEnvironmentVariable("RUSTUP_DIST_SERVER", "https://mirrors.aliyun.com/rustup", "Machine")
[Environment]::SetEnvironmentVariable("RUSTUP_UPDATE_ROOT", "https://mirrors.aliyun.com/rustup/rustup", "Machine")# 验证环境变量是否设置成功
[Environment]::GetEnvironmentVariable("RUSTUP_DIST_SERVER", "Machine")
[Environment]::GetEnvironmentVariable("RUSTUP_UPDATE_ROOT", "Machine")#删除系统环境变量 (需要管理员权限):
[Environment]::SetEnvironmentVariable("RUSTUP_DIST_SERVER", $null, "Machine")
[Environment]::SetEnvironmentVariable("RUSTUP_UPDATE_ROOT", $null, "Machine")
设置完成后,重新打开命令提示符或PowerShell窗口,然后执行Rust安装命令,,或者直接运行rustup-init.exe,下载速度将会显著提升:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
3. rustup-init.exe安装缓慢,使用国内镜像源(临时设置)
rustup-init.exe安装时会下载相关工具不使用镜像会很慢,在rustup-init.exe 程序文件夹下使用 PowerShell设置临时环境变量:
#使用 PowerShell设置临时环境变量
$env:RUSTUP_DIST_SERVER="https://mirrors.aliyun.com/rustup"
$env:RUSTUP_UPDATE_ROOT="https://mirrors.aliyun.com/rustup/rustup"
常用的国内Rust镜像源:
- 阿里云镜像:https://mirrors.aliyun.com/rustup
- 清华大学镜像:https://mirrors.tuna.tsinghua.edu.cn/rustup
- 上海交通大学镜像:https://mirrors.sjtug.sjtu.edu.cn/rust-static
4. 配置Cargo国内镜像源
rustup-init.exe安装完成后,为了加速后续的包下载,建议配置Cargo使用国内镜像源。
Windows系统配置步骤:
- 在用户目录下创建或编辑
.cargo
文件夹(通常位于C:\Users\用户名\.cargo
) - 在该文件夹中创建
config.toml(推荐)
或config(老版本)
文件(无扩展名或.toml扩展名均可,新版本Cargo需要.toml扩展名的文件) - 添加以下配置内容(下面阿里云和清华验证了可用,也可以是其他的源):
# 阿里云镜像(推荐)
#[source.crates-io]
#replace-with = 'aliyun'#[source.aliyun]
#registry = "https://mirrors.aliyun.com/crates.io-index" #不可用# 如果上面的地址无效,可以尝试使用:
#registry = "sparse+https://mirrors.aliyun.com/crates.io-index/" #可用# 清华大学镜像(备选)
[source.crates-io]
replace-with = 'tuna' #可用
#
[source.tuna]
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git" #可用
# 或推荐使用:
# registry = "sparse+https://mirrors.tuna.tsinghua.edu.cn/crates.io-index/" #未验证# 上海交通大学镜像(备选)
# [source.crates-io]
# replace-with = 'sjtu' #未验证
#
# [source.sjtu]
# registry = "https://mirrors.sjtug.sjtu.edu.cn/crates.io-index" #未验证
# 或推荐使用:
# registry = "sparse+https://mirrors.sjtug.sjtu.edu.cn/crates.io-index/"#未验证
通过命令行快速创建配置:
# PowerShell创建配置目录和文件
mkdir -Force "$HOME\.cargo"
Set-Content -Path "$HOME\.cargo\config" -Value @"
[source.crates-io]
replace-with = 'aliyun'[source.aliyun]
registry = "https://mirrors.aliyun.com/crates.io-index"
# 或使用 sparse 协议(推荐)
# registry = "sparse+https://mirrors.aliyun.com/crates.io-index/"
"@
验证配置是否生效:
配置完成后,可以通过以下命令测试下载速度是否提升:
# 尝试安装一个小型包测试下载速度
cargo install cargo-edit# 如果需要卸载cargo-edit,可以使用命令
cargo uninstall cargo-edit
如果下载速度明显提升,说明镜像配置已经生效。
#运行以下命令列出所有通过 cargo install 安装的工具及其版本:
cargo install --list#在输出列表中查找 cargo-edit 条目,例如:
cargo-edit v0.12.0:cargo-addcargo-rmcargo-upgrade
如下所示列出了cargo-edit的版本:
STM32开发工具链安装
1. 安装ARM GCC工具链
作用:ARM GCC工具链是用于ARM架构处理器的编译工具集,包含以下核心组件:
- arm-none-eabi-gcc:针对ARM架构的C/C++编译器,用于将C/C++代码编译为ARM指令集
- arm-none-eabi-ld:链接器,用于将多个目标文件链接成一个可执行文件
- arm-none-eabi-as:汇编器,将汇编代码转换为机器码
- arm-none-eabi-gdb:调试器,用于调试ARM目标设备上运行的程序
- arm-none-eabi-objcopy:用于转换二进制格式,如将ELF文件转换为HEX或BIN格式
使用场景:虽然Rust有自己的编译器,但在嵌入式开发中,ARM GCC工具链仍然