随着 Rust 的快速发展,Rust 在嵌入式中的支持越来越丰富。目前已经有非常多的 Rust 嵌入式项目和 Rust 单片机外设支持库。理论上来说,目前大部分的 ARM、RISC-V 单片机 都能运行 Rust,但大部分单片机官方没有编写Rust 外设库,因此用户暂时无法直接开发 Rust 应用。本文将介绍几个已经支持 Rust 外设库的常用单片机,包括 STM、 ESP、 AVR 、NRF等单片机,目前已经可以使用 Rust 来开发这些单片机的嵌入式应用。
常见的单片机
STM32 (ST Microelectronics)
STM32 系列的微控制器拥有所有微控制器中最丰富的 Rust 支持。stm32-rs仓库包含适用于各种 STM32 微控制器的 Rust PAC crate,stm32-rs主页包含所有系列的外设驱动支持包。截至 2024 年 6 月,拥有 1.2K 星,目前仓库更新比较活跃。仓库地址:https://github.com/stm32-rs/stm32-rs
Atmel AVR
Rahix/avr-hal 是适用于 ATmega AVR(包括 Arduino、ATmega、ATtiny)的流行第 3 方 Rust HAL 库,截止目前已经有1.2K星,更新比较活跃。仓库地址:https://github.com/Rahix/avr-hal
下载和调试需要安装[ravedude](https://github.com/Rahix/avr-hal/tree/main/ravedude)
工具,可以使用cargo run
,然后连接串口显示打印的消息。手上有 Arduno AVR 系列的开源板可以试试。在 https://blog.logrocket.com/complete-guide-running-rust-arduino/ 上有一个关于让 Rust 在 Arduino Uno(使用 ATmega328P 微控制器)上工作的教程。基于该教程,大约 5 分钟即可构建一个LED 灯的 Rust 工程以及完成烧录。
Atmel SAM
atsamd-rs/atsamd GitHub 存储库提供了各种 crate,用于使用 Rust 处理基于 Atmel samd11、samd21、samd51 和 Same5x 的单片机。该存储库提供 PAC(外围访问包)和更高级别的 HAL(硬件抽象层)。HAL 实现由embedded-hal 项目指定的 trait。目前已有 538 颗星。仓库地址:https://github.com/atsamd-rs/atsamd
MSP430 (Texas Instruments)
GitHub 存储库 japaric/msp430-rtfm 上有一个可用于 MSP430 MCU 的 RTFM(Real-Time For the Masses,RTIC 的旧名称)版本,最近一次提交已经是 7 年前了。仓库地址:https://github.com/japaric/msp430-rtfm
ESP32 (Espressif Systems)
作为物联网产业的领先方案商,乐鑫 对目前主流的 ESP32 单片机都做了 Rust 驱动支持,所有系列的单片机驱动库支持 embassy 异步操作,仓库包括非常丰富的教程文档。官方仓库:https://github.com/esp-rs,如果想入门嵌入式 Rust,从 Esp32 系列单片机入门是个不错的方向。高质量教程:https://docs.esp-rs.org/book/
Nordic nRF
nrf-rs/nrf-hal 仓库为 nRF51、nRF52 和 nRF91 系列微控制器提供 Rust HAL库。手上有 micro:bit v2主板的可以玩玩 nrf-rust。embassy 对 NRF 的单片机支持非常高。想深入学习 embassy 操作系统的可以从这个单片机开始。仓库地址:https://github.com/nrf-rs/nrf-hal
RP2040
rp-rs/rp-hal 仓库提供了高质量的 RP2040 Rust 代码,同时支持 embassy,国外使用的挺多。仓库地址:https://github.com/rp-rs/rp-hal
PSoC
PSOC6 系列的单片机Rust 仓库看起来不太活跃。仓库地址:https://github.com/psoc-rs/psoc6-hal
BL(博流)
BL602 的单片机目前由 Sipeed公司维护,仓库地址:https://github.com/sipeed/bl602-hal
GD32(兆易)
目前 GD32 只有一款 Risc-V 内核的单片机和 F1 系列的单片机有 Rust 外设库,看起来都并非官方支持。V系列仓库地址为:https://github.com/gd32v-rust
F1 系列仓库地址:https://github.com/gd32-rust/gd32f1x0-hal
Swm341(华芯微特)
作为低成本显示的单片机,SWM341 目前有一个非官方的外设支持包,仓库地址为:https://github.com/hysonglet/synwit_hal_common,目前已经成功移植 Slint Rust GUI 框架。仓库暂未公开,等完善后将开放。
WCH(沁恒微)
WCH 目前对 Rust 的支持比较好,甚至也支持 embassy 异步操作系统。仓库地址:https://github.com/ch32-rs
其他
目前也有其他单片机开始支持 Rust,如 NXP,瑞萨、XMC 等,有兴趣的可以查阅:https://github.com/rust-embedded/awesome-embedded-rust