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