STM32开发常见的CMSIS到底是个啥?
目录
CubeIDE小项目中CMSIS的组成分析(以STM32F103为例)
以CubeIDE为例点开工程目录发现CMSIS这个东西:
CMSIS是个啥
CMSIS是ARM公司制定的Cortex微控制器软件接口标准,有效降低了不同厂商基于 Cortex-M 内核的微控制器在软件开发上的差异和难度。
为啥要有这个东西,他是干嘛的
为什么需要cmsis?
不同厂商(如ST、NXP、TI)的Cortex-M 单片机,虽然内核相同(比如都是Cortex-M4),但它们的 寄存器名称、启动代码、外设配置 可能完全不同。
cmsis的使命就是,让硬件“硬件相关的底层操作”在不同芯片上保持一致的接口,但并不是说所有函数都完全一样,而是关键功能有统一标准。
cmsis的解决方案
1.提供 统一的寄存器定义(比如 GPIOA->ODR控制引脚输出,不管你是 STM32还是 NXP芯片,这个写法基本一样,但需注意具体芯片的外设特性可能存在差异)。
2.提供 标准的启动文件(比如startup_stm32f103c6tx.s),不用自己写汇编初始化代码。
3.提供 系统时钟配置(比如 Systemlnit()函数),不用手动配置 PLL等。
实际例子:
1.如果你用 STM32F103 写了一个 GPIO控制 LED 的代码,换到 STM32F407 时,大部分代码可以直接复用(实际项目中通常需要额外关注 时钟配置 和 中断管理 等),不用重新学寄存器。
2.如果你换到 NXP的LPC55xx 芯片等,只要用对应的 CMSIS 头文件,代码结构基本不变,只需要调整少量配置
所以说这个cmsis到底有啥用?
没cmsis的话,你换个芯片(都是Cortex-M ),寄存器启动代码,各种外设驱动比如说uart,spi,i2c都要重写,有cmsis的话,只用改个头文件,启动文件和少量配置等,大部分代码复用,因为上面说了常用关键函数统一接口通俗来讲就是名字一样,底层可替换,能让你少改很多代码。
| 场景 | 无CMSIS | 使用CMSIS |
|---|---|---|
| 跨芯片GPIO操作 | 需查阅不同芯片手册重写寄存器代码 | 仅需更换头文件+少量配置 |
| 系统时钟初始化 | 手动配置RCC寄存器 | 调用SystemInit()标准化接口 |
ok呀看到这你已经知道cmsis是啥了,想具体了解往下看。
CMSIS的8大模块解析
在理解CMSIS的核心价值后,我们深入解析其技术架构。
CMSIS 提供了 8 个模块,分别是与软件相关的: CMSIS-Core(内核模块)、CMSIS-Driver(设备驱动模块)、CMSIS-DSP(数字信号处理)、CMSIS-NN(神经网络)、CMSIS-RTOS(实时操作系统抽象层)。以及与调试相关的:CMSIS-DAP(调试访问端口)、CMSIS-Zone(内存保护)、CMSIS-SVD(设备描述)。
但不是每个项目都需要全部用到,而是按需求选用。
这八个部分具体如下:
CMSIS-Core:最基础部分,定义Cortex-M内核和外设的应用程序接口,包含启动代码、系统基本配置、寄存器定义等标准文件,像 startup_xxxxx.s (设备启动代码)、 System_xxxxx.c (设备基本配置文件) 、 .h 寄存器定义文件等。
CMSIS-Driver:在CMSIS-Core基础上,为微控制器外设与中间件或通用应用程序代码提供统一接口,如CAN、Ethernet、Flash等驱动接口,方便开发人员调用。
CMSIS-DSP:信号处理算法库,提供超60种功能的DSP算法,像正余弦、矩阵计算、FFT等,支持定点、浮点数据类型,可提升微控制器信号处理能力。
CMSIS-NN:机器学习库,提供高效神经网络内核集合,如卷积神经网络、循环神经网络等相关算法。
CMSIS-RTOS:实时操作系统的通用API,对FreeRTOS、RT-Thread等操作系统进行封装,提供标准化编程接口,方便操作系统移植。
CMSIS-DAP:Cortex-M内核处理器的开源调试器固件,基于NXP单片机LPC4320开发,可移植到不同单片机,用于调试。
CMSIS-Zone:用于多核配置,处理TrustZone和MPU设置。
CMSIS-SVD:以XML格式描述芯片外设和设备参数,相当于芯片手册的“数字化”,开发工具可据此生成初始化代码。
最常用的是 CMSIS-Core 和 CMSIS-Driver,其他模块(如 DSP、NN)是针对特定需求(如算法加速、AI)的扩展。
CubeIDE小项目中CMSIS的组成分析(以STM32F103为例)
点开这个CMSIS的文件夹如下

1.Core(内核模块):Core/Startup 、Drivers/CMSIS/Include/core_cm3.h
2.Driver(设备驱动模块):Drivers/CMSIS/Device/ST/STM32F1xx
stm32f1xx.h/stm32f103x6.h:定义 STM32F1 外设寄存器(如 GPIO、USART),属于 Driver 模块的 “设备外设访问”。system_stm32f1xx.c:系统时钟初始化,是 Driver 模块的 “系统配置层”。
3.Zone(内存保护)
mpu_armv7.h(在 Drivers/CMSIS/Include ):定义内存保护单元(MPU)配置接口,用于隔离安全 / 非安全内存,属于 Zone 模块。
ok呀看到这你已经熟练的了解CMSIS是啥了。
延伸阅读 :ARM官方CMSIS文档
更多推荐
所有评论(0)