stm32f1-hal
stm32f1-hal is a Rust Hardware Abstraction Layer (HAL) for STM32F1 microcontrollers (All F1 series devices). It implements selected embedded-hal traits to provide a clear, idiomatic interface for embedded development on STM32F1. Many parts are adapted from stm32f1xx-hal, with a focus on readability and maintainability.
馃幆 Motivation
Existing crates didn鈥檛 fully meet my needs:
- stm32f1xx-hal鈥檚 design didn鈥檛 align with my workflow.
- stm32-hal lacks support for the STM32F1 series.
To address this gap, I created stm32f1-hal. While parts of the implementation are adapted from stm32f1xx-hal, the focus here is on clarity, readability, and usability.
馃摉 Design Philosophy
-
Readability is the most important. We only write code a few times, but we read it countless times. Clear understanding is essential for long-term maintenance.
-
Concise is not equal to simple. Fewer lines of code do not necessarily mean easier to read or understand.
-
Prefer sync-code over complex macros + generics. In complex modules, combining macros with generics often makes the code harder to follow and maintain. Instead, I use sync-code, a preprocessing tool that replaces annotated comments with reusable code blocks, keeping peripheral code consistent and readable.
-
In addition, a script is used to generate code for GPIO alternate function remapping.
馃摝 Usage
cargo add stm32f1-hal
use stm32f1_hal as hal;
use pac;
use *;
馃椇 Roadmap
This project is still in its early stages, with only a few features implemented so far. Contributions and feedback are welcome to help expand support for more peripherals and features.
- GPIO
- UART
- I2C
- ADC
- DMA
- More features
馃洜 Contributing
- Open issues for bugs or feature requests.
- Submit PRs with improvements or new peripheral support (I2C, ADC, DMA, etc.).
馃敄 Keywords
stm32 路 stm32f1 路 rust 路 embedded-hal 路 hal 路 microcontroller 路 embedded development