ARM Cortex™ 微控制器软件接口标准(CMSIS:Cortex Microcontroller Software Interface Standard) 是 Cortex-M 处理器系列的与供应商无关的硬件抽象层
CMSIS英文全称Common Microcontroller Software Interface Standard,☞通用微控制器软件接口标准,适用于基于Arm Cortex处理器的微控制器,为处理器和外围设备、实时操作系统和中间件组件提供接口。
CMSIS-CoreCMSIS-Core是最基础的,为Cortex-M内核的处理器和外设定义应用程序接口也包括一致的系统启动代码。简单来说就是芯片厂商将芯片的启动代码、时钟配置、寄存器定义等封装成标准的文件,一般包含以下一些文件:
1、Startup_xxxxx.s——设备启动代码,包括复位处理程序和异常向量。2、System_xxxxx.c——设备的基本配置文件,包括时钟和总线的配置。3、.h寄存器定义及用户代码需要的包含文件,用于访问设备。在我们编程时需要将这些文件添加或包含到工程中:
CMSIS-DriverCMSIS-Driver是在CMSIS-Core的基础上将微控制器外设与中间件或通用应用程序代码做了一个统一的接口。CMSIS-Driver包含的内容如下(非最新版本):
目前,许多微控制器系列都提供了即用型CMSIS-Driver接口,避免了繁琐且耗时的驱动程序移植。当然这些文件不是编程必须的,我们也可以使用第三方或自己编写相关的驱动程序。CMSIS-DSP信号处理算法库,提供了超过60多种功能的DSP算法库,包括正余弦、矩阵计算、FFT等等。支持定点、浮点等数据类型。可参考之前的文章《STM32使用CMSIS DSP库》。CMSIS-NN机器学习库,还没玩过,就不做介绍了。CMSIS-RTOS实时操作系统的通用API,简单来说就是将Freertos、Rtthread等操作系统再进行一次封装,形成通用的API函数。目的是使移植更方便。使用STM32CubeMx生成RTOS程序的朋友应该会比较熟悉。CMSIS-DAP一款Cortex-M内核处理器的开源调试器固件。官方给的源代码,使用的是NXP的单片机LPC4320做的,已经有很多朋友移植到了不同的单片机上。CMSIS-Zone主要用多核配置,TrustZone和MPU设置。不熟悉,也不做介绍了。CMSIS-SVD系统视图描述 (SVD) 文件以基于格式化的 XML 提供了外设信息和其他设备参数。SVD 文件通常与设备参考手册中芯片供应商提供的信息相匹配。SVD相当于把传统的芯片手册(DATA SHEET)给“数字化”了,手册是给人看的,而SVD采用XML文档结构化的方式,是给机器、开发环境、MDK/IAR等软件“看”的,SVD文件中定义了某个芯片的非常详细的信息,包含了哪些片内外设,每一个外设的硬件寄存器,每一个寄存器中每一个数据位的值,以及详细的说明信息等等。
嵌入式系统的应用开发需要基于目标机-宿主机的交叉编译系统,在集成开发环境的支持下进行,应用程序通常采用高级编程语言C/C++进行编写。使用MDK开发工具进行STM32微控制器的应用开发需要安装软件包,软件包包括设备驱动程序库STM32F1XXX_DFP.XXX.pack(对于Keil MDK5而言是根据开发设备的不同选择性安装,MDK4之前的版本都是默认全部安装)、Cortex微控制器软件接口标准CMSIS库(默认安装)、中间件Middleware(默认安装)以及代码模板、示例等,如下图所示。