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

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

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

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

[復(fù)制鏈接]

269

主題

269

帖子

1506

積分

三級會員

Rank: 3Rank: 3

積分
1506
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2024-10-29 11:08:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
關(guān)注公眾號,回復(fù)“入門資料”獲取單片機入門到高級開掛教程
開發(fā)板帶你入門,我們帶你飛

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

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


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

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

8.c語言指針用法詳解,通俗易懂超詳細(xì)!
回復(fù)

使用道具 舉報

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

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則


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