天天看點

《嵌入式-STM32開發指南》第一部分 入門篇 - 第7章 STM32固件庫與STM32Cube産品介紹

自STM32标準庫出道以來,備受廣大工程師和公司的喜愛,但是,從2013年開始,ST逐漸停止了對标準外設庫的更新和維護。目前,ST全力推崇HAL庫,STM32Cube就是與HAL庫配合使用圖形化程式設計官方IDE。

7.1 STM32庫簡介

到目前為止,ST有标準外設庫(SPL 庫)、HAL 庫、LL 庫 三種。前兩者都是常用的庫,後面的 LL 庫是 ST 最近才添加,随 HAL 源碼包一起提供,目前支援的晶片也偏少。各庫如下所示:

《嵌入式-STM32開發指南》第一部分 入門篇 - 第7章 STM32固件庫與STM32Cube産品介紹

圖1 标準庫、HAL 庫、LL 庫對比

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

《嵌入式-STM32開發指南》第一部分 入門篇 - 第7章 STM32固件庫與STM32Cube産品介紹

圖2

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

《嵌入式-STM32開發指南》第一部分 入門篇 - 第7章 STM32固件庫與STM32Cube産品介紹

圖3

ST 中文官網上有一篇《STM32庫函數性能對比》的文章,其中對比了各種庫的性能如下:

《嵌入式-STM32開發指南》第一部分 入門篇 - 第7章 STM32固件庫與STM32Cube産品介紹

圖4 ST各庫性能對比

7.1.1标準外設庫簡介

标準外設庫(Standard Peripherals Library)是對 STM32 晶片的一個完整的封裝,包括所有标準器件外設的器件驅動器。這應該是目前使用最多的 ST 庫。幾乎全部使用 C 語言實作。但是,标準外設庫也是針對某一系列晶片而言的,沒有可移植性。STM32F1系列的版本停留在3.5.0,這個版本也許是大家最熟悉的版本。

《嵌入式-STM32開發指南》第一部分 入門篇 - 第7章 STM32固件庫與STM32Cube産品介紹

圖5标準外設庫支援程度

标準外設庫仍然接近于寄存器操作,主要就是将一些基本的寄存器操作封裝成了 C 函數。開發者需要關注所使用的外設是在哪個總線之上,具體寄存器的配置等底層資訊。雖然标準外設庫對各外設的進行了一次封裝,而不是僅僅局限在對寄存器的封裝。實作了各外設的基本操作接口。

标準外設庫的檔案基本架構并不複雜。下圖顯示了 STM32F10xx 标準外設庫檔案的基本架構

《嵌入式-STM32開發指南》第一部分 入門篇 - 第7章 STM32固件庫與STM32Cube産品介紹

圖6

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

 包含位,位域和寄存器在内的完整的寄存器位址映射

 涵蓋所有外圍功能(具有公共API的驅動器)的例程和資料結構的集合。

 一組包含所有可用外設的示例,其中包含最常用的開發工具的模闆項目。

7.1.2 HAL庫簡介

HAL是Hardware Abstraction Layer的縮寫,中文名:硬體抽象層。HAL庫是ST為STM32最新推出的抽象層嵌入式軟體。可以說HAL庫就是用來取代之前的标準外設庫的。相比标準外設庫,STM32Cube HAL庫表現出更高的抽象整合水準,HAL API集中關注各外設的公共函數功能,這樣便于定義一套通用的使用者友好的API函數接口,進而可以輕松實作從一個STM32産品移植到另一個不同的STM32系列産品。HAL庫是ST未來主推的庫,從前年開始ST新出的晶片已經沒有STD庫了,比如F7系列。目前,HAL庫已經支援STM32全線産品。

HAL 庫是基于一個非限制性的 BSD 許可協定(Berkeley Software Distribution)而釋出的開源代碼。 ST 制作的中間件堆棧(USB 主機和裝置庫,STemWin)帶有允許輕松重用的許可模式, 隻要是在 ST 公司的 MCU 晶片上使用,庫中的中間件(USB 主機/裝置庫,STemWin)協定棧即被允許随便修改,并可以反複使用。至于基于其它著名的開源解決方案商的中間件(FreeRTOS,FatFs,LwIP和PolarSSL)也都具有友好的使用者許可條款。

《嵌入式-STM32開發指南》第一部分 入門篇 - 第7章 STM32固件庫與STM32Cube産品介紹

圖7 HAL庫支援的中間件

目前,結合HAL庫,ST對其産品線建構的軟體架構如下圖所示。

《嵌入式-STM32開發指南》第一部分 入門篇 - 第7章 STM32固件庫與STM32Cube産品介紹

圖8 HAL庫軟體架構

7.1.3 LL庫簡介

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

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

 獨立使用,該庫完全獨立實作,可以完全抛開 HAL 庫,隻用LL庫程式設計完成。在使用STM32CubeMX生成項目時,直接選LL庫即可。如果使用了複雜的外設,例如 USB,則會調用 HAL 庫

 混合使用,和 HAL 庫結合使用。

目前,CubeMX 在生成項目時,可以選擇采用 LL 庫。

LL 庫檔案的命名方式和 HAL 庫基本相同。個人感覺,LL 庫就是原來的标準外設庫移植到 Cube下的新的實作,但是其實作方法更加高效、簡潔。使用 LL 庫程式設計和使用标準外設庫的方式基本一樣,但是确會得到比标準外設庫更高的效率。

7.2 STM32Cube産品簡介

STM32Cube 産品是一個軟體系列,目前有四個STM32CubeMX、STM32CubeIDE、STM32CubeProgrammer和STM32CubeMonitor,包括,幾乎涵蓋了ST系列的所有工具,ST還為此注冊了一個新商标:STMCube™。

《嵌入式-STM32開發指南》第一部分 入門篇 - 第7章 STM32固件庫與STM32Cube産品介紹

圖9 STM32Cube

使用以上四個工具進行開發,基本就能解決開發過程的所有問題,下圖是ST提供的标準軟體開發流程。

《嵌入式-STM32開發指南》第一部分 入門篇 - 第7章 STM32固件庫與STM32Cube産品介紹

圖10 ST标準開發流程

7.2.1 STM32CubeMX簡介

ST專門為其開發了配套的桌面軟體 STMCubeMX,也就是初始化代碼生成器,開發者可以直接使用該軟體進行可視化配置,大大節省開發時間。

《嵌入式-STM32開發指南》第一部分 入門篇 - 第7章 STM32固件庫與STM32Cube産品介紹

圖11 STM32CubeMX

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

《嵌入式-STM32開發指南》第一部分 入門篇 - 第7章 STM32固件庫與STM32Cube産品介紹

圖12

從上圖不難看出,LL 庫和 HAL 庫兩者互相獨立,隻不過 LL 庫更底層。而且,部分 HAL 庫會調用LL庫(例如:USB驅動)。同樣,LL 庫也會調用 HAL 庫。

使用者可以使用 STMCubeMX 直接生成對應晶片的整個項目(目前主流開發工具的項目基本全支援),STMCubeMX 負責給整理各種需要的源碼檔案。如下所所示。

《嵌入式-STM32開發指南》第一部分 入門篇 - 第7章 STM32固件庫與STM32Cube産品介紹

圖13 STM32CubeMX生成代碼過程

STM32CubeMX下載下傳位址:

​​英文​​

​​中文​​

7.2.2 STM32CubeIDE簡介

STM32CubeIDE是一個多功能的內建開發工具,內建了TrueSTUDIO和STM32CubeMX,它是STM32Cube軟體生态系統的一部分。

《嵌入式-STM32開發指南》第一部分 入門篇 - 第7章 STM32固件庫與STM32Cube産品介紹

圖14 STM32CubeIDE

STM32CubeIDE是一個先進的C/C++開發平台,具有STM32微控制器的IP配置,代碼生成,代碼編譯和調試功能。它基于ECLIPSE™/ CDT架構和用于開發的GCC工具鍊,以及用于調試的GDB。它允許內建數百個現有插件,完成ECLIPSE™IDE的功能。

STM32CubeIDE內建了STM32CubeMX,基于基于Eclipse™/CDT,支援ECLIPSE的™插件,GNU C / C ++中ARM®工具鍊和GDB調試器,支援ST-LINK和J-Link調試探針,跨平台,支援Windows,Linux和MacOS作業系統。

[ps] 我想大部分嵌入式愛好者使用的是MDK和IAR做開發,大部分應該都使用的是盜版的。 除了這些盜版IDE內建開發環境,其實我們還有另外一種選擇,使用Linux開發,在Linux開發是基于GCC的,使用GCC就意味着要寫Makefile,這一連串的新問題又來了,為了解決盜版問題,ST和NXP都推出了基于Eclipse+GCC的內建開發環境。 NXP的叫MCUXpresso IDE。 ST的就是STM32Cube IDE。STM32Cube IDE就是內建了STM32CubeMX,可以一站式開發,非常友善,而且是免費的,是以你是ST的愛好者,就用STM32Cube IDE開發。

7.2.3 STM32CubeProgrammer簡介

STM32CubeProgrammer 簡稱 STM32CubeProg,是一個适用于 STM32 系列産品的跨平台、多合一的程式燒寫工具。

 “跨平台” 展現在支援 Windows、macOS 和 Linux 作業系統,是以軟體運作時需要 Java 環境。

 “多合一” 展現在支援通過 USB、ST-LINK、UART、OTA 多種方式來燒寫固件。

《嵌入式-STM32開發指南》第一部分 入門篇 - 第7章 STM32固件庫與STM32Cube産品介紹

圖15 STM32CubeProgrammer

STM32CubeProgrammer下載下傳位址:

​​英文​​

​​中文​​

7.2.4 STM32CubeMonitor簡介

STM32CubeMonitor是ST近期推出一款實時讀取和顯示變量來幫助調試和診斷STM32應用程式的工具。使用者隻要用滑鼠拖放項目和功能,即可建立自定義的儀表闆,快速添加儀表、柱狀圖、點線圖等小工具也無需程式設計。借助Node-RED開放社群,STM32CubeMonitor可為客戶提供豐富的擴充功能,靈活處理各種類型的應用問題。

《嵌入式-STM32開發指南》第一部分 入門篇 - 第7章 STM32固件庫與STM32Cube産品介紹

圖16 STM32CubeMonitor

STM32CubeMonitor還支援遠端資料采集,使用者可以通過網絡遠端監視應用程式,同時測試多個裝置。

哪裡有需求,那你就有産品,STM32CubeMonitor推出也有其目的,這裡舉個例子,我門在調試慣性導航時,需要實時檢視慣性導航輸出資料,我門通常使用序列槽輸出到PC,然後在PC上寫一個上位機進行調試,你還可以利用JLink的RTT功能把資料輸出到PC,進而避免額外配置和占用STM32的一個序列槽。上面提到的方法都有各自的局限性,使用序列槽通用性很好但是序列槽傳輸資料會占用CPU資源,編寫上位機繪制曲線往往也耗時耗力,而商業IDE和JLink嚴格意義上說并不是免費的,那麼有沒有免費而且好用的選擇呢?這也就是STM32CubeMonitor存在的意義。

STM32CubeMonitor下載下傳位址:

​​英文​​

​​中文​​

好了,關于STM32固件庫與STM32Cube産品介紹就到這裡吧,在後面,筆者将帶領大家學習如何安裝與使用STM32Cube系列産品。敬請期待!

[ps]以上圖檔均來自ST官方資料。

歡迎通路我的網站:

​​BruceOu的哔哩哔哩​​

​​BruceOu的首頁​​

​​BruceOu的部落格​​​

接收更多精彩文章及資源推送,請訂閱我的微信公衆号: