電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 27|回復(fù): 0
收起左側(cè)

學(xué)STM32選標(biāo)準(zhǔn)庫(kù)還是HAL庫(kù)?

[復(fù)制鏈接]

262

主題

262

帖子

1263

積分

三級(jí)會(huì)員

Rank: 3Rank: 3

積分
1263
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 昨天 11:08 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |正序?yàn)g覽 |閱讀模式
關(guān)注公眾號(hào),回復(fù)“入門(mén)資料”獲取單片機(jī)入門(mén)到高級(jí)開(kāi)掛教程
開(kāi)發(fā)板帶你入門(mén),我們帶你飛

文 | 無(wú)際(微信:2777492857)
全文約1945字,閱讀大約需要 5 分鐘
我學(xué)STM32的時(shí)候,stm32cubeMX還沒(méi)推出,HAL庫(kù)還沒(méi)出來(lái),主要以標(biāo)準(zhǔn)庫(kù)為準(zhǔn)。
下面講下我學(xué)習(xí)STM32的經(jīng)歷,從陌生到應(yīng)用到項(xiàng)目大概花了2-3周,相信99%的人都能通過(guò)這種方法,快速把STM32玩起來(lái)。
我是項(xiàng)目需要,才接觸的STM32,也是基于同事的介紹,在此之前用的是NXP單片機(jī),需要手動(dòng)配置寄存器,ARM7的單片機(jī),不要說(shuō)自己去配置了,光看以前工程師配置好的代碼,頭皮都發(fā)麻。
同事說(shuō)STM32不用自己配置,價(jià)格也很有性價(jià)比,正好接了個(gè)外單,是做太陽(yáng)能熱水器的控制板,主控芯片我就選了STM32。
項(xiàng)目也比較急(其實(shí)那個(gè)老板也不急),主要是我想快點(diǎn)做完,趕緊拿錢(qián),做外單這種事,耗的時(shí)間越長(zhǎng)越虧。
現(xiàn)在這個(gè)項(xiàng)目的屎山代碼還在,2012年做的了。

   
那會(huì)浮躁啊, 一心只想快點(diǎn)把項(xiàng)目做出來(lái)交差。
所以根本沒(méi)心情像以前學(xué)51單片機(jī)那樣,把每個(gè)寄存器每個(gè)位基本都研究過(guò)一遍。
我就直接買(mǎi)了個(gè)STM32開(kāi)發(fā)板,然后項(xiàng)目用到什么外設(shè),我就先在開(kāi)發(fā)板上調(diào),開(kāi)發(fā)板沒(méi)有教程,只有每個(gè)外設(shè)的例程,我就打開(kāi)這個(gè)例程先研究下,先在開(kāi)發(fā)板上調(diào)通,然后改改參數(shù),再移植到項(xiàng)目里去調(diào)。
我剛開(kāi)始接觸固件庫(kù),和大家感受應(yīng)該是一樣的,點(diǎn)個(gè)燈而已,整個(gè)工程怎么這么龐大復(fù)雜,為什么配置這個(gè)結(jié)構(gòu)體參數(shù),就能把外設(shè)用起來(lái),這些結(jié)構(gòu)體是怎么跟外設(shè)聯(lián)系起來(lái)的?
我也嘗試過(guò)用51單片機(jī)的玩法,沿著相應(yīng)寄存器每個(gè)位的配置,奈何當(dāng)初編程基礎(chǔ)還不行,順著源代碼都找不到源頭。
如果把這些研究明白再做項(xiàng)目,那黃花菜都涼了,不管了,先把功能實(shí)現(xiàn)再說(shuō),照著開(kāi)發(fā)板配套例程,照葫蘆畫(huà)瓢的方式。
我用到的外設(shè)也就GPIO、ADC、UART、Timer、DMA,協(xié)議有SPI、IIC。
在有參考例程的基礎(chǔ)上,改改結(jié)構(gòu)體參數(shù),大概2-3周就把這些外設(shè)全跑通了。
接下來(lái)的時(shí)間就是做項(xiàng)目的業(yè)務(wù)功能了。
說(shuō)出來(lái)都有點(diǎn)尷尬,項(xiàng)目都交付了,我連STM32的時(shí)鐘樹(shù),NVIC都沒(méi)怎么搞明白,反正按照例程來(lái),這些不懂,也不影響使用。
可能就跟開(kāi)車的原理一樣,你不一定非得把車的內(nèi)部結(jié)構(gòu),發(fā)動(dòng)機(jī)原理這些整明白了,才能學(xué)會(huì)開(kāi)車。
而是會(huì)踩剎車油門(mén),會(huì)掌握方向盤(pán),就可以把車開(kāi)走了。
剩下的就是熟練度的問(wèn)題,這得多上路跑跑,各種路段都跑過(guò)了,各種停車場(chǎng)都停過(guò)了,自然就是老司機(jī)了。         
其實(shí)這也是學(xué)STM32最佳的方法,芯片內(nèi)部雖然復(fù)雜,涉及幾百個(gè)寄存器,但我們只是使用者的角色,先用起來(lái),只要把庫(kù)關(guān)鍵函數(shù),參數(shù)學(xué)明白,就可以了。
剩下的就是不斷做項(xiàng)目,把它應(yīng)用在各種領(lǐng)域,等經(jīng)驗(yàn)豐富了,再回過(guò)頭來(lái)深究,很多以前想破腦袋都想不明白的,就擴(kuò)然開(kāi)朗了。
下面聊聊先學(xué)標(biāo)準(zhǔn)庫(kù)還是HAL庫(kù)的問(wèn)題。
雖然現(xiàn)在ST對(duì)于新型號(hào),不再提供標(biāo)準(zhǔn)庫(kù)了,但這么多年了,我一直用標(biāo)準(zhǔn)庫(kù)在做產(chǎn)品,因?yàn)椴灰欢〞?huì)用到最新型號(hào),像STM32F103C8T6,用得很多。   
對(duì)于工程師來(lái)說(shuō),最忌諱的就是重復(fù)造輪子,所以這些庫(kù),我們一經(jīng)在項(xiàng)目中驗(yàn)證,就不會(huì)隨便去改,免得出問(wèn)題給自己找麻煩。
我對(duì)Cube其實(shí)沒(méi)啥好感,大概6,7年前,想嘗試下用stm32cubeMX會(huì)不會(huì)更方便,沒(méi)配置好,然后把我桌面的東西全刪光了,工作都差點(diǎn)丟了。
我覺(jué)得這是一個(gè)BUG,哪怕用戶操作再不對(duì),也不應(yīng)該刪用戶的東西。
不知道現(xiàn)在還有沒(méi)有這個(gè)問(wèn)題,反正我一直沒(méi)用過(guò),一直在用標(biāo)準(zhǔn)庫(kù)。
我覺(jué)得學(xué)標(biāo)準(zhǔn)庫(kù)還是Hal庫(kù),并不重要,庫(kù)的底層處理邏輯都是一樣的,都是通過(guò)配置寄存器使用外設(shè)。
標(biāo)準(zhǔn)庫(kù)更直觀,更接近硬件,代碼執(zhí)行效率更高。
HAL庫(kù)跨芯片兼容性更好,一些錯(cuò)誤的處理更完善。
如果為了就業(yè),可以先學(xué)標(biāo)準(zhǔn)庫(kù),如果為了做項(xiàng)目,可以直接學(xué)HAL庫(kù),開(kāi)發(fā)效率更高。
不同的庫(kù)只是代碼封裝形式不同而已,不管怎么封裝,對(duì)應(yīng)的外設(shè),都是配置那幾個(gè)參數(shù),比如GPIO有端口、引腳、速率、模式等。   
本質(zhì)你還是把編程功底打扎實(shí),因?yàn)閹?kù)里面涉及到大量的位運(yùn)算、結(jié)構(gòu)體、枚舉、指針、回調(diào)函數(shù)這些。
你把玩熟了,不管什么庫(kù),都能很快地適應(yīng)。
想提高編程功底,還是得多做項(xiàng)目,多接觸一些優(yōu)秀的代碼思維和架構(gòu),而不是反復(fù)地去看基礎(chǔ)教程。
end


下面是更多無(wú)際原創(chuàng)的個(gè)人成長(zhǎng)經(jīng)歷、行業(yè)經(jīng)驗(yàn)、技術(shù)干貨。
1.電子工程師是怎樣的成長(zhǎng)之路?10年5000字總結(jié)
2.如何快速看懂別人的代碼和思維
3.單片機(jī)開(kāi)發(fā)項(xiàng)目全局變量太多怎么管理?
4.C語(yǔ)言開(kāi)發(fā)單片機(jī)為什么大多數(shù)都采用全局變量的形式
5.單片機(jī)怎么實(shí)現(xiàn)模塊化編程?實(shí)用程度讓人發(fā)指!
6.c語(yǔ)言回調(diào)函數(shù)的使用及實(shí)際作用詳解

7.手把手教你c語(yǔ)言隊(duì)列實(shí)現(xiàn)代碼,通俗易懂超詳細(xì)!

8.c語(yǔ)言指針用法詳解,通俗易懂超詳細(xì)!

發(fā)表回復(fù)

本版積分規(guī)則

關(guān)閉

站長(zhǎng)推薦上一條 /1 下一條


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表