ARM公司为了能让不同的芯片公司生产的Cortex-M3芯片能在软件上基本兼容,和芯片生产商共同提出了一套标准CMSIS标准(CortexMicrocontrollerSoftwareInterfaceStandard),翻译过来是“ARMCortex?微控制器软件接口标准”。ST官方库就是根据这套标准设计的。
CMSIS分为3个基本功能层:
1)核内外设访问层:ARM公司提供的访问,定义处理器内部寄存器地址以及功能函数。
2)中间件访问层:定义访问中间件的通用API,也是ARM公司提供。
3)外设访问层:定义硬件寄存器的地址以及外设的访问函数。
CMSIS层在整个系统中是处于中间层,向下负责与内核和各个外设直接打交道,向上提供实时操作系统用户程序调用的函数接口。如果没有CMSIS标准,那么各个芯片公司就会设计自己喜欢的风格的库函数,而CMSIS标准就是要强制规定,芯片生产公司设计的库函数必须按照CMSIS这套规范来设计。
一个简单的例子,我们在使用STM32芯片的时候首先要进行系统初始化,CMSIS规范就规定,系统初始化函数名字必须为SystemInit,所以各个芯片公司写自己的库函数的时候就必须用SystemInit对系统进行初始化。CMSIS还对各个外设驱动文件的文件名字规范化,以及函数名字规范化等等一系列规定。
ST官方提供的固件库完整包可以在官方下载,固件库是不断完善升级的,所以有不同的版本,我们使用的是V3.5版本的固件库,STM32F10x_StdPeriph_Lib_V3.5.0下面查看
文件夹介绍:
Libraries文件夹下面有CMSIS和STM32F10x_StdPeriph_Driver两个目录,这两个目录包含固件库核心的所有子文件夹和文件。其中CMSIS目录下面是启动文件,STM32F10x_StdPeriph_Driver放的是STM32固件库源码文件。源文件目录下面的inc目录存放的是stm32f10x_xxx.h头文件,无需改动。src目录下面放的是stm32f10x_xxx.c格式的固件库源码文件。每一个.c文件和一个相应的.h文件对应。这里的文件也是固件库的核心文件,每个外设对应一组文件。
Libraries文件夹里面的文件在我们建立工程的时候都会使用到。
Project文件夹下面有两个文件夹。顾名思义,STM32F10x_StdPeriph_Examples文件夹下面存放的ST官方提供的固件实例源码,在以后的开发过程中,可以参考修改这个官方提供的实例来快速驱动自己的外设,很多开发板的实例都参考了官方提供的例程源码,这些源码对以后的学习非常重要。STM32F10x_StdPeriph_Template文件夹下面存放的是工程模板。
Utilities文件下就是官方评估板的一些对应源码,这个可以忽略不看。
根目录中还有一个stm32f10x_stdperiph_lib_um.chm文件,直接打开可以知道,这是一个固件库的帮助文档,这个文档非常有用,只可惜是英文的,在开发过程中,这个文档会经常被使用到。
关键文件介绍:
下面我们要着重介绍Libraries目录下面几个重要的文件。core_cm3.c和core_cm3.h文件位于\Libraries\CMSIS\CM3\CoreSupport目录下面的,这个就是CMSIS核心文件,提供进入M3内核接口,这是ARM公司提供,对所有CM3内核的芯片都一样。你永远都不需要修改这个文件,所以这里我们就点到为止。
和CoreSupport同一级还有一个DeviceSupport文件夹。eviceSupport\ST\STM32F10xt文件夹下面主要存放一些启动文件以及比较基础的寄存器定义以及中断向量定义的文件。这个目录下面有三个文件:system_stm32f10x.c,system_stm32f10x.h以及stm32f10x.h文件。其中system_stm32f10x.c和对应的头文件system_stm32f10x.h文件的功能是设置系统以及总线时钟,这个里面有一个非常重要的SystemInit()函数,这个函数在我们系统启动的时候都会调用,用来设置系统的整个时钟系统。
stm32f10x.h这个文件就相当重要了,只要你做STM32开发,你几乎时刻都要查看这个文件相关的定义。这个文件打开可以看到,里面非常多的结构体以及宏定义。这个文件里面主要是系统寄存器定义申明以及包装内存操作,对于这里是怎样申明以及怎样将内存操作封装起来的。