且消除对微控制器进行编程时需要维持的不同的、互相不兼容的标准的需求,从而达到降低开发成本的目的。
如图 5-5所示,基于CMSIS标准的软件架构主要分为以下4层:用户应用层、操作系统及中间件接口层、CMSIS层、硬件寄存器层。其中CMSIS层起着承上启下的作用:一方面该层对硬件寄存器层进行统一实现,屏蔽了不同厂商对Cortex-M系列微处理器核内外设寄存器的不同定义;另一方面又向上层的操作系统及中间件接口层和应用层提供接口,简化了应用程序开发难度,使开发人员能够在完全透明的情况下进行应用程序开发。也正是如此,CMSIS层的实现相对复杂。
图 5-5 CMSIS标准的软件架构 层主要分为以下3 个部分:
(1) 核内外设访问层(CPAL,Core Peripheral Access Layer):该层由ARM 负责实现。包括对寄存器名称、地址的定义,对核寄存器、NVIC、调试子系统的访问接口定义以及对特殊用途寄存器的访问接口(例如:CONTROL,xPSR)定义。由于对特殊寄存器的访问以内联方式定义,所以针对不同的编译器ARM 统一用来屏蔽差异。该层定义的接口函数均是可重入的。
(2) 片上外设访问层(DPAL, Device Peripheral Access Layer):该层由芯片厂商负责实现。该层的实现与CPAL 类似,负责对硬件寄存器地址以及外设访问接口进行定义。该层可调用CPAL 层提供的接口函数同时根据设备特性对异常向量表进行扩展,以处理相应外设的中断请求。
(3) 外设访问函数(AFP, Access Functions for Peripherals):该层也由芯片厂商负责实现,主要是提供访问片上外设的访问函数,这一部分是可选的。 对一个Cortex-M 微控制系统而言,CMSIS 通过以上三个部分实现了: l 定义了访问外设寄存器和异常向量的通用方法; l 定义了核内外设的寄存器名称和核异常向量的名称; l 为RTOS 核定义了与设备独立的接口,包括Debug 通道。
这样芯片厂商就能专注于对其产品的外设特性进行差异化,并且消除他们对微控制器进
行编程时需要维持的不同的、互相不兼容的标准需求,以达到低成本开发的目的。CMSIS中的具体文件结构如表 5-6所示。 表 5-6 CMSIS文件夹结构 CMSIS Core Documentation CMSIS文档 : 大容量产品启动文件 MDK ARM编译器启动文件 : 中容量产品启动文件 : 小容量产品CM3 Startup arm 启动文件 GCC编译器启动文件 IAR编译器启动文件 TrueSTUDIO编译器启动文件 gcc_ride7 iar TrueSTUDIO 本文件夹包含STMF10xxx CMSIS文件:微控制器外设访问层和内核设备访问层: :CMSIS的Cortex-M3内核设备访问层头文件 :CMSIS的Cortex-M3内核设备访问层源文件 :CMSIS的Cortex-M3 STM32f10xxx微控制器外设访问层头文件 :CMSIS的Cortex-M3 STM32f10xxx微控制器外设访问层头文件 :CMSIS的Cortex-M3 STM32f10xxx微控制器外设访问层源文件 在实际开发过程中,根据应用程序的需要,可以采取2种方法使用标准外设库(StdPeriph_Lib):
(1) 使用外设驱动:这时应用程序开发基于外设驱动的API(应用编程接口)。用户只需要配置文件””,并使用相应的文件”.c”即可。
(2) 不使用外设驱动:这时应用程序开发基于外设的寄存器结构和位定义文件。 这两种方法的优缺点在“使用标准外设库开发的优势”小节中已经有了具体的介绍,这里仍要说明的是,使用使用标准外设库进行开发可以极大的减小软件开发的工作量,也是目前嵌入式系统开发的一个趋势。
标准外设库(StdPeriph_Lib)支持STM32F10xxx系列全部成员:大容量,中容量和小容量产品。从表 5-6中也可以看出,启动文件已经对不同的系列进行了划分,实际开发中根据使用的STM32产品具体型号,用户可以通过文件””中的预处理define或者通过开发环境中的全局设置来配置标准外设库(StdPeriph_Lib),一个define对应一个产品系列。 下面列出支持的产品系列 STM32F10x_LD:STM32小容量产品 STM32F10x_MD:STM32中容量产品 STM32F10x_HD:STM32大容量产品
在库文件中这些define的具体作用范围是: l 文件“”中的中断IRQ定义
l 启动文件中的向量表,小容量,中容量,大容量产品各有一个启动文件 l 外设存储器映像和寄存器物理地址 l 产品设置:外部晶振(HSE)的值等 l 系统配置函数
因此通过宏定义这种方式,可以使标准外设库适用于不同系列的产品,同时也方便与不同产品之间的软件移植,极大的方便了软件的开发。
STM32F10XXX标准外设库的使用
标准外设库中包含了众多的变量定义和功能函数,如果不能了解他们的命名规范和使用规律将会给编程带来很大的麻烦,本节将主要叙述标准外设库中的相关规范,通过这些规范的学习可以更加灵活的使用固件库,同时也将极大增强程序的规范性
和易读性,同时标准外设库中的这种规范也值得我们在进行其他相关的开发时使用和借鉴。
1. 缩写定义
标准外设库中的主要外设均采用了缩写的形式,通过这些缩写可以很容易的辨认对应的外设。 缩写 外设/单元 ADC BKP CAN 模数转换器 备份寄存器 控制器局域网模块 CEC CRC CRC计算单元 DAC DBGMCU DMA 数模转换器 调试支持 直接内存存取控制器 EXTI FLASH FSMC GPIO 外部中断事件控制器 闪存存储器 灵活的静态存储器控制器 通用输入输出