Painless Embedded Rust

You are developing your next firmware application in Rust, but you don't have time to get bogged down in hardware specifics. I can help you focus on the work that truly matters, by taking the low-level infrastructure off your hands. Go back to working on your core product, and leave the rest to me.

I would highly recommend Hanno to anyone looking for embedded development support in Rust. He quickly researched the unknowns in the scope of the project, and provided some really valuable insights into what was, and what wasn't, necessary to meet my goals.

This helped to keep costs down, while still getting me the things that were important for my project.

- James Munns, Ferrous Systems

↓ or keep reading ↓

What I can do

Board bring-up and microcontroller support

Rust libraries for your target hardware don't exist or don't suit your needs? I got you covered. From basic support to get you started, to a fully type-safe hardware abstraction layer: I can shield you from the low-level difficulties and keep you productive.

Drivers for external sensors and actuators

Want to talk to that accelerometer on your board? Or having trouble using that radio transceiver? Let's talk. I'll deal with the problems and give you a safe, convenient, and documented Rust API. No need to learn all the intricacies, if you just want to use the features.

Custom embedded software

Do you need custom control software for that device you're working on? Or maybe you need someone to implement a specific library, to aid you with your project? I'm always happy to talk about custom software development projects in the embedded space. Contact me, and we'll figure out the best way forward for you.

What my clients say

I am absolutely pleased with how this project went. Your professionalism, creativity in scoping and execution of the project, as well as your very clear desire to meet and exceed the scope of the project made this work an absolute joy.

- James Munns, Ferrous Systems

I would say this has been the lowest touch contractor relationship I've had (over the last 3 years or so, I've worked with roughly 3 large agencies, and 4~5 independent contractors).

- Louis Thiery, Helium Systems

The biggest surprise is there was no surprise. The project mostly worked as hoped.

- Philip Markgraf, Georg Fischer Signet

It surprised me when you refused to increase the price after spending more time than expected.

- Philippe Delrieu, MD69 Solutions

Examples of my work

STM32L4xx HAL: USART, ADC

Client: Georg Fischer Signet

#155, #156, #160, #161, #162, #171, #173, #179,

For Georg Fischer Signet, I made some improvements to STM32L4xx HAL, mostly focused on USART and ADC.

LPC8xx HAL: USART, GPIO, I2C, SPI, DMA

Client: Georg Fischer Signet

#217, #223, #236, #237, #238, #239, #240, #241, #252, #253, #259, #260, #261, #262, #263, #264, #265, #266, #267, #269, #271, #272, #275

For Georg Fischer Signet, I made many improvements to LPC8xx HAL, mainly focused on USART, GPIO, I2C, SPI, and DMA, but also including many clean-ups of the code base.

For Georg Fischer Signet, I developed this test stand for firmware applications, and added test suites for features of the LPC8xx HAL and STM32L4xx HAL libraries.

STM32L0xx HAL: RNG, USB, FLASH

Client: Helium Systems

#53, #59, #60, #78,

As part of my third project for Helium Systems, I made some more improvements to STM32L0xx HAL, specifically related to the RNG, USB, and FLASH peripherals.

STM32L0xx HAL: low-power modes, RTC, USB, I2C, DMA, ADC

Client: Helium Systems

#25, #26, #27, #28, #29, #40, #44, #45, #86,

As a follow-up project for Helium Systems, I made further improvements and additions to STM32L0xx HAL, specifically related to support for low-power modes, the real-time clock, USB, I2C, DMA, and ADC.

STM32L0xx HAL: I2C, AES, DMA, ADC, USART, PWM

Client: Helium Systems

#10, #12, #13, #14, #16, #18, #19, #20, #21, #22

STM32L0xx HAL is the hardware abstraction layer for the STM32L0 family microcontrollers. To support the internal development efforts of my client, Helium Systems, I made improvements and added support for new features, specifically related to I2C, AES, DMA, ADC, USART, and PWM.

STM32F7xx HAL: USART, SPI, DMA

Client: MD69 Solutions

#8, #12, #13, #14, #15, #16, #17, #18

STM32F7xx HAL is a hardware abstraction layer for the STM32F7 family of microcontrollers. As part of a project for MD69 Solutions, I improved and extended support for the USART peripheral, added support for the SPI peripheral, and added DMA support to both of those.

DWM1001: IEEE 802.15.4 and location tracking

Client: Ferrous Systems

dwm1001 (GitHub, crates.io), dw1000 (GitHub, crates.io), ieee802154 (GitHub, crates.io)

The Decawave DWM1001 module, with its Nordic nRF52832 microcontroller and Decawave DW1000 UWB radio transceiver, is a solution for real-time location tracking and wireless communication based on IEEE 802.15.4. This project for Ferrous Systems involved building the software stack required to use the DWM1001 in Rust, including a board support package for the DWM1001 module and development board, a DW1000 driver, and a partial implementation of the IEEE 802.15.4 standard.

Flott - Motion Control in Rust

Stepper (GitHub, crates.io), RampMaker (GitHub, crates.io)

Toolkit for motion control software in Rust. Designed to run on microcontrollers with minimal to no overhead.

LPC8xx HAL

GitHub, crates.io

Hardware Abstraction Layer (HAL) for the NXP LPC800 family of ARM Cortex-M0+ microcontrollers, written in Rust. Provides a safe and convenient way to write reliable software for LPC800 microcontrollers.

Community involvement

As an active member of the Embedded Rust community, I'm associated with the following groups.

Rust Embedded Devices Working Group

Rust website, GitHub

founding member, currently inactive

The Embedded Devices Working Group is the part of the Rust project that focuses on making Rust a great choice for embedded development. I was a founding member and member of the HAL team, mostly focusing on embedded-hal.

lpc-rs

GitHub

founding member

Community group focused on Rust support for NXP's LPC line of microcontrollers. I co-founded the group together with other members of the community and have been focused mostly on maintaining the LPC PACs and development of LPC8xx HAL.

nrf-rs

GitHub

founding member

Community group focused on Rust support for Nordic's nRF line of microcontrollers. I co-founded the group together with other members of the community, and made contributions to nrf-hal.

stm32-rs

GitHub

member

Community group focused on Rust support for the STM32 line of microcontrollers. I've been invited to co-maintain the STM32F7 and STM32L0 HALs.

About me

picture of Hanno Braun

My name is Hanno Braun, and I'm an embedded software developer based out of the rural Odenwald region in Germany. I've been using Rust for embedded development since 2015. Today, providing services in this space is my main professional focus.