28 个版本 (1 个稳定版)

1.0.0 2024年1月9日
1.0.0-rc.32023年12月14日
1.0.0-rc.22023年11月29日
1.0.0-alpha.112023年7月4日
0.1.2 2018年2月13日

#1 in #operation

Download history 57962/week @ 2024-04-25 58564/week @ 2024-05-02 48140/week @ 2024-05-09 51378/week @ 2024-05-16 59266/week @ 2024-05-23 59420/week @ 2024-05-30 53234/week @ 2024-06-06 55313/week @ 2024-06-13 59601/week @ 2024-06-20 59597/week @ 2024-06-27 57574/week @ 2024-07-04 59575/week @ 2024-07-11 59697/week @ 2024-07-18 55192/week @ 2024-07-25 53112/week @ 2024-08-01 51695/week @ 2024-08-08

231,186 每月下载
用于 2,253 个crate(1,152 直接使用)

MIT/Apache

56KB
577

crates.io crates.io Documentation Minimum Supported Rust Version

embedded-hal

嵌入式系统硬件抽象层(HAL)

此项目由 HAL团队 开发和维护。

配套crate

主要的 embedded-hal crate 只包含阻塞特质,操作在返回之前同步完成。请查看以下crate,其中包含其他执行模型的特质版本

embedded-hal-bus crate 提供共享SPI和I2C总线的方法。

此外,更多特定领域的特质在单独的crate中可用

  • embedded-can:控制器区域网络(CAN)
  • embedded-io:I/O字节流(如 std::io,但与 no-std 兼容)。

串行/UART特质

embedded-hal 中没有串行特质。相反,请使用 embedded-io。串行端口本质上是一个面向字节的流,这就是 embedded-io 模型。将特质与所有字节流共享有一些优点。例如,它允许通用代码提供命令行界面或控制台,可以在硬件串行端口或虚拟串行端口(如Telnet或USB CDC-ACM)上操作。

设计目标

HAL

  • 必须删除设备特定的详细信息。寄存器、寄存器块以及魔法值都不应出现在API中。

  • 必须在设备内部和设备之间通用。无论实现使用的是设备的USART1或UART4外设,还是另一个设备的UART0外设,用于串行接口的API都必须相同。

  • 尽可能不要与特定的异步模型绑定。API应以阻塞模式、futures模型、async/await模型或回调模型使用。 (参考nb crate)

  • 必须最小化,因此易于实现且无成本,同时具有高度的可组合性。想要使用更高级抽象的人应优先使用此HAL而不是重新实现寄存器操作代码。

  • 作为构建平台无关驱动程序生态系统的基石。这里的驱动程序是指一个库crate,它允许目标平台与外部设备(如数字传感器或无线收发器)进行接口。这个系统的优势是,通过在embedded-hal之上编写驱动程序作为通用库,驱动程序作者可以支持任何数量的目标平台(例如,Cortex-M微控制器、AVR微控制器、嵌入式Linux等)。对于应用程序开发人员的优势在于,通过采用embedded-hal,他们可以为他们的平台解锁所有这些驱动程序。

  • 特质方法必须是可失败的,以便它们可以在任何可能的情况下使用。尽管如此,HAL实现可以额外提供相同方法的不可失败版本,如果它们在其平台上永远不会失败。这样,通用代码可以使用这里提供的可失败抽象,而平台特定代码如果可能的话可以避免与可失败性相关的前置程序。

范围外

  • 初始化和配置事宜,例如“确保此串行接口和该SPI接口不使用相同的引脚”。HAL将专注于执行I/O

平台无关的驱动程序

您可以在crates.io上通过搜索embedded-hal关键字找到基于embedded-hal构建的平台无关驱动程序。

如果您正在自己编写平台无关的驱动程序,强烈建议您在发布之前将embedded-hal关键字添加到您的crate中!

可选Cargo功能

  • defmt-03:从defmt::Format派生自defmt 0.3以用于枚举和结构体。

最低支持的Rust版本(MSRV)

本crate保证在稳定版Rust 1.60及以上版本上编译。它可能可以使用较旧的版本编译,但任何新补丁版本都可能更改。

有关如何升级MSRV的详细信息,请参阅此处

许可协议

在以下任一许可协议下提供:

由您选择。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交给工作内容的任何贡献,都应按上述方式双重许可,而无需任何额外的条款或条件。

依赖项

~160KB