嵌入式Rust开发入门指南

最近想学习嵌入式Rust开发,但不知道从哪里入手。请问有没有适合新手的入门指南?需要准备哪些开发工具和环境?另外,嵌入式Rust和普通Rust开发有什么区别?希望能推荐一些实用的学习资源和示例项目。

2 回复

想入门嵌入式Rust?先学Rust基础,再了解no_std环境。推荐STM32系列开发板,用cargo-generate创建项目。掌握HAL库和PAC,学会GPIO、UART等外设操作。多动手实践,从点灯开始!


嵌入式Rust开发入门指南

环境准备

  1. 安装Rust工具链
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustup target add thumbv7em-none-eabihf
  1. 安装嵌入式工具
cargo install cargo-binutils
rustup component add llvm-tools-preview

基础项目设置

创建新项目:

cargo new --bin embedded-blink
cd embedded-blink

Cargo.toml配置:

[package]
name = "embedded-blink"
version = "0.1.0"
edition = "2021"

[dependencies]
cortex-m = "0.7"
cortex-m-rt = "0.7"
embedded-hal = "0.2"
panic-halt = "0.2"

[dependencies.stm32f1xx-hal]
version = "0.10"
features = ["stm32f103", "rt"]

简单LED闪烁示例

// src/main.rs
#![no_std]
#![no_main]

use panic_halt as _;
use cortex_m_rt::entry;
use stm32f1xx_hal::{
    prelude::*,
    pac,
    gpio::gpioc::PC13,
    gpio::PushPull,
    gpio::Output,
};
use embedded_hal::digital::v2::OutputPin;

#[entry]
fn main() -> ! {
    // 获取外设访问权
    let dp = pac::Peripherals::take().unwrap();
    let mut rcc = dp.RCC.constrain();
    let mut gpioc = dp.GPIOC.split(&mut rcc.apb2);
    
    // 配置PC13引脚为推挽输出
    let mut led = gpioc.pc13.into_push_pull_output(&mut gpioc.crh);
    
    loop {
        // LED开
        led.set_high().ok();
        delay(1_000_000);
        
        // LED关
        led.set_low().ok();
        delay(1_000_000);
    }
}

// 简单延时函数
fn delay(count: u32) {
    for _ in 0..count {
        cortex_m::asm::nop();
    }
}

内存布局配置

memory.x文件:

MEMORY
{
  FLASH : ORIGIN = 0x08000000, LENGTH = 64K
  RAM : ORIGIN = 0x20000000, LENGTH = 20K
}

构建和烧录

# 构建
cargo build --release --target thumbv7m-none-eabi

# 生成二进制文件
cargo objcopy --release --target thumbv7m-none-eabi -- -O binary embedded-blink.bin

# 使用OpenOCD烧录
openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg

关键概念

  1. no_std环境:嵌入式开发通常不使用标准库
  2. 硬件抽象层(HAL):提供统一的硬件访问接口
  3. 外设访问:通过PAC(PERIPHERAL ACCESS CRATE)访问芯片寄存器
  4. 内存安全:Rust的所有权系统确保内存安全

下一步学习

  • 学习中断处理
  • 探索定时器和PWM
  • 了解串口通信
  • 研究嵌入式并发模式

这个指南提供了嵌入式Rust开发的基础框架,帮助你开始第一个嵌入式Rust项目。

回到顶部