- 基于STM32的嵌入式系統設計與實踐
- 鐘佩思 徐東方 劉梅編著
- 1474字
- 2021-03-12 20:28:37
2.1 庫函數開發概述
2.1.1 STM32標準函數庫概述
STM32標準函數庫也稱為固件庫,它是ST公司為嵌入式系統開發者訪問STM32底層硬件而提供的一個中間函數接口,即API(Application Program Interface),由程序、數據結構和宏組成,還包括微控制器所有外設的性能特征、驅動描述和應用實例。在STM32標準函數庫中,每個外設驅動都由一組函數組成,這組函數覆蓋了外設驅動的所有功能。我們可以將STM32標準函數庫中的函數視為對寄存器復雜配置過程高度封裝后所形成的函數接口,通過調用這些函數接口即可實現對STM32寄存器的配置,從而達到控制的目的。
STM32標準函數庫覆蓋了從GPIO端口到定時器,再到CAN、I2C、SPI、UART和ADC等所有的標準外設,對應的函數源代碼只使用了基本的C編程知識,非常易于理解和使用,并且方便進行二次開發和應用。庫函數開發與寄存器開發的對比圖如圖2.1所示。實際上,STM32標準函數庫中的函數只是建立在寄存器與應用程序之間的程序代碼,向下對相關的寄存器進行配置,向上為應用程序提供配置寄存器的標準函數接口。STM32標準函數庫的函數構建已由ST公司完成,這里不再詳述。在使用庫函數開發應用程序時,只要調用相應的函數接口即可實現對寄存器的配置,不需要探求底層硬件細節即可靈活規范地使用每個外設。

圖2.1 庫函數開發與寄存器開發的對比圖
2.1.2 庫函數開發的優勢
在傳統8位單片機的開發過程中,通常通過直接配置芯片的寄存器來控制芯片的工作方式。在配置過程中,常常需要查閱寄存器表,由此確定所需要使用的寄存器配置位,以及是置0還是置1。雖然這些都是很瑣碎、機械的工作,但是因為8位單片機的資源比較有限,寄存器相對來說比較簡單,所以可以用直接配置寄存器的方式進行開發,而且采用這種方式進行開發,參數設置更加直觀,程序運行時對CPU資源的占用也會相對少一些。
STM32的外設資源豐富,與傳統8位單片機相比,STM32的寄存器無論是在數量上還是在復雜度上都有大幅度提升。如果STM32采用直接配置寄存器的開發方式,則查閱寄存器表會相當困難,而且面對眾多的寄存器位,在配置過程中也很容易出錯,這會造成編程速度慢、程序維護復雜等問題,并且程序的維護成本也會很高。庫函數開發方式提供了完備的寄存器配置標準函數接口,使開發者僅通過調用相關函數接口就能實現煩瑣的寄存器配置,簡單易學、編程速度快、程序可讀性高,并降低了程序的維護成本,很好地解決了上述問題。
雖然采用寄存器開發方式能夠讓參數配置更加直觀,而且相對于庫函數開發方式,通過直接配置寄存器所生成的代碼量會相對少一些,資源占用也會更少一些,但因為STM32較傳統8位單片機而言有充足的CPU資源,權衡庫函數開發的優勢與不足,在一般情況下,可以犧牲一點CPU資源,選擇更加便捷的庫函數開發方式。一般只有對代碼運行時間要求極為苛刻的項目,如需要頻繁調用中斷服務函數等,才會選用直接配置寄存器的方式進行系統的開發工作。
自從庫函數出現以來,STM32標準函數庫中各種標準函數的構建也在不斷完善,開發者對于STM32標準函數庫的認識也在不斷加深,越來越多的開發者傾向于用庫函數進行開發。雖然目前STM32F1系列和STM32F4系列各有一套自己的函數庫,但是它們大部分是相互兼容的,在采用庫函數進行開發時,STM32F1系列和STM32F4系列之間進行程序移植,只需要進行小修改即可。如果采用寄存器進行開發,則二者之間的程序移植是非常困難的。
當然,采用庫函數開發并不是完全不涉及寄存器,前面也提到過,雖然庫函數開發簡單易學、編程速度快、程序可讀性高,但是它是在寄存器開發的基礎上發展而來的,因此想要學好庫函數開發,必須先對STM32的寄存器配置有一個基本的認識和了解。二者是相輔相成的,通過認識寄存器可以更好地掌握庫函數開發,通過學習庫函數開發也可以進一步了解寄存器。