Rust嵌入式開發環境搭建指南(基于Stm32+Vscode)

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圖形界面設置(推薦)

  1. 按下Win鍵 輸入"編輯系統環境變量"

  2. 分別添加以下兩個環境變量:

    • 變量名: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系統配置步驟

  1. 在用戶目錄下創建或編輯 .cargo 文件夾(通常位于 C:\Users\用戶名\.cargo
  2. 在該文件夾中創建 config.toml(推薦)config(老版本) 文件(無擴展名或.toml擴展名均可,新版本Cargo需要.toml擴展名的文件)
  3. 添加以下配置內容(下面阿里云和清華驗證了可用,也可以是其他的源):
# 阿里云鏡像(推薦)
#[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工具鏈仍然

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/898365.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898365.shtml
英文地址,請注明出處:http://en.pswp.cn/news/898365.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

動態規劃合集——動態規劃基本原理

動態規劃合集——動態規劃基本原理 動態規劃原理1258:【例9.2】數字金字塔 動態規劃原理深度優先搜索記憶化搜索動態規劃(順推)動態規劃原理題解分析 滾動數組優化動態規劃(逆推) 動態規劃原理 從數塔問題出發理解動態…

如何讓節卡機器人精準對點?

如何讓節卡機器人精準對點? JAKA Zu 軟件主界面主要由功能欄、開關欄、菜單欄構成。 菜單欄:控制柜管理,機器人管理與軟件管理組成。主要功能為對控制柜關機、APP 設置、機器人本體設 置、控制柜設置、連接機器人和機器人顯示等功能。 開關…

自動化測試工具-Playwright介紹和快速實例

Playwright 是什么 Playwright 是由 Microsoft 開發的開源自動化測試工具,專為現代 Web 應用設計。它支持 Chromium、Firefox 和 WebKit 內核的瀏覽器,能夠跨平臺(Windows、macOS、Linux)運行,提供強大的瀏覽器自動化能力,適用于測試、爬蟲和監控等場景。 Playwright的…

軟考程序員考試知識點匯總

軟考程序員考試(初級資格)主要考察計算機基礎理論、編程能力及軟件開發相關知識。以下是核心知識點總結及備考建議: 一、計算機基礎 數制與編碼 二進制、八進制、十進制、十六進制轉換原碼、反碼、補碼表示(整數與浮點數&#xf…

實時視頻分析的破局之道:藍耘 MaaS 如何與海螺 AI 視頻實現高效協同

一、藍耘 MaaS 平臺:AI 模型全生命周期管理的智能引擎 藍耘 MaaS(Model-as-a-Service)平臺是由藍耘科技推出的 AI 模型全生命周期管理平臺,專注于為企業和開發者提供從模型訓練、推理到部署的一站式解決方案。依托云原生架構、高…

設計模式(行為型)-策略模式

目錄 定義 類圖 角色 角色詳解 Strategy(抽象策略類)? Context(環境類 / 上下文類)? ConcreteStrategy(具體策略類)? 優缺點 優點? 缺點? 使用場景 類行為差異場景? 動態算法選…

【算法day14】三數之和

三數之和 https://leetcode.cn/problems/3sum/description/ 給你一個整數數組 nums ,判斷是否存在三元組 [nums[i], nums[j], nums[k]] 滿足 i ! j、i ! k 且 j ! k ,同時還滿足 nums[i] nums[j] nums[k] 0 。請你返回所有和為 0 且不重復的三元組。…

優化器/模型參數/超參數

參數(Parameters) vs. 超參數(Hyperparameters) 1.1 參數(Parameters) 定義:模型中需要學習的變量,例如神經網絡中的權重(Weight)和偏置(Bias&a…

10、STL中的unordered_map使用方法

一、了解 1、unordered_map(哈希) unordered_map是借用哈希表實現的關聯容器。 訪問鍵值對O(1),最壞情況O(n),例如哈希沖突嚴重時。【n是一個哈希桶的元素數量】 unordered_map特性 鍵值對存儲&#xff…

C++ 頭文件說明

如果一個程序足夠大,代碼功能很多,可以想象,不可能把代碼寫在一個cpp文件里。我們需要模塊化,這樣的好處很多,方便分工合作,可讀性提高,調用也方便。 這個要怎么做呢? 很簡單直接當…

Lambda 表達式的語法:

在 Java 中,Lambda 表達式(也稱為匿名方法)是一種簡潔的表示方法接口(Functional Interface)實現的方式。它是 Java 8 引入的特性,目的是提高代碼的簡潔性和可讀性。 Lambda 表達式的語法: La…

C#零基礎入門篇(18. 文件操作指南)

## 一、文件操作基礎 在C#中,文件操作主要通過System.IO命名空間中的類來實現,例如File、FileStream、FileInfo等。 ## 二、常用文件操作方法 ### (一)文件讀取 1. **使用File.ReadAllText方法讀取文件內容為字符串** …

每日一題--內存池

內存池(Memory Pool)是一種高效的內存管理技術,通過預先分配并自主管理內存塊,減少頻繁申請/釋放內存的系統開銷,提升程序性能。它是高性能編程(如游戲引擎、數據庫、網絡服務器)中的核心優化手…

【Linux系統】Linux進程終止的N種方式

Linux系列 文章目錄 Linux系列前言一、進程終止的概念二、進程終止的場景三、進程終止的實現3.1 程序退出碼3.2 運行完畢結果正常3.3 運行完畢結果異常3.4 程序異常退出 總結 前言 進程終止是操作系統中,進程的一個重要階段,他標志著進程生命周期的結束…

正則表達式引擎深入探討

正則表達式引擎(Regular Expression Engine)是正則表達式得以“活起來”的核心。它是一個精密的軟件組件,負責接收正則表達式和輸入文本,解析模式并執行匹配或替換操作,最終輸出結果——可能是簡單的“是否匹配”&…

java面試題,什么是動態代理?、動態代理和靜態代理有什么區別?說一下反射機制?JDK Proxy 和 CGLib 有什么區別?動態代理的底層

什么是動態代理? 動態代理是在程序運行期,動態的創建目標對象的代理對象,并對目標對象中的方法進行功能性增強的一種技術。 在生成代理對象的過程中,目標對象不變,代理對象中的方法是目標對象方法的增強方法。可以理解…

【工具類】Java的 LocalDate 獲取本月第一天和最后一天

博主介紹:?全網粉絲22W,CSDN博客專家、Java領域優質創作者,掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域? 技術范圍:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大數據、物…

嵌入式開發之STM32學習筆記day06

基于STM32F103C8T6的開發實踐——從入門到精通01 1. 引言 STM32系列微控制器是STMicroelectronics推出的一款高性能、低功耗的32位微控制器,廣泛應用于嵌入式系統中。STM32F103C8T6是其中非常受歡迎的一款,憑借其強大的性能、豐富的外設接口和低廉的價格…

學習使用 Git 和 GitHub 開發項目的教程推薦

Git 和 GitHub 是現代軟件開發中不可或缺的工具,無論你是個人開發者還是團隊成員,掌握它們都能極大提升效率。本文精選了一系列優質教程資源,涵蓋從基本 Git 命令到進階多人協作的內容。這些教程既有文字形式,也有視頻或交互式資源…

golang中的接口

1.簡介 在go中的接口是以一種類型,一種抽象的類型。接口(interface)是一組函數method的集合,go中的接口不能包含任何變量。在go中接口中的所有方法都沒有方法體,接口定義了一個對象的行為規范,只定義規范不實現。接口體現了程序的多態和高內聚低耦合的思想。go中的接口也是…