固件库是指“STM32 标准函数库”,它是由ST 公司针对STM32 提供的函数接口,即 API (Application Program Interface),开发者可调用这些函数接口来配置STM32 的寄存器,使开发人员得以脱离最底层的寄存器操作,有开发快速,易于阅读,维护成本低等优点。
image.png
库是架设在寄存器与用户驱动层之间的代码,向下处理与寄存器直接相关的配置,向上 为用户提供配置寄存器的接口

固件库文件分析

image.png

  • Libraries:文件夹下是驱动库的源代码及启动文件,这个非常重要,我们要使用的固件库就在这个文件夹里面。
  • Project :文件夹下是用驱动库写的例子和工程模板,其中那些为每个外设写好的例程对我们非常有用,我们在学习的时候就可以参考这里面的例程,非常全面,简直就是穷尽了外设的所有功能。
  • Utilities:包含了基于ST 官方实验板的例程,不需要用到,略过即可。
  • stm32f10x_stdperiph_lib_um.chm:库帮助文档

Libraries 文件夹

STM32F10x_StdPeriph_Driver 文件夹

Std 标准 Peripheral 外设

image.png

STM32F10x_StdPeriph_Driver 文件夹下有inc(include 的缩写)跟src(source 的简写)这两个文件 夹,这里的文件属于CMSIS 之外的的、芯片片上外设部分。src 里面是每个设备外设的驱动源程序,inc 则是相对应的外设头文件在src 和inc 文件夹里的就是ST 公司针对每个STM32 外设而编写的库函数文件,每个外设对应 一个.c 和.h 后缀的文件:
image.png

CMSIS文件夹

image.png

  • 内核相关文件

在CoreSupport 文件夹中有core_cm3.c 和core_cm3.h 两个文件。Core_cm3.h 头文件里面实现了内核的寄存器映射,对应外设头文件stm32f10x.h,区别就是一个针对内核的外设,一个针对片上 (内核之外)的外设。core_cm3.c 文件实现了一下操作内核外设寄存器的函数,用的比较少。
core_cm3.h 头文件中包含了“stdint.h”这个头文件,主要作用是提供一些类型定义
image.png
这些新类型定义屏蔽了在不同芯片平台时,出现的诸如int 的大小是16 位,还是32 位的差异。 所以在我们以后的程序中,都将使用新类型如uint8_t 、uint16_t 等。

  • 汇编编写的启动文件
  • stm32f10x.h

这个头文件实现了片上外设的所以寄存器的映射,是一个非常重要的头文件,在内核中与之相对应的头文件是core_cm3.h

  • system_stm32f10x.c

这个文件包含了STM32 芯片上电后初始化系统时钟、扩展外部存储器用的函数,例如我们前两章提到供启动文件调用的“SystemInit”函数,用于上电后初始化时钟,该函数的定义就存储在system_stm32f10x.c 文件。STM32F103 系列的芯片,调用库的这个SystemInit 函数后,系统时钟被初始化为72MHz

stm32f10x_it.c、stm32f10x_conf.h 和system_stm32f10x.c 文件

STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template
在这个文件目录下,存放了官方的一个库工程模板,我们在用库建立一个完整的工程时,还需要添加这个目录下的stm32f10x_it.c、stm32f10x_it.h、stm32f10x_conf.h 和system_stm32f10x.c 这四 个文件。

  • system_stm32f10x.c:

这个文件包含了STM32 芯片上电后初始化系统时钟、扩展外部存储器用的 函数,例如我们前两章提到供启动文件调用的“SystemInit”函数,用于上电后初始化时钟,该函数的定义就存储在system_stm32f10x.c 文件。STM32F103 系列的芯片,调用库的这个SystemInit 函数后,系统时钟被初始化为72MHz

  • stm32f10x_conf.h:头文件的头文件

这个文件被包含进stm32f10x.h 文件。当我们使用固件库编程的时候,如果需要某个外设的驱动库,就需要包含该外设的头文件:stm32f10x_xxx.h,包含一个还好,如果是用了多外设,就需要包含多个头文件,这不仅影响代码美观也不好管理,现我们用一个头文件stm32f10x_conf.h 把这些外设的头文件都包含在里面,让这个配置头文件统一管理这些外设的头文件,我们在应用程序中只需要包含这个配置头文件即可,我们又知道这个头文件在 stm32f10x.h 的最后被包含,所以最终我们只需要包含stm32f10x.h 这个头文件即可,非常方便。

新建工程——固件库版本

工程模板

image.png

image.png