This is a curated list of resources related to embedded and low-level programming in the programming language Rust, including a list of useful crates.
This project is developed and maintained by the Resources team.
Don't see something you want or need here? Add it to the Not Yet Awesome Embedded Rust list!
In 2018 the Rust community created an embedded working group to help drive adoption in the Rust ecosystem.
#rust-embedded:matrix.org
Matrix room.embedded-graphics
crate and ecosystemembedded-hal
traits for testing without accessing real hardware. - cargo-generate
powered project template for quickly setting up new projects using the Knurling Tools.#[test]
attribute, but will run on an embedded targetv0.2.x
and v1.x.x
hal implementations and driversRegister definition for microcontroller families. Usually generated using svd2rust
. -
Peripheral Access Crates were also called Device Crates.
NOTE You may be able to find even more peripheral access crates by searching for thesvd2rust
keyword on crates.io!
atsamd11
Peripheral access API for Microchip (formerly Atmel) SAMD11 microcontrollers. This git repo hosts both the peripheral access crate and the hal.atsamd21
Peripheral access API for Microchip (formerly Atmel) SAMD21 microcontrollers. This git repo hosts both the peripheral access crate and the hal.atsamd51
Peripheral access API for Microchip (formerly Atmel) SAMD51 microcontrollers. This git repo hosts both the peripheral access crate and the hal.atsame54
Peripheral access API for Microchip (formerly Atmel) SAME54 microcontrollers. This git repo hosts both the peripheral access crate and the hal.avr-device
Peripheral access API for Microchip (formerly Atmel) AVR microcontroller family.sam3x8e
Peripheral access API for Atmel SAMD3X8E microcontrollers (generated using svd2rust) - pic32-pac
Peripheral access API for PIC32MX1xx, PIC32MX2xx, PIC32MX274 XLPnrf51
Peripheral access API for nRF51 microcontrollers (generated using svd2rust) - nrf52810-pac
- Peripheral access API for the nRF52810 microcontroller (generated using svd2rust) - nrf52811-pac
- Peripheral access API for the nRF52811 microcontroller (generated using svd2rust) - nrf52832-pac
- Peripheral access API for the nRF52832 microcontroller (generated using svd2rust) - nrf52833-pac
- Peripheral access API for the nRF52833 microcontroller (generated using svd2rust) - nrf52840-pac
- Peripheral access API for the nRF52840 microcontroller (generated using svd2rust) - nrf5340-app-pac
- Peripheral access API for the nRF5340 application core (generated using svd2rust) - nrf5340-net-pac
- Peripheral access API for the nRF5340 network core (generated using svd2rust) - nrf9160-pac
- Peripheral access API for the nRF9160 system-in-package (generated using svd2rust) - k64
- lpc11uxx
- lpc55s6x-pac
- lpc82x-pac
- lpc845-pac
- mkw41z
- imxrt-ral
Register access layer for i.MX RT series. - SKEAZN642
Peripheral access API for KEA64 family microcontrollers (generated using svd2rust) - e310x
- svd2rust generated interface to SiFive Freedom E310 MCUs - efm32pg12-pac
- Peripheral access API for Silicon Labs EFM32PG12 microcontrollers - The stm32-rs
project has peripheral access APIs for most STM32 microcontrollers (generated using svd2rust):
stm32f0
- stm32f1
- stm32f2
- stm32f3
- stm32f4
- stm32f7
- stm32g0
- stm32g4
- stm32h7
- stm32l0
- stm32l1
- stm32l4
- tm4c123x
Peripheral access API for TM4C123x microcontrollers (generated using svd2rust)tm4c129x
Peripheral access API for TM4C129x microcontrollers (generated using svd2rust)msp430g2553
Peripheral access API for MSP430G2553 microcontrollers (generated using svd2rust)
msp430fr2355
Peripheral access API for MSP430FR2355 microcontrollers (generated using svd2rust)msp430fr6972
- ambiq-apollo1-pac
Peripheral access API for Ambiq Apollo 1 microcontrollers (generated using svd2rust)ambiq-apollo2-pac
Peripheral access API for Ambiq Apollo 2 microcontrollers (generated using svd2rust)ambiq-apollo3-pac
Peripheral access API for Ambiq Apollo 3 microcontrollers (generated using svd2rust)ambiq-apollo3p-pac
Peripheral access API for Ambiq Apollo 3 Plus microcontrollers (generated using svd2rust)gd32vf103-pac
Peripheral access API for GD32VF103 RISC-V microcontrollers (generated using svd2rust) - gd32f1
Peripheral access API for GD32F1x0 Cortex-M3 microcontrollers (generated using svd2rust) - Peripheral access crates for the different XMC4xxx families of microcontrollers
Implementations of embedded-hal
for microcontroller families and systems running some OS. -
NOTE You may be able to find even more HAL implementation crates by searching for theembedded-hal-impl
and embedded-hal
keywords on crates.io!
bitbang-hal
software protocol implementations for microcontrollers with digital::OutputPin and digital::InputPinftdi-embedded-hal
for FTDI FTx232H chips connected to Linux systems via USBlinux-embedded-hal
for embedded Linux systems like the Raspberry Pi. - atsam4-hal
- HAL for SAM4E, SAM4N and SAM4S - atsamd-hal
- HAL for SAMD11, SAMD21, SAMD51 and SAME54 - avr-hal
- HAL for AVR microcontroller family and AVR-based boardspic32-hal
- HAL for PIC32MXnrf51-hal
- nrf52810-hal
- nrf52811-hal
- nrf52832-hal
- nrf52833-hal
- nrf52840-hal
- nrf9160-hal
- Also check the list of NXP board support crates!
lpc55s6x-hal
- lpc8xx-hal
- HAL for lpc82x and lpc845 - mkw41z-hal
- imxrt-hal
- HAL for i.MX RT series. - e310x-hal
- HAL for SiFive Freedom E310 MCUs - Also check the list of STMicroelectronics board support crates!
stm32f0xx-hal
-
stm32f1xx-hal
-
stm32f3xx-hal
- stm32f4xx-hal
-
stm32f7xx-hal
-
stm32g0xx-hal
- stm32h7xx-hal
-
stm32l0xx-hal
-
stm32l1xx-hal
- stm32l151-hal
- stm32l4xx-hal
-
stm32-hal
-
msp430fr2x5x-hal
rust-xtensa
tomu-hal
toboot_config
macro.xmc1100-hal
- xmc4-hal
- gd32vf103xx-hal
-
gd32vf103-hal
-
gd32f1x0-hal
-
Crates tailored for general CPU architectures.
cortex-a
Low level access to Cortex-A processors (early state) - cortex-m
Low level access to Cortex-M processors - riscv
Low level access to RISC-V processors - Crates tailored for specific boards.
metro_m0
- Board support for the Metro M0 boardmetro_m4
- Board support for the Metro M4 boardpyportal
- Board support for the PyPortal boardpygamer
- Board support for the PyGamer boardtrellis_m4
- Board support for the NeoTrellis M4 boardfeather-f405
- Board support for the Feather STM32F405 Express feather_m0
- Board support for the Feather M0 board feather_m4
- Board support for the Feather M4 boardcircuit_playground_express
- Board support for the Circuit Playground Express boardedgebadge
- Board support for the EdgeBadge boardgemma_m0
- Board support for the Gemma M0 boarditsybitsy_m0
- Board support for the ItsyBitsy M0 boarditsybitsy_m4
- Board support for the ItsyBitsy M4 Express boardtrinket_m0
- Board support for the Trinket M0 boardavr-hal
- Board support crate for several AVR-based boards including the Arduino Uno and the Arduino Leonardoarduino_mkrvidor4000
- Board support for the MKR Vidor board arduino_mkrzero
- Board support for the mkrzero board arduino_nano33iot
- Board support for the Arduino Nano 33 IoT frdm-kw41z
- FRDM-KW41Z - samd21_mini
- Board support for the SAMD21 Mini Breakout seedstudio-gd32v
- Board support crate for the GD32 RISC-V Dev Board
xiao_m0
- Board support for the Seeed Studio Seeeduino XIAO longan-nano
- Board support package for the Longan Nano board
prussia
- SDK for the PlayStation 2.f3
Board Support Crate for the STM32F3DISCOVERY - nucleo-f042k6
- Nucleo-F042K6nucleo-f103rb
- Nucleo-F103RBnucleo-f401re
- Nucleo-F401RE solo-bsp
Board Support Crate for Solo, an open source security token (WIP) - stm32f407g-disc
Board Support Crate for the STM32F4DISCOVERY (WIP) - stm32f429i-disc
Board Support Crate for the STM32F429DISCOVERY (WIP) - stm32f3-discovery
Board Support Crate for the STM32F3DISCOVERY used in Rust Embedded Discovery book - teensy4-rs
Board Support create for the [Teensy 4.0]monotron
- A 1980s home-computer style application for the Texas Instruments Stellaris Launchpad. PS/2 keyboard input, text output on a bit-bashed 800x600 VGA signal. Uses menu, vga-framebuffer and pc-keyboard.stellaris-launchpad
- For the Texas Instruments Stellaris Launchpad and Tiva-C Launchpad betafpv-f3
- For the BetaFPV F3 drone flight controllerThe following crates provide HAL-like abstractions for subcomponents of embeddeddevices which go beyond what is available in embedded-hal
:
accelerometer
- Generic accelerometer support, including traits and types for taking readings from 2 or 3-axis accelerometers and tracking device orientations - embedded-graphics
: 2D drawing library for any size display - radio
- Generic radio transceiver traits, mocks, and helpers - smart-leds
: Support for addressable LEDs including WS2812 and APA102usb-device
: Abstraction layer between USB peripheral crates & USB class crates - atat
: Abstraction crate to ease writting AT based driver crates - embedded-nal
: An Embedded Network Abstraction Layer - embedded-storage
: An Embedded Storage Abstraction LayerPlatform agnostic crates to interface external components. These crates use the embedded-hal
interface to support all the devices and systems that implement the embedded-hal
traits.
The list below contains drivers developed as part of the Weekly Driver initiative and thathave achieved the "released" status (published on crates.io + documentation / short blog post).
embedded-hal
- Intro blog post - unsafe
- github - NOTE You may be able to find even more driver crates by searching for the embedded-hal-driver
keyword on crates.io!
Work in progress drivers. Help the authors make these crates awesome!
#![no_std]
crates designed to run on resource constrained devices.
bounded-registers
provides a Tock-like API for MMIO registers with the addition of type-based bounds checking. - cmim
, or Cortex-M Interrupt Move: A crate for Cortex-M devices to move data to interrupt context, without needing a critical section to access the data within an interrupt, and to remove the need for the "mutex dance" - cmsis-dsp-sys
: Rust FFI bindings to the Arm CMSIS_5 math library - Vec
, String
, LinearMap
, RingBuffer
backed by fixed-size buffers - ManagedSlice
, ManagedMap
backed by either their std counterparts or fixed-size buffers for #![no_std]
. - no_std
, no-alloc
) fast fourier transforms - panic-persist
: A panic handler crate inspired by panic-ramdump
that logs panic messages to a region of RAM defined by the user, allowing for discovery of panic messages post-mortem using normal program control flow. - register-rs
is Tock registers with added support for CPU register definitions using the same API as for the MMIO registers. This enables homogeneous interfaces to registers of all kinds. - alloc
. Work in progress crates. Help the authors make these crates awesome!
These materials may be outdated and reflect earlier practices, but might still be useful for reference.
This list is licensed under
Contribution to this crate is organized under the terms of the Rust Code ofConduct, the maintainer of this crate, the Resources team, promisesto intervene to uphold that code of conduct.
Rust语言gRPC入门 Intro to gRPC with Rust https://dev.to/anshulgoyal15/a-beginners-guide-to-grpc-with-rust-3c7o 这个小哥Anshul Goyal写了一个关于gRPC入门的教程,有兴趣学习的同学们可以看看。很不错! 内容提纲: Introduction Protocol Buffer Rust an
关于创建「更小的」Rust的思考 #rust 官方核心团队成员无船大佬新博文,针对社区中有些人喜欢Rust但还没有真正热爱Rust的人提出的看法「能否创造一个更小化更简单的更易于使用的Rust呢」所做的回应? 发出此类问题的人,最想改变Rust的一个想法就是给Rust增加垃圾回收,但其实这是错误的。因为他们根本不明白Rust语言的本质。Rust的核心是:代数数据类型、RAII、「别名 xor 可变
本文时间:2018-11-21,作者: krircc, 简介:天青色 欢迎向Rust中文社区投稿,投稿地址,好文将在以下地方直接展示 Rust中文社区首页 Rust中文社区Rust文章栏目 知乎专栏Rust语言 Rust 编程语言有很多特质,但 一个很大的优势是良好的文档资源,你可以在这里找到官方文档.本文重点介绍官方Rust语言社区和Rust中文社区 目前Rust并没有官方中文社区,这就是为什么
The embedded component removes fullscreen CSS styles from A-Frame’s <canvas>element, making it easier to embed within the layout of an existing webpage. Embedding removes the default fixed positioning
Figure not available... Figure not available... So you've written a masterpiece, a class in a class of its own, and you'd like to share it with the world. But, being a responsible developer, you feel
Embedded InnoDB 是为开发人员、独立软件开发商提供的高性能、高可靠性的嵌入式数据库服务器。Embedded InnoDB 并不和 MySQL 运行在一起,也不是 MySQL 的存储引擎和插件,它是为嵌入到应用程序里提供低级的数据管理服务功能的。
面试要点记录 主要涉及到嵌入式软件开发、嵌入式驱动开发、IOT开发、git等知识点。最新的请参考wiki和我的个人博客 要点 c基础知识 数据结构(链表 hash表 排序算法 设计模式等) 外设(串口 网口 i2s i2c spi sdio等) ARM cortex-m0 m3 m4 A8等芯片架构 操作系统(内存管理 进程管理 实时性要求 任务间通讯等) tcpip协议栈(tcpip模型 分层结
Embedded Jopr 是基于 Web 的应用,可以管理和监控 JBoss Application Server 的实例。 Embedded Jopr 是 Jopr 的分支,复用了大量 Jopr 的组件。Embedded Jopr 的最终目标是替代 jmx 和 web 工作台。可以作为配置和监控 JBoss AS 实例的工具。 示例视频: demo video
slakbootEBS 是一个用来自动创建可启动的嵌入式系统的开发工具包,基于 Slackware 和 Busybox 。该工具主要面向使用了闪存存储的 i486 和 ARM 系统。提供各种工具、脚本、文档和 i486、PXA250 上的一些打包程序。