這是一位讀者問的問題,我覺得很多人應(yīng)該都有這種疑惑,所以特地寫篇文章分享給大家。
一、標(biāo)準(zhǔn)外設(shè)庫(kù)停更了
很多學(xué)習(xí)STM32的朋友都比較依賴之前的標(biāo)準(zhǔn)外設(shè)庫(kù)(StdPeriph_Lib),我想告訴大家一個(gè)事實(shí),那就是標(biāo)準(zhǔn)外設(shè)庫(kù)已經(jīng)停更很久了。
支持標(biāo)準(zhǔn)外設(shè)庫(kù)的STM32,只有相對(duì)較老的系列:F0、 F1、F2、F3、F4、L1.
我特地看了下,STM32標(biāo)準(zhǔn)外設(shè)庫(kù)最后一次更新時(shí)間是2016年11月的F4系列。
標(biāo)準(zhǔn)外設(shè)庫(kù)地址:
https://www.st.com/en/embedded-software/stm32-standard-peripheral-libraries.html
這后面出來的L0、 L4、 L5、 F7、 H7、 G0、 G4等都沒有標(biāo)準(zhǔn)外設(shè)庫(kù)了。
所以,使用STM32CubeHAL將成為今后的的主流。這里就出來了一個(gè)問題:該使用HAL,還是LL開發(fā)呢?
二者能共同共同開發(fā)嗎?
拓展文章:
關(guān)于STM32的四類嵌入式軟件庫(kù)
STM32Cube LL能高效的原因
二、HAL和LL庫(kù)能共同使用嗎?
這個(gè)問題的答案是:不建議共同使用。
當(dāng)然,這個(gè)問題還要分情況:相同外設(shè)和不同外設(shè)之間共同使用HAL和LL庫(kù)。
1.不同外設(shè)混用HAL和LL庫(kù)
這里說的不同外設(shè)混用HAL和LL庫(kù)針對(duì)的不同外設(shè)。比如:UART使用HAL庫(kù),SPI使用LL庫(kù)。
這種情況下,一般來說:沒問題。
因?yàn)楣俜讲还苁菑馁Y料,還是從STM32CubeMX工具配置都沒有反對(duì)這種做法。
這雖然沒有明確說不允許這樣操作,但實(shí)際項(xiàng)目不建議這種方式。
至于原因,相信不用我說,有項(xiàng)目經(jīng)驗(yàn)的朋友都明白。這樣做不利于代碼移植,管理等工作。
2.相同外設(shè)混用HAL和LL庫(kù)
這里才是本文重點(diǎn),這種情況,官方其實(shí)也是建議:不允許。
這樣混用,會(huì)存在一系列問題:底層沖突、結(jié)構(gòu)混亂、管理不方便等。
LL庫(kù)驅(qū)動(dòng)獨(dú)立,HAL包含驅(qū)動(dòng)包
拿STM32F4的UART傳輸函數(shù)來說,LL庫(kù)的位于stm32f4xx_ll_usart.h:
而HAL定義于stm32f4xx_hal_uart.c:
從這里可以看得出來,LL只需包含頭文件即可,HAL要包含bsp包。
假如使用LL庫(kù)的工程,想使用HAL庫(kù),需添加bsp包到工程。
HAL句柄
對(duì)于LL而言,使用HAL庫(kù),會(huì)多一個(gè)句柄,比如UART1:
UART_HandleTypeDef huart1;
如果LL庫(kù)的工程,直接調(diào)用HAL接口是不行的,缺少句柄。
中斷請(qǐng)求處理
HAL和LL的中斷請(qǐng)求IRQ方式其實(shí)是不一樣的,混用之后很容易出錯(cuò)。
這里簡(jiǎn)單舉例說這些,深入理解底層的朋友應(yīng)該知道,還有許多地方也是不建議混用。
當(dāng)然,不是絕對(duì)的(不能混用),我想說:萬不得已,慎用。
-
STM32
+關(guān)注
關(guān)注
2295文章
11032瀏覽量
365228 -
BSP
+關(guān)注
關(guān)注
1文章
94瀏覽量
26972 -
外設(shè)
+關(guān)注
關(guān)注
0文章
42瀏覽量
11925
發(fā)布評(píng)論請(qǐng)先 登錄
基于STM32 HAL庫(kù)與標(biāo)準(zhǔn)庫(kù)的esp8266接入機(jī)智云方案(二)

STM32開發(fā)入門進(jìn)階必備!《STM32嵌入式系統(tǒng)開發(fā)—基于STM32CubeMX和HAL庫(kù)》新書發(fā)布!

HAL庫(kù)在Arduino平臺(tái)上的使用
HAL庫(kù)和標(biāo)準(zhǔn)庫(kù)的區(qū)別 HAL庫(kù)與CMSIS的關(guān)系
HAL庫(kù)的函數(shù)調(diào)用示例
HAL庫(kù)在STM32開發(fā)中的重要性
如何快速入門HAL庫(kù)編程 HAL庫(kù)與裸機(jī)編程的比較
HAL庫(kù)在嵌入式系統(tǒng)中的應(yīng)用
ADS1299與STM32f407通過SPI進(jìn)行數(shù)據(jù)傳輸?shù)臅r(shí)候,可以直接使用HAL庫(kù)中的HAL_SPI_Receive函數(shù)進(jìn)行數(shù)據(jù)傳輸嗎?
第12章-ADC采集電壓和顯示 基于STM32的ADC—電壓采集(詳細(xì)講解+HAL庫(kù))

stm32H7 HAL庫(kù)中存在的bug
課程上線 | STM32單片機(jī)入門教程(1)基于HAL庫(kù)的多核心開發(fā)(F1/F4/G0/U5)

評(píng)論