STM32标准库——CMSIS

STM32标准库——CMSIS

基于 Cortex 系列芯片采用的内核都是相同的,区别主要为核外的片上外设的差异,这些差异却导致软件在同内核,不同外设的芯片上移植困难。为了解决不同的芯片厂商生产的 Cortex 微 控制器软件的兼容性问题,ARM 与芯片厂商建立了 CMSIS (Cortex MicroController Software Interface Standard)ARM Cortex™ 微控制器软件接口标准

CMSIS标准

所谓 CMSIS 标准,实际是新建了一个软件抽象层。

CMSIS 向下负责与内核和各个外设直接打交道,向上提供实时操作系统用户程序调用的函数接口。【屏蔽了硬件差异】

img

分为 3 个基本功能层:

  • 核内外设访问层:ARM 公司提供的访问、定义处理器内部寄存器地址以及功能函数。
  • 中间件访问层:定义访问中间件的通用 API,也是 ARM 公司提供。
  • 外设访问层:定义硬件寄存器的地址以及外设的访问函数。

CMSIS文件

以STM32F10x为例

进 入 Libraries 文 件 夹 看 到, 关 于 内 核 与 外 设 的 库 文 件 分 别 存 放 在 CMSIS 和 STM32F10x_StdPeriph_Driver 文件夹中。

CMSIS 文件夹

STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\文件夹展开内容:

STM32标准库——CMSIS_第1张图片

STM32F10x_StdPeriph_Driver 文件夹

进入Libraries\STM32F10x_StdPeriph_Driver文件夹。这里的文件属于 CMSIS 之外的的、芯片片上外设部分。

  • inc(include 的缩写):包含各个外设库函数对应的头文件
  • src(source 的简写):包含各个外设库函数的源文件

STM32标准库——CMSIS_第2张图片

一些重要文件:
  • misc.c :这个文件提供了外设对内核中的 NVIC(中断向量控制器) 的访问函数,在配置中断时,我们必须把这个文件添加到工程中。
  • stm32f10x_it.c:专门用来编写中断服务函数的,定义了 一些系统异常 (特殊中断) 的接口,其它普通中断服务函数由我们自己添加。
  • system_stm32f10x.c:包含了 STM32 芯片上电后初始化系统时钟、扩展外部存储器用的函数。
  • stm32f10x_conf.h:当我们使用固件库编程的时候,如果需要某个外设的驱动库,就需要包含该外设的头文件,而直接include这个头文件左右相当于C++里面的bits/stdc++.h。这个头文件在 stm32f10x.h 的最后被包含,所以最终我们只需要包含 stm32f10x.h 这个头文件即可

库各文件间的关系

STM32标准库——CMSIS_第3张图片

以STM32F4xx为例

以STM32F4xx为例,在路径 \CMSIS\Device\ST\STM32F4xx 下,有Include、Source两个文件,我们主要用到了这两个文件下的微控制器专用头文件、启动代码 。

1、Include文件

img

(1)在 stm32f429xx.h 头文件包含了该芯片所有外设的寄存器定义和封装内存操作,直接操作这些寄存器就可以控制外设了,使用STM32任何型号的芯片都需要包含这个头文件。

(2)在 stm32f4xx.h 中会根据 芯片型号宏标识符(我这里是STM32F429xx) 选择对应的头文件(stm32f429xx.h),如果定义了 USE_HAL_DRIVER 宏标识符,还会将HAL库外设驱动包含进来,具体包含关系为:

img

2、Source文件

在该文件中主要用到了 startup_stm32f429xx.ssystem_stm32f4xx.cstm32f429xx_flash.icf

startup_stm32f429xx.s 启动文件。作用是进行堆栈的初始化,中断向量表以及中断函数定义等。设置系统复位后,直接调用 SystemInit函数进行系统初始化。还有一个很重要的作用就是系统复位后引导进入 main函数。
system_stm32f4xx.c 声明和定义了系统初始化函数 SystemInit 以及系统时钟更新函数 SystemCoreClockUpdateSystemInit函数的作用是进行时钟系统的一些初始化操作以及中断向量表偏移地址设置,但它并没有设置具体的时钟值。
stm32f429xx_flash.icf 定义了芯片的FLASH和RAM的起始和结束地址、以及大小

img

STM32单片机的启动流程:

img

总结

CMSIS就是定义了一套芯片外设控制及编写规范的标准。我们在移植一个新的工程时,只需要修改添加:

1、添加system_stm32f4xx.c、startup_stm32f429xx.s、stm32f429xx_flash.icf

2、添加stm32f4xx.h

3、修改全局宏标识 STM32F429xx

你可能感兴趣的:(嵌入式,stm32,单片机,arm)