很多人覺得學(xué)習(xí)嵌入式開發(fā)比高考還難,不知道怎么入門?要學(xué)哪些東西?
嵌入式開發(fā)涉及的知識(shí),你確實(shí)一輩子都學(xué)不完。
但是,這不代表你需要花費(fèi)很長(zhǎng)的時(shí)間才能學(xué)會(huì)。
我相信大多數(shù)人學(xué)習(xí)的目的,都是先通過學(xué)習(xí)這個(gè)技能找份工作,然后慢慢深入。
如果只是要達(dá)到找工作這種程度,親測(cè)只要學(xué)習(xí)方向正確+夠努力,完全可以在3-4個(gè)月完成。
一上來就像吃透這個(gè),吃透那個(gè)的*思想,*還沒入門就入土了。
在學(xué)習(xí)之前,*重要的不是找教程,方向和方法比教程更重要。
很多人以為嵌入式開發(fā)就是搞ARM,搞Linux。
實(shí)際上,嵌入式開發(fā)分很多方向。
主流的方向有:
單片機(jī)開發(fā)Linx驅(qū)動(dòng)/應(yīng)用開發(fā)FPGA,不了解不做講解這是兩個(gè)是目前市場(chǎng)需求*大的,單片機(jī)開發(fā)和Linux驅(qū)動(dòng)開發(fā)偏向硬件,Linux應(yīng)用開發(fā)基本是軟件。
前期一定要先根據(jù)個(gè)人情況確定好自己要從事的方向,不同的方向?qū)W習(xí)內(nèi)容也不一樣。
很多人搞不清方向,以為嵌入式開發(fā)又要學(xué)單片機(jī),又要學(xué)Linux,學(xué)了1年門都沒入。
我做了單片機(jī)開發(fā)10年,對(duì)這個(gè)行業(yè)比較熟悉,就拿這個(gè)方向做詳細(xì)講解,技術(shù)不用學(xué)多,深耕一個(gè)就夠了。
單片機(jī)開發(fā)應(yīng)該是屬于*好入門的,Linux驅(qū)動(dòng)/應(yīng)用開發(fā)相對(duì)難點(diǎn),工資Linux也相對(duì)高點(diǎn)。
不過做得越久,我越發(fā)現(xiàn)單片機(jī)開發(fā)其實(shí)并不比Linux開發(fā)簡(jiǎn)單。
我反而覺得資源越豐富的,用起來反而更簡(jiǎn)單。
舉個(gè)例子,很多做家用消費(fèi)類產(chǎn)品的芯片都是選非常便宜的,內(nèi)存也非常小,資源非常匱乏。
他們寫程序都是用匯編,算著匯編指令去寫的。
你可以用資源豐富的芯片做,然后用c把代碼寫的很健壯,但是成本*比別人高。
哪怕一顆芯片只貴1毛錢,如果一個(gè)月出貨10萬個(gè),你就讓企業(yè)少掙1萬。
有些做嵌入式Linux開發(fā)的看不起做單片機(jī)開發(fā)的,覺得很簡(jiǎn)單,沒什么技術(shù)難度。
等你做過研發(fā)負(fù)責(zé)人,你就明白任何一個(gè)產(chǎn)品,即便功能再簡(jiǎn)單,要做好都是沒那么簡(jiǎn)單的。
下面,我來總結(jié)下,學(xué)習(xí)單片機(jī)開發(fā)正確的學(xué)習(xí)路徑。
整個(gè)學(xué)習(xí)路徑我分為7步:
C語言基本語法C語言基本語法學(xué)習(xí)大概需要1-2周時(shí)間,這種教程網(wǎng)上已經(jīng)泛濫了,大多基于上位機(jī)的C語言,跟單片機(jī)C語言編程用起來還是有點(diǎn)差異。
我們這塊也專門錄制了一套教程,總結(jié)了我們這幾年實(shí)際開發(fā)*常用到的一些語法,可以到小破站找無際單片機(jī)編程直接看。
2.基礎(chǔ)電路
這一步走彎路的小伙伴*多,再重申一遍,不用死磕模電,甚至都不用去學(xué)。
學(xué)習(xí)電路*好的途徑就2個(gè),一是開發(fā)板,二是項(xiàng)目。
然后通過項(xiàng)目不斷地積累電路,模電負(fù)反饋放大電路以后的知識(shí)點(diǎn)我在實(shí)際工作基本沒用到過。
而且我們定位單片機(jī)軟件開發(fā)的話,也不需要具備硬件設(shè)計(jì)能力,只需要看懂電路關(guān)鍵輸入輸出就行了。
簡(jiǎn)單來說就是單片機(jī)通過什么方式控制電路,通過什么接口去采集電路過來的數(shù)據(jù)就行了。
3.51單片機(jī)
我*次接觸到的單片機(jī)是STC89C52RC,也就是現(xiàn)在開發(fā)板*常用*經(jīng)典的一款。
不管你通過哪一款去入手,51單片機(jī)我都建議必須學(xué)一下,如果你直接學(xué)STM32我也不攔你。
學(xué)習(xí)51單片機(jī)的目的是為了讓更好容易地去理解單片機(jī)的資源到底是怎么用起來的,怎么通過程序去控制電路的。
相當(dāng)于為你后續(xù)學(xué)習(xí)別的單片機(jī)鋪路。
4.51單片機(jī)項(xiàng)目
學(xué)完前面3個(gè)基礎(chǔ)知識(shí)以后,到這一步,先把你前面所學(xué)的知識(shí)變成實(shí)實(shí)在在的項(xiàng)目,可以是一些小項(xiàng)目,比如說尋跡小車之類的,可以到某寶找一些DIY套件自己寫程序,也可以找無際單片機(jī)編程學(xué)習(xí)實(shí)際產(chǎn)品開發(fā)。
這一步非常重要,也容易被初學(xué)者忽略,這一步的目的是為了學(xué)習(xí)實(shí)現(xiàn)功能的思維,鍛煉代碼整合能力,這個(gè)能力比你會(huì)單片機(jī)更重要。
5.C語言高級(jí)用法
C語言基本語法學(xué)完了,也通過項(xiàng)目落到實(shí)處了,就需要學(xué)習(xí)一下C語言的高級(jí)用法了,比如說指針、結(jié)構(gòu)體。
這塊也是為下一步學(xué)習(xí)STM32單片機(jī)做鋪墊,STM32的庫(kù)是面向?qū)ο蟮乃季S,如果不懂結(jié)構(gòu)體和指針基本看不懂。
這塊我們無際單片機(jī)編程也有原創(chuàng)的、系統(tǒng)的開源教程在小破站。
這套教程是我2019年錄這玩的,本來想靠它掙點(diǎn)錢,后來工作一忙沒空搞,干脆開源出來。
不要以講師的標(biāo)準(zhǔn)去要求我,畢竟當(dāng)初沒經(jīng)驗(yàn),而且是開源的。
但是課程內(nèi)容個(gè)人認(rèn)為還是非常有價(jià)值了,也是市面上學(xué)不到的,看過的評(píng)價(jià)也比較高。
6.STM32單片機(jī)
很多人學(xué)習(xí)STM32覺得很難,怎么跟51單片機(jī)的開發(fā)模式完全不一樣,控制一個(gè)IO口都這么麻煩。
STM32的資源比51單片機(jī)多太多了,寄存器自然也多,為了縮短大家開發(fā)周期,所以早期ST推出了固件庫(kù)。
直接調(diào)庫(kù)就能很輕松把STM32的外設(shè)用起來,而不需要關(guān)心底層配置了什么寄存器。
STM32學(xué)習(xí)我認(rèn)為是會(huì)調(diào)庫(kù)把外設(shè)用起來就行了,不用研究這么深。
除非你以后的產(chǎn)品需要你用寄存器去開發(fā),再針對(duì)性去研究。
也不用所有外設(shè)都學(xué)習(xí),可以看我上面那個(gè)思維導(dǎo)圖,我為大家總結(jié)了*常用的外設(shè)。
7.STM32項(xiàng)目
如果你堅(jiān)持到這個(gè)環(huán)節(jié),那恭喜你,你已經(jīng)成功入門了。
接下來的時(shí)間,全部放在做項(xiàng)目上面,再去學(xué)別的單片機(jī)已經(jīng)沒太大意義了,使用起來都是大同小異。
你現(xiàn)在缺的是功能實(shí)現(xiàn)的思路,以及代碼實(shí)現(xiàn)的能力。
除了項(xiàng)目,沒有更好的方法,到這一步如果有條件了,一定要舍得花錢投資自己。
找一個(gè)行業(yè)經(jīng)驗(yàn)豐富的人帶你,通過*短的時(shí)間去學(xué)習(xí)別人幾年的精華是很劃算的。
如果條件不允許或者不認(rèn)可我說的,也可以去找一些開源的項(xiàng)目學(xué)習(xí),只是自己摸索比較浪費(fèi)時(shí)間。
還有就是到某寶找一些單片機(jī)的項(xiàng)目DIY套件,一般他們會(huì)有提供源碼,可以跟著學(xué)習(xí)。