5

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

4

2 回答 2

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 引脚。
于 2014-09-05T08:52:10.783 回答
0

CMSIS 代码是为不同供应商的 ARM 控制器编写的,例如 NXP(LPC 系列等)STM(STM32f4、stm32F1)基本上是具有 ARM 架构的控制器。这是便携式软件。这种编码语言大部分时间是 C/C++,但在某些文件中使用汇编语言。通常在启动文件中使用汇编语言。

在外设驱动程序中,代码是用 c/c++ 语言编写的。外围驱动程序用于通信目的。

我目前正在研究 LPC18xx 控制器,使用 CMSIS 驱动程序,CMSIS 驱动程序具有所有外围设备的代码,您可以直接使用驱动程序来实现您的应用程序

例如:如果您想从通过 I2C 连接的传感器读取数据。您可以直接使用 I2C Cmsis 驱动程序来实现应用程序。您只需要知道传感器的硬件地址。

同样可以使用SPI驱动,CMSIS也提供RTOS驱动。

于 2016-09-28T10:47:26.357 回答