一、固件库是什么?
所谓固件库,这里指的是STM32的标准外设固件库,以STM32F103为例,其固件库英文全称为STM32F10x Standard Peripherals Firmware Library 。
在STM32F103的官方固件库手册首页中,有对于固件库的解释:
This library is a firmware package which contains a collection of routines, data structures and macros covering the features of STM32 peripherals. It includes a description of the device drivers plus a set of examples for each peripheral. The firmware library allows any device to be used in the user application without the need for in-depth study of each peripheral’s specifications.
中文释义为:
这个库是一个固件包,它包含了一系列的例程、数据结构和宏,涵盖了STM32外设的功能,包括设备驱动程序的描述以及为每个外设配套的一组例子。
该固件库允许在用户应用中使用任何设备,而不需要深入研究每个外设的规格。
二、固件库应该包含哪些文件?
-
汇编写的启动文件
startup_stm32f10x_hd.s :设置堆栈指针、设置PC指针、初始化中断向量表、配置系统时钟、调用C库函数去到C的世界。
-
时钟配置文件
system_stm32f10x.c :把外部时钟HSE=8M,经过PLL倍频为72M。
-
内核相关的文件
(1)符合“CMSIS” —— Cortex 微控制器软件接口标准,是ARM公司设计的与ST等供应商无关的硬件抽象层,使不同的单片机厂家做到相对兼容。
core_cm3.h : 实现了内核里面外设的寄存器映射。
core_cm3.c
(2)NVIC(嵌套向量中断控制器)、SYSTICK(系统滴答定时器),这一部分是ST公司对ARM的内核裁剪后定制的内容。
misc.h
misc.c
-
片上外设相关的文件
stm32f10x.h :实现了片上外设的寄存器映射(给寄存器的地址取个别名)。
以下的“xx” :包含GPIO、USART、I2C、SPI、FSMC等等各种外设,数量很多。
stm32f10x_xx.c : 外设的驱动函数库文件(比如GPIO的置位和复位函数)。
stm32f10x_xx.h : 存放外设的初始化结构体,外设初始化结构体成员的参数列表,外设固件库函数的声明。
-
头文件的配置文件
Stm32f10x_conf.h : 头文件的头文件,里面包含了以下头文件。
//stm32f10x_usart.h
//stm32f10x_i2c.h
//stm32f10x_spi.h
//stm32f10x_adc.h
//stm32f10x_fsmc.h
……
为了方便在程序中包含各种外设头文件,所以有了这一配置文件,在实际程序中,此文件被写在stm32f10x.h的最后。所以程序中只需包含stm32f10x.h就够了。 -
专门存放中断服务函数的c文件
stm32f10x_it.c
stm32f10x_it.h
中断服务函数也可以随意放在其他地方,但是为了方便和统一,一般都放在stm32f10x_it.c里面。
总结:固件库编程相对于寄存器编程有开发效率快,节省精力的好处。分析固件库的组成,对理解其功能和原理有所帮助。