STM32F10X系列微控制器标准外设库的应用
Stm32f10x系列微控制器具有Cortex-M3内核结构,它集成了CM3core的中心处理器内核和先进的系统外设,实现了内置的中断控制、存储器保护,以及系统的调试和跟踪功能。在进行嵌入式系统设计时,控制软件首先需要对微控制器的启动、系统时钟、存储器映射、中断向量、异常处理等进行设置,增加了控制软件的前期开发时间,更加造成了初学者的难度。为了缩短开发时间、提高软件的可移植性,同时降低开发成本,ST公司提供了标准外设驱动库,该库集成了CMSIS文件及微控制器所有外设驱动函数,由于屏蔽了不同型号微控制器之间的差异,用户文件仅需调用相应的库函数便可完成系统配置,简化了开发流程,降低了开发难度。
1 CMSIS文件结构
CMSIS为Codex微控制器软件接口标准,提供了独立于Cortex-M处理器的外设、实时操作系统、中间组件的通用接口方法,解决了软件组件应用于不同Cortex核微控制器时所带来的难题,简化了软件复用,降低了Codex-M上操作系统的移植难度。
CMSIS的文件结构如图1所示(以Codex-M3为例),其中stdint.h包括对8位、16位、32位等类型指示符的定义,主要用来屏蔽不同编译器之前的差异。core_cm3.h和core_cm3.c中包括Cortex_M3核的全局变量声明和定义,并定义一些静态功能函数。system_stm32.h和system_ stm 32.c是不同芯片厂商定义的系统初始化函数SystemInit(),以及一些指示时钟的变量。Stm32f10x.h是提供给应用程序的头文件,包含core _cm3.h和system_stm32.h,定义了与特定芯片厂商相关的寄存器以及各中断异常号,并可定制M3核中的特殊设备,如MCU、中断优先级位数以及SysTick时钟配置。虽然CMSIS提供的文件很多,但在应用程序中只需包含h头文件。
2 标准外设库简介
ST官方提供的标准外设库文件包括标准外设库文件、标准外设驱动例程、各种开发环境下的模板示例、评估板专用驱动等几部分,其中,CMSIS和STM32F10x_StdPeriph_Driver是最重要的部分。STM32F10x_StdPeriph_Driver则包括了微控制器所有外设对应驱动函数,这些驱动函数均使用C语言编写,并提供了统一的函数调用接口。Project文件夹中则包括了ST官方的所有例程和基于不同编译器的项目模板,这些例程是学习和使用STM32的重要参考。Utilities包含了相关评估板的示例程序和驱动函数,供使用官方评估板的开发者使用,其中很多驱动函数同样可以作为学习的重要参考。
标准外设库文件之间的关系如图2所示,每一个标准外设驱动包括源文件stm32f10x_PPP.C和头文件stm32f10x_ppp.h两个文件(PPP表示外设,如GPIO、EXTI、I2C等),源文件中包含了相应外设的所有驱动函数,在misc.c文件中定义了CMSIS功能的一些附加函数,如对NVIC的配置等。STM32f10x.h为CMSIS Codex-M3设备外设访问层头文件,包含了STM32F10x全系列所有外设寄存器的定义(寄存器的基地址和布局)、位定义、中断向量表、存储空间的地址映射,以及是否使用标准外设库设置等。System_stm32f10x.C为CMSIS Cortex-M3设备外设访问层系统文件,完成系统初始化及时钟配置。Stm32f10x_conf.h为标准外设驱动配置文件,通过更改包含的外设头文件来选择所使用的外设,在新建程序和进行功能变更之前应当首先修改对应的配置。Stm32f10x_it.c为外设中断函数文件,通过在相应位置加入中断程序代码执行相应中断操作,在实际应用中,中断函数也可以设置在项目主程序文件中,但中断函数名必须正确。
3 基于标准外设库的实现步骤
在IAR FOR ARM6.30编程环境下,采用V3.50的标准外设库,开发步骤如下:
1)首先创建一能够象征项目含义的文件夹(如touch),并在该文件夹下创建名为EVARM和Library的文件夹;
2)STM32F10x_StdPeriph_Lib_V3.5.0中STM32F10x_StdPeriph_Driver和CMSIS文件夹拷贝到touch目录下;
3)将\STM32F10x_StdPeriph_Lib_V350\Project\STM32F10x_StdPeriph_Template下的main.c、stm32f10x_confh、stm32f10x_it.c、stm32f10x_it.h拷贝到touch目录下;
4)将\STM32F10x_StdPeriph_Lib_V350\Project\STM32F10x_StdPeriph_Template\EWARM下的stm32f10x_flashcfstm32f10x_flash_ex tsram.icf、stm32f10x_nor.icf、stm32f10x_ram.icf拷贝至/touch/EVARM;
5)打开IAR Embedded Workbench IDE,创建一个新的workspace,而后按照模板创建一个新空白项目;
6)为项目添加工作组CMSIS、StdPeriph_Driver、EVARM、User、Doc,如图3所示;
7)向各工作组添加文件,将core_cm3.c、system_stm32f10x.c添加到CMSIS;将startup_stm32f10x_hd.s添加到EVARM;将misc.c、stm32f10x_rcc.c及所需其它外设驱动源文件添加到StdPeriph_Driver;将main.c、stm32f10x_it.c添加到User;
8)在Project→options→C/C++Compiler→Preprocessor中设置、添加编译搜索路径,最好包括所有项目中所调用文件的路径,否则需要在源文件中给出被调文件的完整路径;
9)在Project→options→Ceneral Options→Target标签页选择相应器件;
10)勾选Project→Options→General Options→Library Configuration→Use CMSIS选项;
11)在stm32f10x.h文件中配置控制器启动文件,根据所选用产品系列,去掉相应注释即可,如令#defineSTM32F10X_HD有意义;同时,去掉/*#define USE_STDPERIPH_DRIVER*/的注释,表示使用标准外设库;
12)选择使用HSI或HSE,system_stm32f10x.c中相关程序代码段如下:
- 基于CMSIS标准的Cortex-M3的应用软件开发(06-20)
- 基于μC/OS-II和TCP/IP协议的多串口服务器(08-23)
- μC/OS-II就绪表算法在Cortex-M3架构上的适配设计(01-22)
- STM32中断与嵌套NVIC快速入门(01-25)
- 基于STM32的电池管理系统触摸屏设计方案(01-25)
- 发挥ARM Cortex-M3和M4微控制器最大作用的要诀(01-21)