五年懂行,十年稱王,
當初自學轉行的我,怎么也沒想到自己能從事單片機開發10年,
王不敢稱,還算懂行,
10年前我剛畢業,即將面臨社會毒打,我慌得一批,
我學的是電氣工程,后面主修電梯,
畢業后和大家一樣,感徑訓是啥也不會,啥也不是,最悲哀的對本專業還很排斥,
那個時候看得不遠,就看實習的那些師兄前輩們,完全打消我從事這個行業的欲望,
工資低、責任大、體力活、24小時待命,
相信一個正常的年輕人都不會去選擇這樣的作業,除非生活所迫,
所以,我虎軀一震,決定大膽一次,選擇了自學轉行,
可能是上天比較眷顧勇敢和有自己想法,又肯努力的人,再加上10年前門檻相對沒那么高,
我只學了STC 89C52,也就是51單片機,然后做了個智能小車就找到作業了,
中間也很坎坷,至少被20幾家公司拒絕過,從絕望到不服輸的辛酸史今天先不提,
下面,我將通過我的個人經歷,來分享下我當初是如何從51單片機過度到STM32的,希望有同樣煩惱的認真看完,絕對能讓你受益匪淺,
我第一份作業是做單片機軟體工程師,當時也沒什么專案經驗,老大自然也不會給我參與什么新專案開發,
我每天的作業就是維護公司老產品,改改代碼,給定制化的客戶升級下功能,
改代碼是一件非常痛苦的事,比自己重新寫還痛苦,因為要去理解別的工程師的思維,
不過,這是一個工程師必備的技能,現在回想這幾年,成長最快的時候就是看那些大佬寫的代碼,閉門造車,只會讓你成為井底之蛙,
公司的產品大多數都是用stc 51單片機做的,還有就是NXP的ARM7單片機,
剛從51單片機過渡到ARM7的時候,那段時間確實掉頭發更嚴重了,太特么燒腦了,
還好,開發模式基本跟51單片機相同,都是通過配置暫存器使用,只不過暫存器要復雜也多很多,我記得當時用的好像是lpc2103,
還好只是改代碼,如果讓我看資料手冊去配置暫存器,估計我也做不出來,
大概做了3,4個月,我基本上上手了,原來改個功能要半個月,現在改個功能只需要1周左右,
那個時候就有點飄了,單片機開發也不過如此,
后來,跟同事相處多了,也熟了,有個同事介紹了一個外單問要不要一起做,
當時,我想跟著這些老油條做,即便不掙錢積累點經驗也好就答應了,
整個專案需要用到2個單片機,一個51單片機做屏顯示,一個做主控,主控這邊需要一個類似于ARM7這種資源豐富點的單片機,
這個專案我非常積極,主動要求做作業量最大的主控程式,然后錢平分,同事聽到連忙點頭叫好,
硬體選型是他選的,他推薦我們用STM32的單片機,開發起來挺爽,我也不懂,完全聽他安排,反正這個專案我完全沖著學東西去的,哪怕是自己虧點錢,
在同事設計電路的時候,我就同步開始研究STM32單片機,最好等硬體回來就能開始除錯功能,
下圖是我最終寫好的代碼,所有功能代碼都寫在main函式里,沒用單獨函式單元,現在看著真的是太渣了,

學習一款新單片機最好的方式就是買一個開發板,所以我自掏腰包買了一個開發板,
那個時候開發板還沒現在這么完善,只有每個外設使用的例程,沒有配套視頻教程,
開發板拿到以后,我就開始從最簡單的GPIO開始學習,
但…當我打開GPIO工程的那一刻,我懵逼了…這是什么鬼?用一個IO口怎么都這么復雜?
到處都是結構體,指標,回呼函式,
STM32和51單片機代碼架構不一樣,雖然底層都是配置暫存器去使用單片機外設,但STM32不用我們自己配置暫存器,而是呼叫官方韌體庫直接打開,
所以,原本是學STM32單片機的,最后變成了學韌體庫,學會韌體庫你就學會了STM32,
但是想要學韌體庫,需要你有一定的代碼理解能力和水平的基礎鋪墊,比如說你要熟悉指標、結構體、列舉,
很多人心急,一在開發板上學完51單片機,馬上就開始學STM32,連專案都不做一個,有些甚至直接學STM32,
導致在學習STM32的時候舉步艱難,每學一步都碰到各種問題無法解決,
這也是為什么我們無際單片機編程要求學員先學51單片機,再做一個專案,做完再學STM32的原因,
學習這個就像我們玩游戲一樣,先升級搞裝備,再挑戰boss,
我在學習STM32之前已經接觸過幾個專案,所以至少保證了韌體庫代碼都能看得懂,
我一邊改開發板的例程,一邊在開發板上做實驗,
我會舉一反三去做實驗,比如說開發板是配置PA0,那我會改成PB0、PC0試試,
其他外設同理,開發板開啟定時器1,那我會改成定時器2,
我只研究我這個專案用到的外設,GPIO、定時器、串口、NVIC、DMA、RTC、ADC,
其它沒用到的我看都不去看,
大概花了半個多月的時間,我就把這些外設用起來了,用熟了以后感覺太爽了,比51單片機和LPC爽多了,
用熟韌體庫,甚至連資料手冊都不用看就能把外設用起來,更別說看暫存器了,
專案時間也緊,沒時間給我去研究,
時隔多年回想起這件事,我都感覺誤打誤撞走了捷徑,我很慶幸當初沒深入去研究暫存器,沒深入去看資料手冊,不然走的彎路能繞地球一周,
因為看了也是白看,根本看不懂,還會打擊自己自信,有現成代碼為啥不用?
STM32單片機外設用起來以后,后面基本上就沒怎么研究過單片機內部的東西了,剩下的時間基本就是完成產品的功能,
所以,學習STM32最好的方法就是通過專案去學習,
等你做開發幾年以后,相信你也會明白,雖然我們從事單片機程式開發,但真正的核心不是單片機,而是你的編程水平和思維,
當你連自己寫代碼實作功能都困難的時候,先不要去想如何把代碼寫的更好,而是先實作,
等你實作了以后,再想代碼怎么能寫得執行效率更高、可移植性、可擴展性更好?
執行效率講求的演算法,可移植性和可擴展性講求的是程式架構,
這塊,沒經歷過幾個中大型專案的錘煉是很難領悟的,
程式架構這塊,我在19年錄制了一套比較系統的教程,目前看來可能是實用性比較強的,

教程講了指標、結構體、回呼函式、任務管理、佇列這些高級的應用,
也可以直接套在自己產品上,至少能提高30%的開發效率,
教程都是開源的,不用花1分錢,跟無際單片機編程拿就可以了,
最后總結:
- 學習STM32最快的方式就是通過專案去學習,
- 不用每個外設都學,只需要學常用的外設,剩下專案用到再去學,
- 把STM32當作一個工具使用,外設會用就行,
Ok,今天就寫到這里,寫寫刪刪,不知不覺肝了2個小時,如果對你有幫助,麻煩給我安排個三連吧^^!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/303926.html
標籤:其他
