在CMSIS文件和外围驱动程序文件中写入了哪些类型的代码。我该如何区分它们?任何例子都会更有帮助。谢谢。
答案 0 :(得分:4)
“CMSIS”是Cortex Microcontroller Software Interface Standard。它是ARM标准,因此代码应该在Cortex实现之间或多或少地可移植。
外围磁带库通常更多地针对特定供应商,因为两个不同供应商的实现方式没有标准,例如计时器或UART块。
至少,这是我(主要)与STM32系列中的ARM一起工作的基本理解。但是,我在CMSIS页面上注意到CMSIS的范围实际上更大:
CMSIS-Driver:为中间件定义通用外设驱动程序接口,使其可以在支持的设备上重用。该API与RTOS无关,可将微控制器外设与中间件连接起来,中间件可实现通信堆栈,文件系统或图形用户界面。
这听起来像我做的事情与特定于供应商的代码相关联,但可能并非所有供应商实际上使用 CMSIS-Driver。
更新:在我使用过的STM32上,GPIO只使用ST的外设库进行管理。
这很简单,真的:
RCC_AHB1PeriphClockCmd()
启用GPIO外设的时钟。有很多时钟,所以一定要做好。我认为所有GPIO都在AHB1上。GPIO_InitTypeDef
来初始化GPIO_StructInit()
类型的变量以获取默认值。GPIO_InitTypeDef
中设置您真正想要的设置,并根据需要覆盖默认设置。GPIO_Init()
,并使用您的实际设置将GPIO_InitTypeDef
传递给它。这将戳外设中的寄存器。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驱动程序。