Rust 嵌入式系统开发:初学者友好指南 🚀

更新于 2026-01-17

Jenifer 2024-10-18

你是否曾好奇过我们身边的设备——比如智能手表、家庭助手,甚至汽车系统——在底层是如何工作的?这些小工具就是嵌入式系统的典型例子。它们运行在微型计算机上,专门用于执行特定任务。传统上,人们使用 C 和 C++ 这类语言来编写控制这些设备的代码。但现在,一位新玩家登场了:Rust。🦀

在本指南中,我们将向你介绍如何使用 Rust 开发嵌入式系统,一步步完成开发环境搭建,并通过一个有趣的入门项目——让 LED 灯闪烁!让我们开始吧!🎉


什么是嵌入式系统?🤔

你可以把嵌入式系统想象成一个集成在更大设备中的计算机,它被设计用来执行一个或少数几个特定任务。例如:

  • 洗衣机内部的“大脑”,负责控制各种功能。
  • 汽车中管理发动机的芯片。
  • 智能恒温器里的微型控制器,用于调节家中温度。

这类系统通常需要快速、可靠且安全。而 Rust 正好提供了编写这类系统代码的一种安全又现代化的方式。


为什么在嵌入式系统中使用 Rust?💡

Rust 非常适合嵌入式开发,因为它具备以下优势:

  • 安全性:Rust 能帮助我们避免导致系统崩溃的常见 bug(如空指针、内存越界等)。
  • 高性能:Rust 生成的代码速度与 C/C++ 相当。
  • 并发性:Rust 支持安全地同时运行多个任务——这在嵌入式系统中非常有用。

搭建 Rust 嵌入式开发环境 🖥️

在开始编码之前,我们需要先准备好必要的工具。以下是设置 Rust 嵌入式开发环境的详细步骤:

安装 Rust 🦀

如果你还没有安装 Rust,请在终端中运行以下命令:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

该命令会在你的电脑上安装 Rust。

安装 cargo-generate 📦

你需要 cargo-generate 来创建嵌入式 Rust 项目:

cargo install cargo-generate

准备嵌入式开发工具链

添加嵌入式开发所需的编译目标(toolchain):

rustup target add thumbv7em-none-eabihf

现在你已经准备就绪!接下来,让我们来做点有趣的事情——点亮并闪烁一个 LED 灯


一个简单示例:闪烁 LED 💡

作为你的第一个嵌入式项目,我们将控制一个 LED 灯。即使你从未接触过硬件,这也是一个经典的入门项目!

代码工作原理:

以下是简化版的流程说明:

  1. 获取硬件资源:我们访问微控制器(即运行你系统的微型芯片)的引脚。
  2. 配置 LED 引脚:告诉微控制器将连接到 LED 的引脚设为输出模式(这样我们就能控制 LED 的开关)。
  3. 设置定时器:创建一个定时器,每 1 秒触发一次,用于控制 LED 的开关间隔。
  4. 闪烁 LED:在一个无限循环中,每隔 1 秒切换一次 LED 的状态(开/关)。

以下是简化后的代码:

use cortex_m_rt::entry; // 用于程序入口点
use stm32f1xx_hal::{pac, prelude::*, timer::Timer}; // 使用硬件库

#[entry]
fn main() -> ! {
    let dp = pac::Peripherals::take().unwrap(); // 获取硬件外设
    let mut rcc = dp.RCC.constrain(); // 配置系统时钟
    let mut gpioc = dp.GPIOC.split(&mut rcc.apb2); // 访问 GPIO 端口 C

    let mut led = gpioc.pc13.into_push_pull_output(&mut gpioc.crh); // 将 PC13 引脚配置为推挽输出(用于 LED)
    let mut timer = Timer::syst(dp.SYST, &rcc.cfgr).start_count_down(1.hz()); // 设置 1Hz 的系统滴答定时器

    loop {
        led.toggle(); // 切换 LED 状态(开/关)
        timer.wait().unwrap(); // 等待定时器完成(1 秒)
    }
}

给初学者的解释:

  • GPIO 引脚:想象微控制器有很多小引脚,其中一个连接到了 LED 灯。在这个项目中,我们让这个引脚充当一个开关——控制灯的亮灭。
  • 定时器:定时器就像一个秒表。每过 1 秒,它就会通知我们该切换 LED 的状态了。
  • 切换 LED:“Toggle” 意味着在“开”和“关”之间切换。代码中的 led.toggle() 每秒翻转一次 LED 的状态。

你需要做什么:

  1. 编写上述代码。
  2. 将其上传到你的嵌入式设备(例如 STM32 微控制器)。
  3. 观看神奇的一幕:你的 LED 灯开始有节奏地闪烁!🌟

给初学者的最后建议 🦀

Rust 初看起来可能有点令人生畏,但凭借其强大的安全性保障易用性,它实际上是学习嵌入式系统的绝佳语言。无论你是想做一个业余爱好项目,还是打算深入探索硬件编程,Rust 都能让你轻松构建强大且可靠的系统。

祝你在嵌入式 Rust 的世界里玩得开心!🚀