#stm32 #embedded-hal

stm32hal

适用于所有 STM32 设备的 HAL

1 个不稳定版本

0.1.3 2018年12月17日
0.1.2 2018年12月17日
0.1.1 2018年12月17日
0.1.0 2018年12月16日

#1343 in 嵌入式开发

MIT/Apache

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