1. 固件库介绍
STM32标准外设库也称固件函数库或简称固件库,是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函数库还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中间API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松应用每一个外设。因此,使用固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。
每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。每个器件的开发都由一个通用API (application programming interface 应用编程界面)驱动,API对该驱动程序的结构,函数和参数名称都进行了标准化。ST公司2007年10月发布了V1.0版本的固件库。之后推出了多个版本,如V2.0版的固件库, V3.0版的固件库等。本项目使用V3.5版本,该版本也是目前使用最广泛的版本。固件库的文件结构,如下图所示;
图1 固件库的文件结构
1)使用固件库的优势
简单的说,使用标准外设库进行开发最大的优势在于可以使开发者不用深入了解底层硬件细节就可以灵活规范的使用每一个外设。标准外设库覆盖了从GPIO到定时器,再到CAN、I2C、SPI、UART和ADC等等的所有标准外设。对应的C源代码只是用了最基本的C编程的知识,所有代码经过严格测试,易于理解和使用,并且配有完整的文档,非常方便进行二次开发和应用。
2)标准库文件描述
STM32F10x_StdPeriph_Lib_V3.4.0 | _htmresc | 本文件夹包含了所有的html页面资源 |
Libraries | CMSIS | |
STM32F10x_StdPeriph_Driver | inc | 标准外设库驱动头文件 |
Src | 标准外设库驱动源文件 | |
Project | Examples | 标准外设库驱动的完整例程 |
Template | MDK-ARM | KEIL RVMDK的项目模板示例 |
RIDE | Raisonance RIDE的项目模板示例 | |
EWARM | IAR EWARM的项目模板示例 | |
Utilities | STM3210-EVAL | 本文件夹包含了用于STM3210B-EV和STM3210E-EVAL评估板的专用驱动 |
标准外设库的第一部分是CMSIS 和STM32F10x_StdPeriph_Driver,CMSIS 是独立于供应商的Cortex-M 处理器系列硬件抽象层,为芯片厂商和中间件供应商提供了简单的处理器软件接口,简化了软件复用工作,降低了Cortex-M 上操作系统的移植难度,并减少了新入门的微控制器开发者的学习曲线和新产品的上市时间。
STM32F10x_StdPeriph_Driver则包括了分别对应包括了所有外设对应驱动函数,这些驱动函数均使用C语言编写,并提供了统一的易于调用的函数接口,供开发者使用。Project文件夹中则包括了ST官方的所有例程和基于不同编译器的项目模板,这些例程是学习和使用STM32的重要参考。
Utilities包含了相关评估板的示例程序和驱动函数,供使用官方评估板的开发者使用,很多驱动函数同样可以作为学习的重要参考。
文件名 | 功能描述 | 具体功能说明 |
core_cm3.h core_cm3.c | Cortex-M3内核及其设备文件 | 访问Cortex-M3内核及其设备:NVIC,SysTick等访问Cortex-M3的CPU寄存器和内核外设的函数 |
stm32f10x.h | 微控制器专用头文件 | 这个文件包含了STM32F10x全系列所有外设寄存器的定义(寄存器的基地址和布局)、位定义、中断向量表、存储空间的地址映射等 |
system_stm32f10x.h system_stm32f10x.c | 微控制器专用系统文件 | 函数SystemInit,用来初始化微控制器 函数Sysem_ExtMemCtl,用来配置外部存储器控制器。它位于文件startup_stm32f10x_xx.s /.c,在跳转到main前调用SystemFrequncy,该值代表系统时钟频率 |
startup_stm32f10x_Xd.s | 编译器启动代码 | 微控制器专用的中断处理程序列表(与头文件一致)。弱定义(Weak)的中断处理程序默认函数(可以被用户代码覆盖) 该文件是与编译器相关的 |
stm32f10x_conf.h | 固件库配置文件 | 通过更改包含的外设头文件来选择固件库所使用的外设,在新建程序和进行功能变更之前应当首先修改对应的配置。 |
stm32f10x_it.h stm32f10x_it.c | 外设中断函数文件 | 用户可以相应的加入自己的中断程序的代码,对于指向同一个中断向量的多个不同中断请求,用户可以通过判断外设的中断标志位来确定准确的中断源,执行相应的中断服务函数。 |
stm32f10x_ppp.h stm32f10x_ppp.c | 外设驱动函数文件 | 包括了相关外设的初始化配置和部分功能应用函数,这部分是进行编程功能实现的重要组成部分。 |
Application.c | 用户文件 | 用户程序文件,通过标准外设库提供的接口进行相应的外设配置和功能设计。 |
2. 固件库移植
1)将固件库中“Libraries\STM32F10x_StdPeriph_Driver”下的inc和src文件全部复制到工程模板“Template\Libraries”下,如下图所示;
图2 固件库
复制完成后,Template\Libraries目录如下图所示;
图3 工程模板目录
2)将src中的全部文件添加到工程目录FWLB中,如下图所示;
图4 工程FWLB目录
3)添加文件所在路径,如下图所示;
图5 配置文件路径
5)添加用户文件,将固件库STM32F10x_StdPeriph_Lib_ V3.5.0\ Project\STM32F10x_StdPeriph_Template中的main.c、stm32f103x_it.c、stm32f10x_it.h、stm32f10x_conf.h文件复制到Template\User中,如下图所示;
图6 添加用户文件
复制完成后,Template\User目录结构,如下图所示;
图7 Template\User目录结构
6)将main.c、stm32f10x_it.c文件添加到工程中的USER目录下,如下图所示;
图8 USER目录
7)添加文件路径,如下图所示;
图9 添加User路径
8)删除main.c函数中不需要的代码,仅保留如下部分,如下图所示;
图10 main.c函数
至此我们就完成了固件库的移植。
3. 固件库使用
1)参考官方提供的帮助文档
帮助文档位于“固件库介绍和移植\固件库\【固件库】STM32 F10x_StdPeriph_Lib_V3.5.0”下的“stm32f10x_stdperiph_lib_um.chm”文件。
图11 帮助文档
2)参考《STM32固件库中文使用手册》
中文使用手册位于“固件库介绍和移植”文件夹下,如下图所示;
图12 STM32固件库中文使用手册