28 个版本 (1 个稳定版)
1.0.0 | 2024年1月9日 |
---|---|
1.0.0-rc.3 | 2023年12月14日 |
1.0.0-rc.2 | 2023年11月29日 |
1.0.0-alpha.11 | 2023年7月4日 |
0.1.2 | 2018年2月13日 |
#1 in #operation
231,186 每月下载
用于 2,253 个crate(1,152 直接使用)
56KB
577 行
embedded-hal
嵌入式系统硬件抽象层(HAL)
此项目由 HAL团队 开发和维护。
配套crate
主要的 embedded-hal
crate 只包含阻塞特质,操作在返回之前同步完成。请查看以下crate,其中包含其他执行模型的特质版本
embedded-hal-async
:基于async/await。embedded-hal-nb
:基于轮询,使用nb
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 License,版本2.0 (LICENSE-APACHE或http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可 (LICENSE-MIT或http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交给工作内容的任何贡献,都应按上述方式双重许可,而无需任何额外的条款或条件。
依赖项
~160KB