1. 程式人生 > >STM32之HAL庫、標準外設庫、LL庫(STM32 Embedded Software)

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

STM32 Embedded Software

  工作以來一直使用ST的STM32系列晶片,ST為開發者提供了非常方便的開發庫。到目前為止,有標準外設庫(STD庫)、HAL庫、LL庫 三種。前兩者都是常用的庫,後面的LL庫是ST最近才新增,隨HAL原始碼包一起提供,目前支援的晶片也偏少。各庫如下所示: 
庫
  其中,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庫會呼叫LL庫(例如:USB驅動)。同樣,LL庫也會呼叫HAL庫 
  使用者可以使用STMCubeMX直接生成對應晶片的整個專案(目前主流開發工具的專案基本全支援),STMCubeMX負責給整理各種需要的原始碼檔案。

注意: 
  1. 個人感覺STMCubeMX生成的專案並不夠簡潔,原始碼的組織結構也並不是很好。 
  2. STMCubeMX在生產專案時,可以選擇使用HAL庫或者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庫程式設計,最好儘量符合HAL庫程式設計的整體架構。關於HAL庫的詳細介紹,可以參考後文STM32 HAL庫詳解 及 手動移植

LL庫

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

  • 獨立使用,該庫完全獨立實現,可以完全拋開HAL庫,只用LL庫程式設計完成。在使用STM32CubeMX生成專案時,直接選LL庫即可。如果使用了複雜的外設,例如USB,則會呼叫HAL庫
  • 混合使用,和HAL庫結合使用。

  LL庫檔案的命名方式和HAL庫基本相同。個人感覺,LL庫就是原來的標準外設庫移植到Cube下的新的實現。因為使用LL庫程式設計和使用標準外設庫的方式基本一樣。

相關推薦

STM32HAL標準外設LLSTM32 Embedded Software

STM32 Embedded Software   工作以來一直使用ST的STM32系列晶片,ST為開發者提供了非常方便的開發庫。到目前為止,有標準外設庫(STD庫)、HAL庫、LL庫 三種。前兩者都是常用的庫,後面的LL庫是ST最近才新增,隨HAL原始碼包一起提供,目前支

STM32 HAL標準外設LL

轉自 http://www.stmcu.org.cn/module/forum/thread-612445-1-1.html 工作以來一直使用ST的STM32系列晶片,ST為開發者提供了非常方便的開發庫。到目前為止,有標準外設庫(STD庫)、HAL庫、LL庫 三種。前兩者都是常用的庫,

STM32 標準外設版USB驅動詳解架構+檔案+函式+使用說明+示例程式

寫在前面 目前,ST的USB驅動有兩套,一套是早期的獨立版USB驅動,官方培訓文件中稱為Legacy library,最新版為2.2.0;一套為針對其Cube系列的驅動,根據晶片不同可能有區別,具體見對應晶片的Cube驅動包,官方培訓文件中稱為Cube li

STM32 HAL詳解 及 手動移植

2018.1.19 更新其中的錯誤部分 HAL庫結構   說到STM32的HAL庫,就不得不提STM32CubeMX,其作為一個視覺化的配置工具,對於開發者來說,確實大大節省了開發時間。STM32CubeMX就是以HAL庫為基礎的,且目前僅支援HAL庫及LL

STM32學習三:下載標準外設Standard Peripherals Library

要想進行STM32程式設計,一是直接操作暫存器,這在上節有介紹,另一個辦法是使用官方提供的標準外設庫(Standard Peripherals Library )。 其實這也沒什麼好說的,按說既然是官方外設庫,應該在官網直接可以下載,可能原來是這樣的,只是我按網上提供的方法

6Maven私有和本地庫的安裝與配置Sonatype Nexus +Manven

Maven私有庫和本地庫的安裝與配置(Sonatype Nexus +Manven) 環境:JDK1.8、 CenterOS 6.5 、Sonatype Nexus 、Maven IP 192.168.159.138 root使用者操作 2、解壓 # mkdir

數據:表操作-數據類型數值類型

速度 需要 參數 double tiny value 默認 == brush 介紹 存儲引擎決定了表的類型,而表內存放的數據也要有不同的類型,每種數據類型都有自己的寬度,但寬度是可選的 mysql常用數據類型概覽 #1. 數字: 整型:tinyinit

PyTorch 生成隨機數Tensor標準分佈標準正態離散正態……)

在使用PyTorch做實驗時經常會用到生成隨機數Tensor的方法,比如: torch.rand() torch.randn() torch.normal() torch.linespace() 均勻分佈 *torch.rand(sizes, out=None) → Tensor

【無人機 學習筆記 7】 真實空速指示空速標準空速當量空速之間的關係

真實空速 真實空速(True Air Speed),又稱真空速。表示飛行器飛行時相對於周圍空氣運動的速度,其英文縮寫形式為TAS,用符號VT表示。飛行器的飛行真空速定義為飛機的重心相對於空氣氣流的運動速度投影到飛機縱軸對稱平面內的分量。飛機相對於空氣的運動速度也可等價地視為飛機不動而空氣以大小相

linux 標準輸出標準錯誤輸出以及shell小技巧

1.Linux常用的有: 1)  標準輸入 stdin  程式碼為0,使用< 或<< 2)  標準輸出 stdout 程式碼為1,使用> 或 >> ,這裡把1給省略了, 3)  標準錯誤輸出 stderr程式碼為2,使用 2> 或2

Maven私有與本地庫的安裝與配置Sonatype nexus + Maven

首先下載nexus安裝包,我這裡使用的是nexus-2.11.2-03-bundle.tar.gz(下載地址:http://www.sonatype.org/nexus/go/) 演示將會安裝在/root/tengjs目錄下 將安裝包拷貝到/root/tengjs目錄下

python經常使用的十進制16進制字符串字節串之間的轉換長期更新帖

int oct pac 轉字符串 ont example 字節 short 試用 進行協議解析時。總是會遇到各種各樣的數據轉換的問題,從二進制到十進制,從字節串到整數等等 廢話不多上。直接上樣例 整數之間的進制轉換: 10進制轉16進制: hex(16) ==

十進制十六進制二進制之間的轉換僅作記錄

-- 比較 其中 com 類型 次數 doc 然而 如果 二進制和十六進制的互相轉換比較重要。不過這二者的轉換卻不用計算,每個C,C++程序員都能做到看見二進制數,直接就能轉換為十六進制數,反之亦然。 我們也一樣,只要學完這一小節,就能做到。 首先我們來看一個二進制數:11

3邏輯部件構成及運作過程後續補充詳細

nova com schedule web ova put -s vol -c 邏輯部件主要有: web-ui:訪問頁面 nova-api nova-scheduler -----computer-scheduler -----volumn-schedu

以前寫的兩本書《安全路:Web滲透技術及實戰案例解析第2版》和《黑客攻防實戰加密與解密》

Web滲透技術及實戰案例解析 黑客攻防實戰加密與解密 應一些朋友的要求,我重新將書封面和購買地址發一下說明一下:www.antian365.com原來域名轉移到國外去了。現在國家對境外域名在國內訪問必須實名制,進行備份啥的,情況你懂的。最近正在制作《黑客攻防實戰加密與解密》的視頻課程,對黑客攻防過程遇

FineBI學習系列FineBI官網提供的SAP數據集圖文詳解

wiki blank 插件後 jdk1.5 jvm 現在 src strong blog 不多說,直接上幹貨!   這是來自FineBI官網提供的幫助文檔 http://help.finebi.com/http://help.finebi.com/doc

Python旅.第四章.模塊與包.總結未完待遇

standard 後綴 att 擔心 lse 綁定 做的 業務 搜索 一、模塊 模塊: 一系列功能的集合體,在python中一個py文件就是一個模塊,模塊名就是py文件的文件名; 模塊的好處: 1.減少重復的代碼 2.拿來主義 定義模塊: 就是創建一個py文件;

C數組指針和指針數組二十九

C語言 數組指針 指針數組 我們今天來看下傳說中的指針數組和數組指針。在 C 語言中,數組都有自己特定的類型。那麽數組的類型是怎樣的呢?它是由元素類型和數組大小共同決定的。比如 int array[5] 的類型就是 int[5]。 在 C 語言中我們可以通過 type

C數組參數和指針參數三十一

C語言 數組參數 指針參數 我們在前面講了在 C 語言中,數組參數會退化為指針。那麽這是為什麽呢?在 C 語言中只會以值拷貝的方式傳遞參數,當向函數傳遞數組時,不是將整個數組拷貝一份傳入函數而是將數組名看做常量指針傳數組首元素地址。 那麽當初在設立 C 語言時,主要是

03Swagger2和Springmvc整合詳細記錄爬坑記錄

component 效果 ges context tex ron 問題 package amp 時間 內容 備註 2018年6月18日 基本使用 spirngmvc整合swagger2 開始之前這個系列博文基本是,在項目的使用中一些模塊的內容記錄,但是