CMSIS 和外围设备驱动程序

标签 c microcontroller peripherals cmsis

CMSIS文件和外设驱动文件中写的是什么类型的代码。我怎样才能区分它们?任何例子都会更有帮助。谢谢你。

最佳答案

“CMSIS”是 Cortex Microcontroller Software Interface Standard .这是一个 ARM 标准,因此代码应该或多或少在 Cortex 实现之间具有可移植性。

外设库通常更特定于供应商,因为没有两个不同供应商将如何实现的标准,例如定时器或 UART 模块。

至少,这是我(主要)在 STM32 系列中使用 ARM 时的基本理解。但是,我注意到 CMSIS 页面上 CMSIS 的范围实际上更大:

CMSIS-Driver: defines generic peripheral driver interfaces for middleware making it reusable across supported devices. The API is RTOS independent and connects microcontroller peripherals with middleware that implements for example communication stacks, file systems, or graphic user interfaces.

这听起来像是它会做一些我认为与供应商特定代码相关联的事情,但也许并不是所有供应商实际上都使用 CMSIS 驱动程序。

更新:在我使用过的 STM32:s 上,GPIO 仅使用 ST 的外设库进行管理。

这很简单,真的:

  1. 使用 RCC_AHB1PeriphClockCmd() 启用 GPIO 外围设备的时钟。有很多时钟,所以请确保您做对了。我认为所有 GPIO 都在 AHB1 上。
  2. 通过调用 GPIO_StructInit() 来初始化类型为 GPIO_InitTypeDef 的变量以获得默认值。
  3. GPIO_InitTypeDef 中设置您真正需要的设置,根据需要覆盖默认设置。
  4. 在适当的端口上调用 GPIO_Init(),同时将 GPIO_InitTypeDef 与您的实际设置一起传递给它。这将在外围设备中插入寄存器。
  5. 使用 GPIO_SetBits()GPIO_ReadInputDataBit() 等调用来实际使用 GPIO 引脚。

关于CMSIS 和外围设备驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25681041/

相关文章:

c - 如何创建 C 宏来定义函数 typedef?

制造商的 C 代码中断设置

embedded - 每次 SPI 发送都会导致 MSP430 上接收到 0

c# - 最佳实践?等到收到或在收到时引发事件

bluetooth - 如何获取核心蓝牙外设的真实UUID?

usb - 通过USB控制简单的继电器开关

javascript - SpaceMouse Compact 无法在 Ubuntu 上的 Chrome 中使用 js Gamepad api

C99 boolean 数据类型?

c - 移动机器人设置步数(Arduino)

c - 用指针影响字符串