STM32 HAL庫、標準外設庫、LL庫(STM32 Embedded Software)

STM32 Embedded Software

  工作以來一直使用ST的STM32系列芯片,ST爲開發者提供了非常方便的開發庫。到目前爲止,有標準外設庫(STD庫)、HAL庫、LL庫 三種。前兩者都是常用的庫,後面的LL庫是ST最近才添加,目前支持的芯片也偏少。各庫如下所示: 

庫 

  其中,STD庫和HAL庫兩者相互獨立,互不兼容。幾種庫的比較如下: 

庫比較 

  目前幾種庫對不同芯片的支持情況如下: 

支持情況 

上圖中,LL庫目前有部分芯片不支持,官方計劃2017年逐步完善。

STM32Snippets

  它是代碼示例的集合,直接基於STM32外設寄存器,可在文檔和軟件包中使用。由於處在最底層,因此需要開發者直接操作外設寄存器,對開發者要求比較高,通常針對於對彙編程序比較瞭解的資深嵌入式工程師!

注意: 

1. 目前只在STM32F0和L0系列中有提供 

2. 代碼在不同ST芯片間沒有可移植性

標準外設庫(Standard Peripheral Libraries)

  標準外設庫(Standard Peripherals Library)是對STM32芯片的一個完整的封裝,包括所有標準器件外設的器件驅動器。這應該是目前使用最多的ST庫。幾乎全部使用C語言實現。但是,標準外設庫也是針對某一系列芯片而言的,沒有可移植性。 

  相對於HAL庫,標準外設庫仍然接近於寄存器操作,主要就是將一些基本的寄存器操作封裝成了C函數。開發者需要關注所使用的外設是在哪個總線之上,具體寄存器的配置等底層信息。

注意:不支持從STM32 L0,L4和F7開始的之後的STM32系列芯片

  ST爲各系列提供的標準外設庫稍微有些區別。例如,STM32F1x的庫和STM32F3x的庫在文件結構上就有些不同,此外,在內部的實現上也稍微有些區別,這個在具體使用(移植)時,需要注意一下!但是,不同系列之間的差別並不是很大,而且在設計上是相同的。STM32的標準外設庫涵蓋以下3個抽象級別:

    • 包含位,位域和寄存器在內的完整的寄存器地址映射
    • 涵蓋所有外圍功能(具有公共API的驅動器)的例程和數據結構的集合。
    • 一組包含所有可用外設的示例,其中包含最常用的開發工具的模板項目。

  關於更詳細的信息,可以參考ST的官方文檔,文檔中對於標準外設庫函數命名、文件結構等都有詳細的說明。

STM32Cube

  ST爲新的標準庫註冊了一個新商標:STMCube™。並且,ST專門爲其開發了配套的桌面軟件STMCubeMX,開發者可以直接使用該軟件進行可視化配置,大大節省開發時間。 

  這其中就包含了HAL庫和最近新增的LL庫。如下圖: 

STM32Cube 

  從上圖不難看出,LL庫和HAL庫兩者相互獨立,只不過LL庫更底層。

HAL庫

  HAL是Hardware Abstraction Layer的縮寫,中文名:硬件抽象層。HAL庫是ST爲STM32最新推出的抽象層嵌入式軟件,可以更好的確保跨STM32產品的最大可移植性。該庫提供了一整套一致的中間件組件,如RTOS,USB,TCP / IP和圖形等。

  HAL庫是基於一個非限制性的BSD許可協議(Berkeley Software Distribution)而發佈的開源代碼。 ST製作的中間件堆棧(USB主機和設備庫,STemWin)帶有允許輕鬆重用的許可模式, 只要是在ST公司的MCU 芯片上使用,庫中的中間件(USB 主機/設備庫,STemWin)協議棧即被允許隨便修改,並可以反覆使用。至於基於其它著名的開源解決方案商的中間件(FreeRTOS,FatFs,LwIP和PolarSSL)也都具有友好的用戶許可條款。

  可以說HAL庫就是用來取代之前的標準外設庫的。相比標準外設庫,STM32Cube HAL庫表現出更高的抽象整合水平,HAL API集中關注各外設的公共函數功能,這樣便於定義一套通用的用戶友好的API函數接口,從而可以輕鬆實現從一個STM32產品移植到另一個不同的STM32系列產品。HAL庫是ST未來主推的庫,從前年開始ST新出的芯片已經沒有STD庫了,比如F7系列。目前,HAL庫已經支持STM32全線產品。

  關於HAL庫的詳細介紹,可以參考後文 STM32 HAL庫詳解 及 手動移植

LL庫

  LL庫(Low Layer)是ST最近新增的庫,與HAL捆綁發佈,文檔也是和HAL文檔在一起的,比如:在STM32F3x的HAL庫說明文檔中,ST新增了LL庫這一章節,但是在F2x的HAL文檔中就沒有。 

  LL庫更接近硬件層,對需要複雜上層協議棧的外設不適用,直接操作寄存器。其支持所有外設。使用方法:

STM32 Embedded Software

  工作以來一直使用ST的STM32系列芯片,ST爲開發者提供了非常方便的開發庫。到目前爲止,有標準外設庫(STD庫)、HAL庫、LL庫 三種。前兩者都是常用的庫,後面的LL庫是ST最近才添加,目前支持的芯片也偏少。各庫如下所示:

  其中,STD庫和HAL庫兩者相互獨立,互不兼容。幾種庫的比較如下:
庫比較
  目前幾種庫對不同芯片的支持情況如下:
支持情況
上圖中,LL庫目前有部分芯片不支持,官方計劃2017年逐步完善。

STM32Snippets

  它是代碼示例的集合,直接基於STM32外設寄存器,可在文檔和軟件包中使用。由於處在最底層,因此需要開發者直接操作外設寄存器,對開發者要求比較高,通常針對於對彙編程序比較瞭解的資深嵌入式工程師!

注意:
1. 目前只在STM32F0和L0系列中有提供
2. 代碼在不同ST芯片間沒有可移植性
標準外設庫(Standard Peripheral Libraries)

  標準外設庫(Standard Peripherals Library)是對STM32芯片的一個完整的封裝,包括所有標準器件外設的器件驅動器。這應該是目前使用最多的ST庫。幾乎全部使用C語言實現。但是,標準外設庫也是針對某一系列芯片而言的,沒有可移植性。
  相對於HAL庫,標準外設庫仍然接近於寄存器操作,主要就是將一些基本的寄存器操作封裝成了C函數。開發者需要關注所使用的外設是在哪個總線之上,具體寄存器的配置等底層信息。

注意:不支持從STM32 L0,L4和F7開始的之後的STM32系列芯片
  ST爲各系列提供的標準外設庫稍微有些區別。例如,STM32F1x的庫和STM32F3x的庫在文件結構上就有些不同,此外,在內部的實現上也稍微有些區別,這個在具體使用(移植)時,需要注意一下!但是,不同系列之間的差別並不是很大,而且在設計上是相同的。STM32的標準外設庫涵蓋以下3個抽象級別:

包含位,位域和寄存器在內的完整的寄存器地址映射
涵蓋所有外圍功能(具有公共API的驅動器)的例程和數據結構的集合。
一組包含所有可用外設的示例,其中包含最常用的開發工具的模板項目。
  關於更詳細的信息,可以參考ST的官方文檔,文檔中對於標準外設庫函數命名、文件結構等都有詳細的說明。

STM32Cube

  ST爲新的標準庫註冊了一個新商標:STMCube™。並且,ST專門爲其開發了配套的桌面軟件STMCubeMX,開發者可以直接使用該軟件進行可視化配置,大大節省開發時間。
  這其中就包含了HAL庫和最近新增的LL庫。如下圖:
STM32Cube
  從上圖不難看出,LL庫和HAL庫兩者相互獨立,只不過LL庫更底層。

HAL庫

  HAL是Hardware Abstraction Layer的縮寫,中文名:硬件抽象層。HAL庫是ST爲STM32最新推出的抽象層嵌入式軟件,可以更好的確保跨STM32產品的最大可移植性。該庫提供了一整套一致的中間件組件,如RTOS,USB,TCP / IP和圖形等。

  HAL庫是基於一個非限制性的BSD許可協議(Berkeley Software Distribution)而發佈的開源代碼。 ST製作的中間件堆棧(USB主機和設備庫,STemWin)帶有允許輕鬆重用的許可模式, 只要是在ST公司的MCU 芯片上使用,庫中的中間件(USB 主機/設備庫,STemWin)協議棧即被允許隨便修改,並可以反覆使用。至於基於其它著名的開源解決方案商的中間件(FreeRTOS,FatFs,LwIP和PolarSSL)也都具有友好的用戶許可條款。

  可以說HAL庫就是用來取代之前的標準外設庫的。相比標準外設庫,STM32Cube HAL庫表現出更高的抽象整合水平,HAL API集中關注各外設的公共函數功能,這樣便於定義一套通用的用戶友好的API函數接口,從而可以輕鬆實現從一個STM32產品移植到另一個不同的STM32系列產品。HAL庫是ST未來主推的庫,從前年開始ST新出的芯片已經沒有STD庫了,比如F7系列。目前,HAL庫已經支持STM32全線產品。

  關於HAL庫的詳細介紹,可以參考後文 STM32 HAL庫詳解 及 手動移植

LL庫

  LL庫(Low Layer)是ST最近新增的庫,與HAL捆綁發佈,文檔也是和HAL文檔在一起的,比如:在STM32F3x的HAL庫說明文檔中,ST新增了LL庫這一章節,但是在F2x的HAL文檔中就沒有。
  LL庫更接近硬件層,對需要複雜上層協議棧的外設不適用,直接操作寄存器。其支持所有外設。使用方法:

獨立使用,該庫完全獨立實現,可以完全拋開HAL庫,只用LL庫編程完成。
混合使用,和HAL庫結合使用。
  LL庫文件的命名方式和HAL庫基本相同。LL庫也是偶然間發現的,還沒有使用過,後面先試試在完善!

    • 獨立使用,該庫完全獨立實現,可以完全拋開HAL庫,只用LL庫編程完成。
    • 混合使用,和HAL庫結合使用。

  LL庫文件的命名方式和HAL庫基本相同。LL庫也是偶然間發現的,還沒有使用過,後面先試試在完善!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章