大家好,我是麥鴿,最近有網(wǎng)友提問
用STM32的話,是學(xué)標(biāo)準(zhǔn)庫還是HAL庫?
對于新手,我想說,不要和自己過不去,一開始不要搞得太難,要循序漸進(jìn)。
新手經(jīng)常會(huì)問的問題,先學(xué)51還是STM32,
或者之前有網(wǎng)友提問,寫PC軟件是學(xué)MFC還是Qt?
其實(shí)諸如此類的問題,都不能忽略一個(gè)問題就是學(xué)習(xí)曲線,是否對初學(xué)者友好。然后再看后續(xù)是否再值得深入學(xué)習(xí),是否有學(xué)習(xí)的價(jià)值。
對于單片機(jī)而言,標(biāo)準(zhǔn)庫還是HAL庫,只不過是操作硬件的中間件而已,我們不需要再去生硬地去查芯片手冊,去配置寄存器,可以更快地搞定底層的配置,集中精力搞定應(yīng)用部分的開發(fā)。
單片機(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ì)還是相同的,無非是對底層的近一步封裝,多看看官方提供的Demo程序,學(xué)會(huì)自己移植,增加新的功能。
遇到硬件Bug的時(shí)候,還是要Debug到底層,對著芯片手冊去排查,到這一步,那么你的開發(fā)水平其實(shí)也算不錯(cuò)了的。實(shí)在解決不了,再找原廠的FAE去解決哈。慢慢地,開發(fā)水平就提高了。