CMSIS-驱动外设

标签 c arm embedded cmsis

我在想,为什么CMSIS-Driver中编写的设备没有实现?

我的意思是我的外设很少:LCD、温度和压力传感器、电流表等 - 所有这些都在 arduino 和学习套件中非常流行。 这些设备中的每一个都使用某种协议(protocol)与 uC 进行通信。有些是用于 i2C 的,有些是通过 SPI 通信的,有些是通过 UART 通信的。我想知道是否有处理这些设备的驱动程序,并作为后端使用 CMSIS-Driver API。

我认为这是一个不错的API,毕竟是ARM开发的标准,所以为什么我找不到任何使用它的驱动程序?

例如,当我寻找 s18b20(1 线温度传感器)时,我很容易找到用 RUST 语言编写的该设备的驱动程序,但我无法找到任何使用 CMSIS 的 C 实现。 (在这种情况下,与 Rust 相比是相当可靠的,因为 Rust 具有很好的嵌入式 API,并且您可以轻松地在多个目标上使用驱动程序,就像 CMSIS-Driver 是工作的配偶一样) 我能够找到一些使用此外设的项目,但它们都在 HAL 上运行,每个 uC 都不同,因此实现不可移植(与 RUST 不同,可能还有 CMSIS-Driver)

所以我的主要问题是:

为什么基于CMSIS-Driver的实现这么少?也许有一些我不知道的隐藏实现存储库?

我错过了什么吗? CMSIS-Driver 不是为临时开发人员设计的吗?那么它是为谁设计的?

最佳答案

CMSIS 不关心外部设备,它主要处理微 Controller 芯片上接口(interface)的接口(interface)驱动程序。因此,如果您有 SPI 设备,则可以使用 CMSIS。该部分的 SPI 驱动程序,但作为开发人员,您有责任为外部设备编写更高级别的驱动程序。

更高级别的软件平台(例如 ARM 的 embed 或 ST 的 CubeMX)使用 CMSIS 接口(interface)驱动程序,并包含常见更高级别设备的驱动程序。它们往往适用于与网络、文件系统和显示器相关的更复杂的设备。我不希望对温度传感器等如此简单的设备有太多支持。

关于CMSIS-驱动外设,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60914235/

相关文章:

在 C 中关闭文件

java - 使用C++编写的Java读取共享内存数据

c - 为什么将调用者堆栈的局部变量保存在被调用者堆栈的寄存器中?

linux - 在 ARM 平台上半虚拟化 linux

linux - 这个错误是什么意思 : interpreter/lib/ld-linux-armhf. so.3error reading (Invalid argument)

c++ - 虚函数是否不太可能导致堆栈溢出?

linux - 访问 GPIO 时出现段错误

c - C 线程间传递消息

c - 如何使用自己的函数覆盖系统调用表条目?

c - C语言中如何减少或替换else if语句?