1 个不稳定版本
0.1.3 | 2018年12月17日 |
---|---|
0.1.2 |
|
0.1.1 |
|
0.1.0 |
|
#1343 in 嵌入式开发
26KB
280 行
stm32hal
本项目为所有 STM32 微控制器提供 Rust HAL(硬件抽象层)。
这是什么?
这个crate是一个实验,旨在为stm32微控制器系列中找到的所有设备和外设提供硬件抽象层支持。
它使用stm32ral(寄存器访问层)来配置硬件。
请考虑试用它,贡献或留下反馈!
它提供了什么?
- 支持多个stm32设备。
- 为要使用的stm32设备量身定制的库。
- 展示给定stm32设备支持的设备和功能。
- 高级硬件描述。
- 直接支持RCC和GPIO外设。
在你的crates中使用它
在你的Cargo.toml
中,根据你想要使用的确切设备进行依赖。将stm32f051R8T6
替换为设备芯片名称。参见[支持设备][]获取完整列表。
[dependencies.stm32hal]
version = "0.1.0"
features = ["stm32f051R8T6"]
在stm32hal
crate的顶层,为每种外设类型都有一个模块,例如stm32hal::gpio
。在每个外设模块内部,有一个为每个支持的外设的结构体,例如stm32hal::gpio::GPIOC
。
由于此crate在构建时生成,请使用以下方法访问文档
cargo doc --open
快速示例
// First you must `take()` the peripheral instance.
// This returns `Some(hal)` if that instance is not already taken; otherwise it returns `None`.
// This ensure that no other code can be simultaneously accessing the peripheral,
// which could lead to race condition.
let mut rcc = stm32hal::rcc::RCC::take().unwrap();
// Some peripheral depends on other peripheral before they can be used.
// Use the `take_from()` to get the peripheral instance.
// Here the gpio clock line need to be enabled by the RCC peripheral.
let gpioa = stm32hal::gpio::GPIOA::take_from(&mut rcc).unwrap();
// Get a pin.
let pin = gpioa.pa1;
// ... Do something with gpio pins...
// Give the pin back to its gpio.
gpioa.pa1 = pin;
// When done with a peripheral that depends on other, use `release_to()` to release it.
gpioa.release_to(&mut rcc);
// When done with peripheral `release()` it.
rcc.release();
请参阅文档以获取更多示例。
支持新设备
设备在<device>.yaml
文件中描述,位于devices/
文件夹中。一个设备文件可以支持多个设备部件。
依赖项
~70MB
~1.5M SLoC