Painless Embedded Rust
The Rust programming language is showing a lot of promise in embedded software development. It allows us to create programs that are robust, efficient, and run even on the tiniest microcontrollers. But writing code to interface with your target hardware is a huge chore. It's taking too much time and effort that could go into your core product instead.
I can help you focus on the work that truly matters to you, by taking the low-level infrastructure off your hands. Go back to working on your core product, and let me do what I do best. All for a fixed price with a full money back guarantee.
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.
↓ or keep reading ↓
What I can do
Microcontroller support libraries
Rust libraries for the microcontroller you want to use 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.
Why work with me?
Fixed price, full guarantee
I will quote you a fixed price up-front and I'll stick to it. I'll even give you a full guarantee on top. If my estimate is off, that's my problem, not yours. If I fail to deliver on the agreed-upon objectives for any reason, I'll refund you the full price. If you find bugs later, I will fix them at no additional charge.
Low touch, high leverage
Before every project, I ask questions, sometimes a lot of them. By the time I'm ready to start, I'll understand what the project is about, and can work mostly autonomously. I'll write regular reports, keep you in the loop, listen to your feedback. But if you need me to, I'll be on autopilot.
Slow and measured
Others take pride in getting things done quickly. I take pride in doing it right, and I'll take my time to do it. I will keep my code as clear and simple as the task allows, making it cheaper to change and maintain. No matter if it's me who ends up doing that, or someone else.
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.
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).
The biggest surprise is there was no surprise. The project mostly worked as hoped.
It surprised me when you refused to increase the price after spending more time than expected.
Examples of my work
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
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
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 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
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.
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.
As an active member of the Embedded Rust community, I'm associated with the following groups.
The Embedded Devices Working Group is the part of the Rust project that focuses on making Rust a great choice for embedded development.
Works on supporting Rust on Nordic's nRF series of microcontrollers.
Works on supporting Rust on NXP's LPC microcontrollers.
Works on supporting Rust on ST's STM32 microcontrollers.
My name is Hanno Braun, and I'm an embedded software developer based out of the rural Odenwald region in central Europe. I've been using Rust for embedded development since 2015. Today, providing services in this space is my main professional focus.