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工具鏈仍然