博客專欄

EEPW首頁 > 博客 > 新手學(xué)STM32的話,先學(xué)標(biāo)準(zhǔn)庫還是HAL庫?

新手學(xué)STM32的話,先學(xué)標(biāo)準(zhǔn)庫還是HAL庫?

發(fā)布人:xiaomaidashu 時(shí)間:2025-08-04 來源:工程師 發(fā)布文章

大家好,我是麥鴿,最近有網(wǎng)友提問

用STM32的話,是學(xué)標(biāo)準(zhǔn)庫還是HAL庫?

對(duì)于新手,我想說,不要和自己過不去,一開始不要搞得太難,要循序漸進(jìn)。

新手經(jīng)常會(huì)問的問題,先學(xué)51還是STM32,

或者之前有網(wǎng)友提問,寫PC軟件是學(xué)MFC還是Qt?

其實(shí)諸如此類的問題,都不能忽略一個(gè)問題就是學(xué)習(xí)曲線,是否對(duì)初學(xué)者友好。然后再看后續(xù)是否再值得深入學(xué)習(xí),是否有學(xué)習(xí)的價(jià)值。

對(duì)于單片機(jī)而言,標(biāo)準(zhǔn)庫還是HAL庫,只不過是操作硬件的中間件而已,我們不需要再去生硬地去查芯片手冊(cè),去配置寄存器,可以更快地搞定底層的配置,集中精力搞定應(yīng)用部分的開發(fā)。

image

單片機(jī)開發(fā)通常是這樣架構(gòu),或者會(huì)再跑個(gè)RTOS,一般裸機(jī)開發(fā),我們會(huì)把一些硬件模塊寫成單獨(dú)的驅(qū)動(dòng)模塊,向上提供接口給應(yīng)用層。

而這里會(huì)操作到一些芯片的資源,就可以通過調(diào)用固件庫里的接口,比如配置GPIO,硬件I2C和SPI,或者中斷和定時(shí)器,使用庫函數(shù),或者HAL庫,一條函數(shù)就夠了,自己配置寄存器可能需要十幾條語句,而且配置寄存器的話,如果有點(diǎn)粗心配置錯(cuò)了,那么中間所花費(fèi)的調(diào)試時(shí)間,也會(huì)很長。

  • 直接寄存器配置,代碼效率高,開發(fā)效率低;
  • 使用標(biāo)準(zhǔn)庫,中等代碼效率,開發(fā)效率中等;
  • 使用HAL庫,中間冗余代碼會(huì)更多,多占用一部分系統(tǒng)性能,但是開發(fā)效率高;

另外,STM32的標(biāo)準(zhǔn)庫貌似已經(jīng)不在更新了,如果作為學(xué)習(xí)的話,也是可以的,學(xué)習(xí)資源還是很多的。

如果直接學(xué)HAL庫,也沒問題,學(xué)習(xí)資源也很多。比如CUBEMX直接支持圖形化配置了。

關(guān)鍵不管學(xué)習(xí)哪一個(gè)庫,不能只停留在表面。

換個(gè)庫,或者換個(gè)硬件平臺(tái),就啥都不會(huì)了,這樣還是不行。其實(shí)通過學(xué)習(xí)標(biāo)準(zhǔn)庫,或者學(xué)習(xí)HAL庫,去熟悉STM32這個(gè)平臺(tái),例如;

通用的一些外設(shè),比如ADC,UART,I2C或者SPI等等;常用的中斷,定時(shí)器中斷,外部中斷,如何觸發(fā)方式;

去了解這些庫的封裝方式。

調(diào)試的時(shí)候,可以調(diào)入底層去看。到后面我們其實(shí)會(huì)發(fā)現(xiàn),如果換一個(gè)硬件平臺(tái),或者換一個(gè)庫,本質(zhì)還是相同的,無非是對(duì)底層的近一步封裝,多看看官方提供的Demo程序,學(xué)會(huì)自己移植,增加新的功能。

遇到硬件Bug的時(shí)候,還是要Debug到底層,對(duì)著芯片手冊(cè)去排查,到這一步,那么你的開發(fā)水平其實(shí)也算不錯(cuò)了的。實(shí)在解決不了,再找原廠的FAE去解決哈。慢慢地,開發(fā)水平就提高了。


*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。


關(guān)鍵詞: STM32 HAL庫

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉