一、固件庫是什么?
所謂固件庫,這里指的是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里面。
總結:固件庫編程相對於寄存器編程有開發效率快,節省精力的好處。分析固件庫的組成,對理解其功能和原理有所幫助。
