CMSIS 和外围设备驱动程序

ist*_*379 5 c peripherals microcontroller cmsis

CMSIS 文件和外围驱动程序文件中编写了哪些类型的代码。我如何区分它们?任何例子都会更有帮助。谢谢你。

unw*_*ind 5

“CMSIS”是Cortex 微控制器软件接口标准。这是一个 ARM 标准,因此代码应该或多或少在 Cortex 实现之间具有可移植性。

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

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

CMSIS-Driver:为中间件定义通用外围驱动程序接口,使其可在受支持的设备之间重用。API 独立于 RTOS,将微控制器外设与实现通信堆栈、文件系统或图形用户界面等中间件连接起来。

听起来它会做我与供应商特定代码相关联的事情,但也许并非所有供应商实际上都在使用CMSIS-Driver。

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

这很简单,真的:

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