跳转至

4.1 STM32系统开发-启动文件与CMSIS

前言

启动文件

启动文件主要用来进行堆栈的初始化、中断向量表的定义和中断函数的定义。启动文件要引导进入系统main函数,Reset_Handler中断处理函数是唯一被实现了的函数,其在系统启动时会被调用。以下就是Reset_Handler实现的代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
; Reset handler
Reset_Handler    PROC
                 EXPORT  Reset_Handler             [WEAK]
     IMPORT  __main
     IMPORT  SystemInit
                 LDR     R0, =SystemInit
                 BLX     R0
                 LDR     R0, =__main
                 BX      R0
                 ENDP

在工程目录breeze_firmware_none\keil\Libraries\CMSIS\startup中有8个启动文件,如下图所示:

breeze_embedded_cmsis_architecture

上述8个启动文件分别对应于ST公司不同系列的MCU产品,对于103系列来说,可能会用到的启动文件只有3个:

  • startup_stm32f10x_ld.s:适用于 小容量 产品

  • startup_stm32f10x_md.s:适用于 中容量 产品

  • startup_stm32f10x_hd.s:适用于 大容量 产品

这里的容量指的是FLASH的大小,具体规格如下:

小容量 中容量 大容量
16K or 32K 64K or 128K >= 256K

由于Breeze Mini采用的主微控制器 STM32F103TBU6 的FLASH容量为128K,属于中容量规格的产品,所以选择将startup_stm32f10x_md.s加入到keil工程中。

CMSIS

CMSIS指的是ARM Cortex™ 微控制器软件接口标准(Cortex Microcontroller Software Interface Standard),其提供与供应商无关的硬件抽象层,为处理器和外设实现一致,简单的软件接口,从而简化软件的重用、缩短微控制器新开发人员的学习过程并缩短新设备的上市时间。

我们知道不同厂家,比如TI,ST,Freescale,Nordic Semiconductor等不同半导体厂家都有基于Cortex M系列内核的MCU产品,但是这些MCU的外设却大不相同,外设的设计、接口、寄存器等都不一样,因此一个能够非常熟练对STM32进行开发的工程师很难快速地上手开发一款他不熟悉的,尽管是Cortex M内核的芯片。而CMSIS的目的是让不同厂家的Cortex M内核的MCU至少在内核层次上能够做到一定的一致性,提高软件移植的效率,而这就是CMSIS出现的最主要原因。

CMSIS结构

这里简单介绍一下CMSIS的文件结构,CMSIS包含如下四个部分:

  • CMSIS-CORE

    提供与 Cortex-M0、Cortex-M3、Cortex-M4、SC000 和 SC300 处理器与外围寄存器之间的接口

  • CMSIS-DSP

    包含以定点(分数 q7、q15、q31)和单精度浮点(32 位)实现的 60 多种函数的 DSP 库

  • CMSIS-RTOS

    用于线程控制、资源和时间管理的实时操作系统的标准化编程接口

  • CMSIS-SVD

    包含完整微控制器系统(包括外设)的程序员视图的系统视图描述 XML 文件

CMSIS框架

以下是CMSIS 5.x标准的软件架构图:

breeze_embedded_cmsis_architecture

从上图可以看到,CMSIS 5.x软件架构主要分为以下三层:应用代码层CMSIS软件层微控制器层,其中 CMSIS软件层 起着承上启下的作用,一方面该层对微控制器层进行了统一的实现,屏蔽了不同厂商对Cortex-M系列微处理器核内外设寄存器的不同定义,另一方面又向上层的操作系统和应用层提供接口,简化了应用程序开发的难度,使开发人员能够在完全透明的情况下进行应用程序的开发。如果没有CMSIS标准,那么各个半导体公司可能会自己制定各自产品的库函数的命名规则,而这会使得软件在不同厂家芯片上的移植变得困难。也正是如此,CMSIS层的实现也相对复杂些。有关CMSIS更详细的介绍请访问ARM官网

目前支持CMSIS标准的半导体和工具链厂商:

breeze_embedded_cmsis_architecture

总结

参考