STM32——Cortex-M的CMSIS中核内外设和片上外设

CMSIS包括两个部分:

  1. Cortex-M的核内外设NVIC和Systick的一些寄存器的标准接口
  2. MCU的片上外设的标准接口。

CMSIS:Cortex Microcontroller Software Interface Standard 微控制器软件接口标准

ARM Cortex™ 微控制器软件接口标准是== Cortex-M 处理器系列(核内设备)==的与供应商(增加片上RAM ROM FLASH 和一些外设)无关的硬件抽象层
英文原文为:a vendor-independent hardware abstraction layer for the Cortex-M processor series and defines generic tool interfaces–来自ARM官方定义。

使用CMSIS,可以为处理器和外设实现一致且简单的软件接口,从而简化软件的重用、缩短微控制器新开发人员的学习过程,并缩短新设备的上市时间。

1 按提供方分类

CMSIS是ARM公司与多家不同的芯片和软件供应商一起紧密合作定义的,提供了内核与外设、实时操作系统和中间设备之间的通用接口。
CMSIS可以分为多个软件层次,分别由ARM公司、芯片供应商提供。

1.1 其中ARM提供了下列部分,可用于多种编译器:

内核设备访问层:包含了用来访问内核的寄存器设备的名称定义,地址定义和助手函数。同时也为RTOS(实时操作系统)定义了独立于微控制器的接口,该接口包括调试通道定义。
● 中间设备访问层:为软件提供了访问外设(核内外设NVIC、Systick 与 MCU上外设串口等)的通用方法。芯片供应商应当修改中间设备访问层,以适应中间设备组件用到的微控制器上的外设。目前中间设备访问层仍处于开发过程中,本文不做详述。

1.2 芯片供应商扩展下列软件层:

微控制器外设访问层:提供片上所有外设的定义(即一些外设的寄存器定义,不一定提供类似HAL的访问函数)。
● 外设的访问函数(可选):为外设提供额外的助手函数。

CMSIS为Cortex-Mx微控制器系统定义了:
访问外设寄存器的通用方法和定义异常向量的通用方法。
● 内核设备的寄存器名称和内核异常向量的名称。
● 独立于微控制器的RTOS接口,带调试通道。
● 中间设备组件接口(TCP/IP协议栈,闪存文件系统)。

CMSIS包含的组件

  1. 外围寄存器和中断定义: 适用于设备寄存器和中断的一致接口
  2. 内核外设函数:特定处理器功能和内核外设的访问函数
  3. DSP 库:优化的信号处理算法,并为 SIMD 指令提供Cortex-M4 支持
  4. 系统视图说明(SVD):描述设备外设和中断的XML 文件。

该标准完全可扩展,可确保其适合于所有 Cortex-M处理器系列微控制器,从最小的8 KB 设备到具有复杂通信外设(如以太网或USB)的设备。(内核外设函数的内存要求少于1 KB 代码,少于10 字节RAM)。

2 按是否编译器无关分类

2.1 独立于编译器的文件:

● Cortex-M3内核及其设备文件(core_cm3.h + core_cm3.c)(指的是Cortex-M微核

  • 访问Cortex-M3内核及其设备:NVIC,SysTick等
  • 访问Cortex-M3的CPU寄存器和内核外设的函数(不是片上外设

● 微控制器专用头文件(device.h) (指的是MCU上的外设

  • 指定中断号码(与启动文件一致)
  • 外设寄存器定义(寄存器的基地址和布局)
  • 控制微控制器其他特有的功能的函数(可选)

● 微控制器专用系统文件(system_device.c)(device指的是特定的MCU,比如STM32F103,ESP8266等

  • 函数SystemInit,用来初始化微控制器(不同的device的内存,时钟不一样
  • 函数Sysem_ExtMemCtl,用来配置外部存储器控制器。它位于文件 startup_stm32f10x_xx.s /.c,在跳转到main前调用
  • SystemFrequncy,该值代表系统时钟频率
  • 微控制器的其他功能(可选)

2.2 编译器供应商+微控制器专用启动文件

不同的编译器startup_device.s 不一样?同一个功能的C文件经过不同的编译器出来的汇编文件都是不一样的

例如

IAR和Keil对同一个device的启动汇编文件是不一样的。
在这里插入图片描述

IAR

STM32——Cortex-M的CMSIS中核内外设和片上外设_第1张图片

Keil

STM32——Cortex-M的CMSIS中核内外设和片上外设_第2张图片
● 编译器启动代码(汇编或者C)(startup_device.s)

  • 微控制器专用的中断处理程序列表(与头文件一致)
  • 弱定义(Weak)的中断处理程序默认函数(可以被用户代码覆盖)

3 整体感受

STM32——Cortex-M的CMSIS中核内外设和片上外设_第3张图片
STM32——Cortex-M的CMSIS中核内外设和片上外设_第4张图片
STM32——Cortex-M的CMSIS中核内外设和片上外设_第5张图片

基于CMSIS标准的软件架

主要有四层:

  1. 用户应用层、
  2. 操作系统层、
  3. CMSIS层
  4. 硬件寄存器层。

CMSIS层主要分为3个部分:

  1. 核内外设访问层(CPAL),由ARM负责实现对寄存器名称、地址定义、NVIC接口等定义,统一用_INLINE屏蔽差异,其接口函数均是可重入的。
  2. 片上外设访问层(DPAL),由芯片厂商负责实现,可调用CPAL提供的接口函数处理相应的外设中断请求
  3. 外设访问函数(AFP),由芯片厂商负责,提供访问片上外设的函数

关于几个文件

  1. core_cm0.h:文件中定义了使用的CMSIS版本、Cortex内核、工具链,提供了核内外设访问层的定义,例如核内外设的数据结构和地址映射,也提供了一些访问Cortex-M0核内寄存器及外设的静态内联函数
  2. core_cm0.c:定义了访问Cortex-M0核内寄存器的相关内部函数
  3. System_.h:中断号及外设寄存器的定义
  4. System_.c:包含初始化在内的系统函数
  5. 其他头文件则实现了片上外设访问层以及额外的访问函数的定义

你可能感兴趣的:(STM32)