(資料圖)
我們在進(jìn)行STM32開發(fā)的時候,使用寄存器進(jìn)行開發(fā)的終究是少數(shù),大多數(shù)人還是習(xí)慣用庫函數(shù)進(jìn)行開發(fā)。到目前為止,有標(biāo)準(zhǔn)外設(shè)庫、HAL庫、LL庫 三種。本文將分別介紹以下三種庫,便于大家區(qū)分。
標(biāo)準(zhǔn)庫(Standard Peripheral Library)是STMicroelectronics提供的最基本的庫。它提供了對STM32微控制器的底層寄存器和外設(shè)的直接訪問。標(biāo)準(zhǔn)庫的設(shè)計目標(biāo)是提供高度靈活性和低層次的硬件控制,以滿足對性能和資源的嚴(yán)格要求。使用標(biāo)準(zhǔn)庫,開發(fā)人員可以直接操作寄存器來配置和控制微控制器的功能,但需要手動編寫大量的底層代碼。標(biāo)準(zhǔn)庫適用于對性能要求較高的應(yīng)用和對代碼大小和效率有嚴(yán)格要求的項目。
HAL庫(Hardware Abstraction Layer)是STMicroelectronics為了提供更高級別的抽象和簡化開發(fā)而引入的庫。HAL庫基于標(biāo)準(zhǔn)庫,并提供了一組API函數(shù),將底層硬件操作抽象為高級函數(shù)調(diào)用。這樣,開發(fā)人員可以使用更高級別的API函數(shù)來進(jìn)行配置和控制微控制器的功能,而不需要直接操作底層寄存器。HAL庫提供了一種更易用和可移植的編程模型,并減少了編寫底層代碼的工作量。它還支持多種開發(fā)板和外設(shè),提供了一致的接口,簡化了代碼移植和復(fù)用。HAL庫適用于大多數(shù)應(yīng)用程序,尤其是中等復(fù)雜性的項目。
LL庫(Low-Level Library)是STMicroelectronics在HAL庫的基礎(chǔ)上提供的更低級別的庫。LL庫提供了對底層寄存器和外設(shè)的更直接的訪問,并提供了一組低級別的API函數(shù)。LL庫保留了更多的硬件細(xì)節(jié),為開發(fā)人員提供了更高級別的靈活性和控制。使用LL庫,開發(fā)人員可以直接編寫更底層的代碼,實現(xiàn)對微控制器和外設(shè)的精細(xì)控制。LL庫適用于對性能和資源要求極高,以及對底層硬件控制有特殊需求的應(yīng)用。
在這三種庫中,出現(xiàn)的先后順序是標(biāo)準(zhǔn)庫—HAL庫—LL庫,所以大家如果在網(wǎng)上 看到LL庫編寫的程序,大概是不久完成的,看到標(biāo)準(zhǔn)庫,可能就是稍早一些時候的了。
這幾種庫的比較官方介紹如下圖:
HAL庫雖然移植性最好,但問題也最多。比如在串口收發(fā)的時候,由于HAL庫中的中斷接收和串口發(fā)送使用的互斥鎖是一個,所以會造成好好的全雙工變成了半雙工。而標(biāo)準(zhǔn)庫和LL庫都沒有這個問題。諸如此類的問題還有很多,但HAL庫確實開發(fā)效率最高。具體使用效果因人而異吧。
ST提供的標(biāo)準(zhǔn)庫、HAL庫和LL庫各有其優(yōu)勢和特點,如果是移植很久前的項目,大概率要使用標(biāo)準(zhǔn)庫。如果新開發(fā)項目,使用STM32CubeMX就必須使用HAL庫和LL庫了。個人建議,現(xiàn)在最好是使用HAL庫+LL庫進(jìn)行開發(fā),因為這是官方主推的庫,并且CubeMX確實是個很好用的工具,而里面只有HAL庫和LL庫。HAL庫開發(fā)迅速,LL庫開發(fā)穩(wěn)定,大家可以結(jié)合著用。
標(biāo)簽: