自STM32標(biāo)準(zhǔn)庫出道以來,備受廣大工程師和公司的喜愛叁巨,但是斑匪,從2013年開始,ST逐漸停止了對標(biāo)準(zhǔn)外設(shè)庫的更新和維護(hù)锋勺。目前蚀瘸,ST全力推崇HAL庫,STM32Cube就是與HAL庫配合使用圖形化編程官方IDE庶橱。
7.1 STM32庫簡介
到目前為止贮勃,ST有標(biāo)準(zhǔn)外設(shè)庫(SPL 庫)、HAL 庫苏章、LL 庫 三種寂嘉。前兩者都是常用的庫,后面的 LL 庫是 ST 最近才添加枫绅,隨 HAL 源碼包一起提供泉孩,目前支持的芯片也偏少。各庫如下所示:
其中,SPL 庫 和 HAL 庫兩者相互獨(dú)立预伺,互不兼容订咸。幾種庫的比較如下:
目前幾種庫對不同芯片的支持情況如下:
ST 中文官網(wǎng)上有一篇《STM32庫函數(shù)性能對比》的文章曼尊,其中對比了各種庫的性能如下:
7.1.1標(biāo)準(zhǔn)外設(shè)庫簡介
標(biāo)準(zhǔn)外設(shè)庫(Standard Peripherals Library)是對 STM32 芯片的一個完整的封裝,包括所有標(biāo)準(zhǔn)器件外設(shè)的器件驅(qū)動器脏嚷。這應(yīng)該是目前使用最多的 ST 庫骆撇。幾乎全部使用 C 語言實(shí)現(xiàn)。但是父叙,標(biāo)準(zhǔn)外設(shè)庫也是針對某一系列芯片而言的神郊,沒有可移植性。STM32F1系列的版本停留在3.5.0趾唱,這個版本也許是大家最熟悉的版本涌乳。
標(biāo)準(zhǔn)外設(shè)庫仍然接近于寄存器操作,主要就是將一些基本的寄存器操作封裝成了 C 函數(shù)甜癞。開發(fā)者需要關(guān)注所使用的外設(shè)是在哪個總線之上夕晓,具體寄存器的配置等底層信息。雖然標(biāo)準(zhǔn)外設(shè)庫對各外設(shè)的進(jìn)行了一次封裝悠咱,而不是僅僅局限在對寄存器的封裝蒸辆。實(shí)現(xiàn)了各外設(shè)的基本操作接口。
標(biāo)準(zhǔn)外設(shè)庫的文件基本架構(gòu)并不復(fù)雜析既。下圖顯示了 STM32F10xx 標(biāo)準(zhǔn)外設(shè)庫文件的基本架構(gòu)
ST 為各系列提供的標(biāo)準(zhǔn)外設(shè)庫稍微有些區(qū)別躬贡。例如,STM32F1x 的庫和 STM32F3x 的庫在文件結(jié)構(gòu)上就有些不同眼坏,此外拂玻,在內(nèi)部的實(shí)現(xiàn)上也稍微有些區(qū)別,這個在具體使用(移植)時宰译,需要注意一下纺讲!但是,不同系列之間的差別并不是很大囤屹,而且在設(shè)計(jì)上是相同的。STM32 的標(biāo)準(zhǔn)外設(shè)庫涵蓋以下 3 個抽象級別:
? 包含位逢渔,位域和寄存器在內(nèi)的完整的寄存器地址映射
? 涵蓋所有外圍功能(具有公共API的驅(qū)動器)的例程和數(shù)據(jù)結(jié)構(gòu)的集合肋坚。
? 一組包含所有可用外設(shè)的示例,其中包含最常用的開發(fā)工具的模板項(xiàng)目肃廓。
7.1.2 HAL庫簡介
HAL是Hardware Abstraction Layer的縮寫智厌,中文名:硬件抽象層。HAL庫是ST為STM32最新推出的抽象層嵌入式軟件盲赊∠撑簦可以說HAL庫就是用來取代之前的標(biāo)準(zhǔn)外設(shè)庫的。相比標(biāo)準(zhǔn)外設(shè)庫哀蘑,STM32Cube HAL庫表現(xiàn)出更高的抽象整合水平诚卸,HAL API集中關(guān)注各外設(shè)的公共函數(shù)功能葵第,這樣便于定義一套通用的用戶友好的API函數(shù)接口,從而可以輕松實(shí)現(xiàn)從一個STM32產(chǎn)品移植到另一個不同的STM32系列產(chǎn)品合溺。HAL庫是ST未來主推的庫卒密,從前年開始ST新出的芯片已經(jīng)沒有STD庫了,比如F7系列棠赛。目前哮奇,HAL庫已經(jīng)支持STM32全線產(chǎn)品。
HAL 庫是基于一個非限制性的 BSD 許可協(xié)議(Berkeley Software Distribution)而發(fā)布的開源代碼睛约。 ST 制作的中間件堆棧(USB 主機(jī)和設(shè)備庫鼎俘,STemWin)帶有允許輕松重用的許可模式, 只要是在 ST 公司的 MCU 芯片上使用辩涝,庫中的中間件(USB 主機(jī)/設(shè)備庫,STemWin)協(xié)議棧即被允許隨便修改贸伐,并可以反復(fù)使用。至于基于其它著名的開源解決方案商的中間件(FreeRTOS膀值,F(xiàn)atFs棍丐,LwIP和PolarSSL)也都具有友好的用戶許可條款。
目前沧踏,結(jié)合HAL庫歌逢,ST對其產(chǎn)品線構(gòu)建的軟件架構(gòu)如下圖所示。
7.1.3 LL庫簡介
LL庫(Low Layer)是 ST 最近新增的庫翘狱,與 HAL 庫捆綁發(fā)布秘案,文檔也是和 HAL 庫文檔在一起的,比如:在STM32F3x 的 HAL 庫說明文檔中潦匈,ST 新增了LL庫這一章節(jié)阱高,但是在 F2x 的HAL文檔中就沒有。
LL 庫更接近硬件層茬缩,對需要復(fù)雜上層協(xié)議棧的外設(shè)不適用赤惊,直接操作寄存器。其支持所有外設(shè)凰锡。使用方法:
? 獨(dú)立使用未舟,該庫完全獨(dú)立實(shí)現(xiàn),可以完全拋開 HAL 庫掂为,只用LL庫編程完成裕膀。在使用STM32CubeMX生成項(xiàng)目時,直接選LL庫即可勇哗。如果使用了復(fù)雜的外設(shè)昼扛,例如 USB,則會調(diào)用 HAL 庫
? 混合使用欲诺,和 HAL 庫結(jié)合使用抄谐。
目前渺鹦,CubeMX 在生成項(xiàng)目時,可以選擇采用 LL 庫斯稳。
LL 庫文件的命名方式和 HAL 庫基本相同海铆。個人感覺,LL 庫就是原來的標(biāo)準(zhǔn)外設(shè)庫移植到 Cube下的新的實(shí)現(xiàn)挣惰,但是其實(shí)現(xiàn)方法更加高效卧斟、簡潔。使用 LL 庫編程和使用標(biāo)準(zhǔn)外設(shè)庫的方式基本一樣憎茂,但是確會得到比標(biāo)準(zhǔn)外設(shè)庫更高的效率珍语。
7.2 STM32Cube簡介
ST 為新的標(biāo)準(zhǔn)庫注冊了一個新商標(biāo):STMCube?。并且竖幔,ST專門為其開發(fā)了配套的桌面軟件 STMCubeMX板乙,開發(fā)者可以直接使用該軟件進(jìn)行可視化配置,大大節(jié)省開發(fā)時間拳氢。
這其中就包含了 HAL 庫和最近新增的 LL 庫募逞。如下圖:
從上圖不難看出,LL 庫和 HAL 庫兩者相互獨(dú)立馋评,只不過 LL 庫更底層放接。而且,部分 HAL 庫會調(diào)用LL庫(例如:USB驅(qū)動)留特。同樣纠脾,LL 庫也會調(diào)用 HAL 庫。
用戶可以使用 STMCubeMX 直接生成對應(yīng)芯片的整個項(xiàng)目(目前主流開發(fā)工具的項(xiàng)目基本全支持)蜕青,STMCubeMX 負(fù)責(zé)給整理各種需要的源碼文件苟蹈。如下所所示。
好了右核,關(guān)于STM32固件庫與STM32Cube產(chǎn)品介紹就到這里吧慧脱,在虎紋,筆者將帶領(lǐng)大家學(xué)習(xí)如何安裝與使用STM32Cube贺喝。
[ps]以上圖片均來自ST官方資料菱鸥。
歡迎訪問我的網(wǎng)站:
BruceOu的嗶哩嗶哩
BruceOu的主頁
BruceOu的博客
CSDN博客
簡書