關注公眾號,回復“入門資料”獲取單片機入門到高級開掛教程
?開發板帶你入門,我們帶你飛
文 |?無際(微信:2777492857)
全文約1945字,閱讀大約需要?5?分鐘
我學STM32的時候,stm32cubeMX還沒推出,HAL庫還沒出來,主要以標準庫為準。
下面講下我學習STM32的經歷,從陌生到應用到項目大概花了2-3周,相信99%的人都能通過這種方法,快速把STM32玩起來。
我是項目需要,才接觸的STM32,也是基于同事的介紹,在此之前用的是NXP單片機,需要手動配置寄存器,ARM7的單片機,不要說自己去配置了,光看以前工程師配置好的代碼,頭皮都發麻。
同事說STM32不用自己配置,價格也很有性價比,正好接了個外單,是做太陽能熱水器的控制板,主控芯片我就選了STM32。
項目也比較急(其實那個老板也不急),主要是我想快點做完,趕緊拿錢,做外單這種事,耗的時間越長越虧。
現在這個項目的屎山代碼還在,2012年做的了。
? ?
那會浮躁啊, 一心只想快點把項目做出來交差。
所以根本沒心情像以前學51單片機那樣,把每個寄存器每個位基本都研究過一遍。
我就直接買了個STM32開發板,然后項目用到什么外設,我就先在開發板上調,開發板沒有教程,只有每個外設的例程,我就打開這個例程先研究下,先在開發板上調通,然后改改參數,再移植到項目里去調。
我剛開始接觸固件庫,和大家感受應該是一樣的,點個燈而已,整個工程怎么這么龐大復雜,為什么配置這個結構體參數,就能把外設用起來,這些結構體是怎么跟外設聯系起來的?
我也嘗試過用51單片機的玩法,沿著相應寄存器每個位的配置,奈何當初編程基礎還不行,順著源代碼都找不到源頭。
如果把這些研究明白再做項目,那黃花菜都涼了,不管了,先把功能實現再說,照著開發板配套例程,照葫蘆畫瓢的方式。
我用到的外設也就GPIO、ADC、UART、Timer、DMA,協議有SPI、IIC。
在有參考例程的基礎上,改改結構體參數,大概2-3周就把這些外設全跑通了。
接下來的時間就是做項目的業務功能了。
說出來都有點尷尬,項目都交付了,我連STM32的時鐘樹,NVIC都沒怎么搞明白,反正按照例程來,這些不懂,也不影響使用。
可能就跟開車的原理一樣,你不一定非得把車的內部結構,發動機原理這些整明白了,才能學會開車。
而是會踩剎車油門,會掌握方向盤,就可以把車開走了。
剩下的就是熟練度的問題,這得多上路跑跑,各種路段都跑過了,各種停車場都停過了,自然就是老司機了。? ? ? ? ?
?
其實這也是學STM32最佳的方法,芯片內部雖然復雜,涉及幾百個寄存器,但我們只是使用者的角色,先用起來,只要把庫關鍵函數,參數學明白,就可以了。
剩下的就是不斷做項目,把它應用在各種領域,等經驗豐富了,再回過頭來深究,很多以前想破腦袋都想不明白的,就擴然開朗了。
下面聊聊先學標準庫還是HAL庫的問題。
雖然現在ST對于新型號,不再提供Hal庫了,但這么多年了,我一直用標準庫在做產品,因為不一定會用到最新型號,像STM32F103C8T6,用得很多。? ??
對于工程師來說,最忌諱的就是重復造輪子,所以這些庫,我們一經在項目中驗證,就不會隨便去改,免得出問題給自己找麻煩。
我對Cube其實沒啥好感,大概6,7年前,想嘗試下用stm32cubeMX會不會更方便,沒配置好,然后把我桌面的東西全刪光了,工作都差點丟了。
我覺得這是一個BUG,哪怕用戶操作再不對,也不應該刪用戶的東西。?
不知道現在還有沒有這個問題,反正我一直沒用過,一直在用標準庫。
我覺得學標準庫還是Hal庫,并不重要,庫的底層處理邏輯都是一樣的,都是通過配置寄存器使用外設。
標準庫更直觀,更接近硬件,代碼執行效率更高。
HAL庫跨芯片兼容性更好,一些錯誤的處理更完善。
如果為了就業,可以先學標準庫,如果為了做項目,可以直接學HAL庫,開發效率更高。
不同的庫只是代碼封裝形式不同而已,不管怎么封裝,對應的外設,都是配置那幾個參數,比如GPIO有端口、引腳、速率、模式等。? ??
本質你還是把編程功底打扎實,因為庫里面涉及到大量的位運算、結構體、枚舉、指針、回調函數這些。
你把玩熟了,不管什么庫,都能很快地適應。
想提高編程功底,還是得多做項目,多接觸一些優秀的代碼思維和架構,而不是反復地去看基礎教程。
end

下面是更多無際原創的個人成長經歷、行業經驗、技術干貨。
1.電子工程師是怎樣的成長之路?10年5000字總結
2.如何快速看懂別人的代碼和思維
3.單片機開發項目全局變量太多怎么管理?
4.C語言開發單片機為什么大多數都采用全局變量的形式?
5.單片機怎么實現模塊化編程?實用程度讓人發指!
6.c語言回調函數的使用及實際作用詳解
7.手把手教你c語言隊列實現代碼,通俗易懂超詳細!
8.c語言指針用法詳解,通俗易懂超詳細!