CMSIS和外围设备驱动程序

时间:2014-09-05 07:53:17

标签: c microcontroller peripherals cmsis

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

2 个答案:

答案 0 :(得分:4)

“CMSIS”是Cortex Microcontroller Software Interface Standard。它是ARM标准,因此代码应该在Cortex实现之间或多或少地可移植。

外围磁带库通常更多地针对特定供应商,因为两个不同供应商的实现方式没有标准,例如计时器或UART块。

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

  

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

这听起来像我做的事情与特定于供应商的代码相关联,但可能并非所有供应商实际上使用 CMSIS-Driver。

更新:在我使用过的STM32上,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引脚。

答案 1 :(得分:0)

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

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

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

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

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