3.1 CMSIS概述
CMSIS是一种标准化软件接口,是独立于供应商的Cortex-M处理器硬件抽象层,为微处理器和外设实现一致且简单的软件接口,简化了软件复用,降低了操作系统的移植难度,同时也缩短了新开发人员学习的时间,更能减低开发成本。
CMSIS软件架构由4层构成:用户应用层、操作系统及中间件接口层、CMSIS层和硬件层,如下图所示。
其中,CMSIS层主要由3部分组成:
(1)核内外设访问层CPAL:由ARM公司实现,包括了命名定义、地址定义、存取内核寄存器和外围设备的协助函数,同时定义一个与设备无关的RTOS内核接口函数。
(2)中间件访问层MWAL:由ARM公司实现,芯片厂商提供更新,主要负责当以中间件访问的应用编程接口API函数,如TCP/IP协议栈、SD/MMC、USB等协议。
(3)设备外设访问层DPAL:由芯片厂商实现,负责对硬件寄存器地址及外设接口进行定义,另外厂商会对异常向量进行扩展,以处理相应异常。
3.2 STM32F10x标准外设库
STM32F10x标准外设库(也称固件库)是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所由外设的性能特征,而且包括每一个外设的驱动描述和应用实例,同构使用该固件函数库无需深入掌握细节便可开发每一个外设。
每一个外设驱动都有一组函数组成,这组函数覆盖了该外设所有功能,每个器件的开发都由一个通用API驱动,API对该程序的结构、函数和参数名都进行了标准化。因此,对于多数程序来说,我们都可以直接使用。STM32的标准库的命名都遵循一定的命名规则,其中各种外设缩写表如下图所示:
缩写 | 外设名称 | 缩写 | 外设名称 |
ADC | 模数转换器 | IIS | IIS音频总线接口 |
BKP | 备份寄存器 | IWDG | 独立看门狗 |
CAN | CAN控制器 | NVIC | 嵌套向量中断控制器 |
CRC | CRC计算单元 | PWR | 电源控制 |
DMA | DMA控制器 | RCC | 复位和时钟 |
EXTI | 外部中断 | RTC | 实时时钟 |
SYSTICK | 系统定时器 | SDIO | SDIO接口 |
Flash | Flash存储器 | SPI | SPI接口 |
GPIO | 通用引脚 | FSMC | 静态存储控制器 |
IIC | IIC接口 | TIM | 定时器 |
DAC | 数模转换器 | USART | 串口 |
DBGMCU | MCU调试模块 | WWDG | 窗口看门狗 |
系统相关的源程序文件和头文件都以“stm32f10x_”开头,如stm32f10x.h。外设函数的命名以该外设的缩写加下划线开头,用以分隔外设缩写和函数名,函数名的每个单词的第一个字母大写,如GPIO_SetBits;STM32标准库中包含两个文件夹,分别为Librares和Project。
1. CMSIS和STM32F10x_StdPeriph_Driver组成Libraries文件:
(1)core_cm3.c和core_cm4.h分别是核内外设访问层的源文件和头文件。作用是为采用Cortex-M3内核的芯片外设提供进入M3内核的接口。
(2)stm32f10x.h是设备外设访问层头文件。
(3)system_stm32f10x.c和system_stm32f10x.h分别是设备外设访问层的源文件和头文件。
(4)startup_stm32f10x_X.s是用汇编鞋的系统启动文件,X代表了不同的芯片型号,使用时要与芯片对应。
(5)stm32f10x_ppp.c和stm32f10x_ppp.h分别为外设驱动源文件和头文件,ppp代表不同ing的外设,使用的时候将其加入到工程即刻。
(6)misc.c和misc.h提供了外设对内核中的中断向量控制器NVIC的访问函数,在配置中断时,必须把这个文件加入到工程中。
2. Project文件夹下是采用标准库写的一个工程模板和例子
(1)其中比较重要的是stm32f10x_it.c和stm32f10x_it.h源文件和头文件,是用来编写中断服务函数。
(2)stm32f10x_conf.h文件被包含进stm32f10x.h文件,用来配置使用了外设的头文件,用这个头文件可以方便地增加和删除外设驱动函数。