3 个不稳定版本

0.1.1 2023 年 9 月 7 日
0.1.0 2021 年 8 月 27 日
0.0.1 2021 年 8 月 12 日

#1730嵌入式开发

MIT/Apache

245KB
4K SLoC

nRF-HAL

Crate Docs

此库提供了对 nRF-52 和 nRF-53 外设的高级访问。使用与 STM32-HAL 类似的 API;设计为可互换。

不支持旧版功能

此库不支持 TWI、SPI 和 UART 外设;它只支持它们的新版替代品:TWIM[S]、SPIM[S] 和 UARTE。

缺少许多功能

目前,此库旨在用于使用 nRF-52 的 AnyLeaf 项目所需的特定功能。将来某个时候可能会将其扩展为更通用,但这不在短期路线图上。请改用 nrf-rs 库。

目前基于 nrf-rs,大部分代码直接从中提取。

使用 ESB 库 用于 Nordic ShockBurst 无线通信。

(目前未实现,但可以在用户代码中设置时兼容。)

入门

红外温度发射器示例 是一个完整的简单生产固件示例。它使用 TWIM、定时器、RTC 和无线外围设备,使用 ESB 协议定期发送温度。它适用于长时间运行、电池供电的使用。

当在 Cargo.toml 中指定此 crate 作为依赖项时,您需要指定代表您的 MCU 的功能。如果是直接在 MCU 上运行的代码(即不是库),则还需要包含一个运行时功能,格式如下 52840-rt。例如

cortex-m = "0.7.3"
cortex-m-rt = "0.6.13"
nrf-hal = { version = "^0.1.0", features = ["52840", "52840-rt"]}

如果您需要 embedded-hal 特性,请包含 embedded-hal 功能。

红外温度发射器示例 是一个完整的简单生产固件示例。它使用 TWIM、定时器、RTC 和无线外围设备,使用 ESB 协议定期发送温度。它适用于长时间运行、电池供电的使用。

示例亮点

use cortex_m::{self, asm};
use cortex_m_rt::entry;
use nrf_hal::{
    clocks::Clocks,
    gpio::{Pin, Port, Dir, Drive},
    twim::{Twim, TwimFreq},
    pac,
    timer::{Timer, TimerMode},
};

#[entry]
fn main() -> ! {
    let mut dp = pac::Peripherals::take().unwrap();

    let _clocks = Clocks::new(dp.CLOCK);

    let mut p15 = Pin::new(Port::P0, 15, Dir::Output);
    p15.set_high();

    let mut timer = Timer::new(dp.TIMER1, TimerMode::Timer, 1., 0);
    timer.enable_interrupt(0);

    let mut scl = Pin::new(Port::P0, 0, Dir::Input);
    scl.drive(Drive::S0D1);

    let mut sda = Pin::new(Port::P0, 1, Dir::Input);
    sda.drive(Drive::S0D1);

    let twim = Twim::new(dp.TWIM0, &scl, &sda, TwimFreq::K100);

    loop {
        asm::wfi();
    }
}

依赖关系

~4–14MB
~361K SLoC