1. 程式人生 > >通俗易懂解析stm32 (一) HAL庫 標準庫 直接配置暫存器 三種開發方式的區別

通俗易懂解析stm32 (一) HAL庫 標準庫 直接配置暫存器 三種開發方式的區別

    通常新手在入門STM32的時候,首先都要先選擇一種要用的開發方式,不同的開發方式會導致你程式設計的架構是完全不一樣的。一般大多數都會選用標準庫和HAL庫,而極少部分人會通過直接配置暫存器進行開發。網上關於標準庫、HAL庫的描述相信是數不勝數。可是一個對於很多剛入門的朋友還是沒法很直觀的去真正瞭解這些不同開發發方式彼此之間的區別,所以筆者想以一種非常直白的方式,用自己的理解去將這些東西表述出來,如果有描述的不對的地方或者是不同意見的也可以大家提出。

一、直接配置暫存器

不少先學了51的朋友可能會知道,會有一小部分人或是教程是通過組合語言直接操作暫存器實現功能的,這種方法到了STM32就變得不太容易行得通了,因為STM32的暫存器數量是51微控制器的十數倍,如此多的暫存器根本無法全部記憶,開發時需要經常的翻查晶片的資料手冊,此時直接操作暫存器就變得非常的費力了。但還是會有很小一部分人,喜歡去直接操作暫存器,因為這樣更接近原理,知其然也知其所以然。

二、標準庫

上面也提到了,STM32有非常多的暫存器,而導致了開發困難,所以為此ST公司就為每款晶片都編寫了一份庫檔案,也就是工程檔案裡stm32F1xx.....之類的。在這些 .c .h檔案中,包括一些常用量的巨集定義,把一些外設也通過結構體變數封裝起來,如GPIO口時鐘等。所以我們只需要配置結構體變數成員就可以修改外設的配置暫存器,從而選擇不同的功能。也是目前最多人使用的方式,也是學習STM32接觸最多的一種開發方式,我也就不多闡述了。

三、HAL庫

HAL庫是ST公司目前主力推的開發方式,全稱就是Hardware Abstraction Layer(抽象印象層)。庫如其名,很抽象,一眼看上去不太容易知道他的作用是什麼。它的出現比標準庫要晚,但其實和標準庫一樣,都是為了節省程式開發的時期,而且HAL庫尤其的有效,如果說標準庫把實現功能需要配置的暫存器集成了,那麼HAL庫的一些函式甚至可以做到某些特定功能的整合。也就是說,同樣的功能,標準庫可能要用幾句話,HAL庫只需用一句話就夠了。並且HAL庫也很好的解決了程式移植的問題,不同型號的stm32晶片它的標準庫是不一樣的,例如在F4上開發的程式移植到F3上是不能通用的,而使用HAL庫,只要使用的是相通的外設,程式基本可以完全複製貼上,注意是相通外設,意思也就是不能無中生有,例如F7比F3要多幾個定時器,不能明明沒有這個定時器卻非要配置,但其實這種情況不多,絕大多數都可以直接複製貼上。是而且使用ST公司研發的STMcube軟體,可以通過圖形化的配置功能,直接生成整個使用HAL庫的工程檔案,可以說是方便至極,但是方便的同時也造成了它執行效率的低下,在各種論壇帖子真的是被吐槽的數不勝數。

四、總結

綜合上面說的,其實筆者還是強烈推薦HAL庫的,理由有二: 第一、 F7系列開始 ST公司就已近開始停止更新標準庫,也就是F7開始包括F7已經不能用標準庫了,公司對於主打HAL庫的目的已經非常明顯了。第二、追求更方便、追求模組化向來是世界的潮流,更方便的HAL庫一定會迅速發展,低效的短板遲早會被硬體高度整合化所彌補。

當然啦,不能只學習HAL庫,底層的原理必需是要懂的,這是每個學有所成的人都公認的事實,HAL庫也不是萬能的,結合對底層的理解相信一定會讓你的開發水準大大提高。