本文目的是以串口通信來簡要分析STM32使用標準庫函式和HAL庫函式編程的差異,
目錄
- (一)開發方式
- 1.配置暫存器
- 2.庫函式
- 3.HAL庫
- (二)庫函式與HAL庫對比
- 1.串口通信實驗
- 2.庫函式與HAL庫比較
- (三)總結
(一)開發方式
1.配置暫存器
- 很多人學習51單片機開發的時候,基本都是直接操作暫存器進行單片機的控制,但是當他們轉向STM32開發的時候,直接操作暫存器不是那么容易了,因為STM32的暫存器數量是51單片機的許多倍,開發時經常需要翻查芯片的資料手冊,此時直接操作暫存器就變得非常的費力了,
- 但是暫存器是最接近硬體的部分,直接操作暫存器能夠很容易的實作自己想要的功能,并且遇到問題時能夠知道是哪個暫存器的配置出現了問題,這種開發方式雖然十分麻煩但卻讓人能夠深入理解單片機的運行原理,
2.庫函式
- 由于暫存器開發難度很大,因此ST公司就專門撰寫了芯片的庫函式(韌體庫),將一些常用量的宏定義和一些外設也通過結構體變數封裝起來,如GPIO口時鐘等,所以我們只需要配置結構體變數成員就可以修改外設的配置暫存器,從而選擇不同的功能,
- 標準外設庫(Standard Peripherals Library)是對STM32芯片的一個完整的封裝,包括所有標準器件外設的器件驅動器,這應該是目前使用最多的ST庫,幾乎全部使用C語言實作,但是,標準外設庫也是針對某一系列芯片而言的,沒有可移植性,
3.HAL庫
- HAL(Hardware Abstraction Layer)是硬體的抽象層,它表現出更高的抽象整合水平,HAL API集中關注各外設的公共函式功能,這樣便于定義一套通用的對用戶友好的API函式介面,從而可以輕松實作從一個STM32產品移植到另一個不同的STM32系列產品,下圖是HAL庫的整體框架,

- HAL庫是ST未來主推的庫,從前年開始ST新出的芯片已經沒有STD庫了,比如F7系列,現在,ST主推HAL庫,目前,HAL庫已經支持STM32全線產品,總的來說,HAL庫相對于庫函式層次架構更加清晰,更加抽象,
(二)庫函式與HAL庫對比
1.串口通信實驗
- 庫函式主要代碼

- HAL庫主要代碼

2.庫函式與HAL庫比較
- 庫函式配置好串口以后,當串口接收到資料再發送給上位機時需要回圈發送,但是HAL庫就直接呼叫
HAL_UART_Transmit函式就能直接將串口的資料發給上位機, - 庫函式的串口通信函式只適用于STM32F1系列,對于其他系列的就不能通用了;但是對于HAL庫來說,只要外設相同,基本上能夠很容易的移植,
(三)總結
通過比較STM32庫函式和HAL庫的開發方式,庫函式和HAL庫其實本質上都是將STM32的底層的暫存器進行封裝并向用戶提供友好的介面,這都極大的降低了用戶的開發門檻,但是相對于庫函式來說,HAL庫更加“通用”,能夠較好的移植到其他的芯片上去,但也正是這樣,導致其代碼比較龐大、執行效率比較低的結果,總的來說,HAL庫相對于庫函式更加友好,能夠讓用戶將精力放在開發的產品上而不是怎么實作,
由于作者水平有限,文中難免有疏漏之處,希望讀者批評指正,
參考文章:
1.通俗易懂決議stm32 (一) HAL庫 標準庫 直接配置暫存器 三種開發方式的區別
2.STM32標準庫與HAL庫比較
3.stm32-hal庫開發入門
4.STM32 HAL庫與標準庫的區別
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/233995.html
標籤:其他
上一篇:C語言小白成長日記
