CMSIS 文件和外围驱动程序文件中写入了哪些类型的代码。我怎样才能区分它们?任何例子都会更有帮助。谢谢你。
2 回答
“CMSIS”是Cortex 微控制器软件接口标准。这是一个 ARM 标准,因此代码应该在 Cortex 实现之间或多或少地可移植。
外设库通常更特定于供应商,因为对于两个不同的供应商将如何实现(例如定时器或 UART 模块)没有标准。
至少,这是我(主要)使用 STM32 系列中的 ARM 的基本理解。但是,我在 CMSIS 页面上注意到 CMSIS 的范围实际上更大:
CMSIS-Driver:为中间件定义通用外围驱动接口,使其可跨受支持的设备重用。API 独立于 RTOS,并将微控制器外设与实现通信堆栈、文件系统或图形用户界面等中间件连接起来。
听起来它会做一些与供应商特定代码相关的事情,但也许并非所有供应商都真正使用CMSIS-Driver。
更新:在我使用过的 STM32:s 上,GPIO 仅使用 ST 的外设库进行管理。
这很容易,真的:
- 用于
RCC_AHB1PeriphClockCmd()
启用 GPIO 外设的时钟。有很多时钟,所以确保你做对了。我认为所有的 GPIO 都在 AHB1 上。 GPIO_InitTypeDef
通过调用它来初始化类型变量GPIO_StructInit()
以获取默认值。- 在 中设置您真正想要
GPIO_InitTypeDef
的设置,根据需要覆盖默认值。 - 调用
GPIO_Init()
正确的端口,并将其GPIO_InitTypeDef
与您的实际设置一起传递。这将戳外设中的寄存器。 GPIO_SetBits()
使用诸如,GPIO_ReadInputDataBit()
等等之类的调用来实际使用 GPIO 引脚。
CMSIS 代码是为不同供应商的 ARM 控制器编写的,例如 NXP(LPC 系列等)STM(STM32f4、stm32F1)基本上是具有 ARM 架构的控制器。这是便携式软件。这种编码语言大部分时间是 C/C++,但在某些文件中使用汇编语言。通常在启动文件中使用汇编语言。
在外设驱动程序中,代码是用 c/c++ 语言编写的。外围驱动程序用于通信目的。
我目前正在研究 LPC18xx 控制器,使用 CMSIS 驱动程序,CMSIS 驱动程序具有所有外围设备的代码,您可以直接使用驱动程序来实现您的应用程序
例如:如果您想从通过 I2C 连接的传感器读取数据。您可以直接使用 I2C Cmsis 驱动程序来实现应用程序。您只需要知道传感器的硬件地址。
同样可以使用SPI驱动,CMSIS也提供RTOS驱动。