誰能教教我怎么學(xué)單片機(jī),怎么入門?
文章較長,建議先收藏后再慢慢品嘗,肯定會有收貨的!
0. 寫在最前?
嵌入式學(xué)習(xí)路徑是一個漫長而又有趣的過程,有趣是隨著知識的積累感受的成就感,漫長是相對于 軟件來說,入門還是有一定門檻的。?
但一定不要一個人學(xué)習(xí),因?yàn)樯鲜鰧W(xué)習(xí)路徑長,難度漸漸加深,一個人總有不理解,晦澀難懂的地 方,你需要有人來探討。注意是探討,不是一味的請教別人,遇到問題自己先通過網(wǎng)絡(luò)查詢資料, 先學(xué)習(xí)和思考,再請教他人。因此強(qiáng)烈建議現(xiàn)實(shí)生活中找一兩個同樣方向的人一起學(xué)習(xí),在學(xué)校就 比較方便了,加個單片機(jī)社團(tuán)就有學(xué)習(xí)氛圍了。?
不要一個人學(xué)習(xí),學(xué)習(xí)需要探討,一個人學(xué)習(xí)容易放棄,一伙人則會相互激勵。?不要一個人學(xué)習(xí),學(xué)習(xí)需要探討,一個人學(xué)習(xí)容易放棄,一伙人則會相互激勵。?不要一個人學(xué)習(xí),學(xué)習(xí)需要探討,一個人學(xué)習(xí)容易放棄,一伙人則會相互激勵。?
大部分人的主要疑問:哪里可以找到一伙人?
學(xué)生黨:問問學(xué)校電氣, 機(jī)電學(xué)院里面有沒有類似的工作室. 可以利用實(shí)驗(yàn)室資源最大化學(xué)習(xí)。?
工程師:通過自己買開發(fā)板或者打樣。交流的途徑有:各類技術(shù)論壇,stm32這塊,可以去正點(diǎn)原 子論壇, 野火論壇,也有對應(yīng)微信公眾號,可以找找有沒有衍生出的微信群或者QQ群。linux這塊, 100ask論壇,ZLG開發(fā)交流群. 各種交流群, 論壇, 只要用心去找, 一定能找到。?
1. 基礎(chǔ)課程?
1.1 C語言?
具體細(xì)節(jié)的知識點(diǎn)我這里就不詳細(xì)的展開描述了,畢竟C語言的書和視頻教程網(wǎng)上一大堆,學(xué)習(xí)資 源充分。但這里建議,C語言的基礎(chǔ)還是要打扎實(shí)的,最簡單的方法就是高中對付高考的方法:題海戰(zhàn)術(shù)。?其實(shí)就是將C語言書籍后面的C習(xí)題,每一題的做一遍,自己動手敲一遍,想一遍,調(diào)試一遍。這樣 將會極大的鍛煉到你的基礎(chǔ)編碼能力。覺得C語言課本后面的習(xí)題太簡單沒有難度的,可以轉(zhuǎn)戰(zhàn)LeetCode。
1.2 數(shù)字電路?
具體的細(xì)節(jié)說實(shí)話我也不記得了,但是最基本你要知道與或非門如何實(shí)現(xiàn)組合邏輯;組合邏輯的輸 出反饋到輸入作為下一次邏輯的輸入就構(gòu)成了時序電路,掌握時序邏輯的分析方法;
另外還需掌握 數(shù)據(jù)鎖存器類的掉電數(shù)據(jù)不丟失的電路是什么樣的原理。掌握這些概念,或許最開始僅僅是一知半 解,沒有能將知識串起來,但是等到某一天你的知識體系成熟的時刻,你就豁然開朗了。
(1) 人類文明的進(jìn)步,探索發(fā)現(xiàn)了PN結(jié)這種東西具有單向?qū)щ娦?,由此制作做了二極管。(理解PN結(jié) 單向?qū)щ娫??
(2)?由于二極管的單向?qū)щ娦?,由此又制作出了與或非門電路。(理解二極管如何構(gòu)成與或非邏輯門) 人們做出了與或非邏輯后,發(fā)現(xiàn)世界上邏輯就是在此基礎(chǔ)上復(fù)雜化而已??捎猛ㄟ^與或非門實(shí)現(xiàn) 加法器,移位器,編碼器,譯碼器等各種想要實(shí)現(xiàn)的組合邏輯(掌握通過門電路設(shè)計組合邏輯的方法)?
(3)?但現(xiàn)實(shí)生活中的邏輯往往不像組合邏輯這么單純,輸入轉(zhuǎn)化為輸出就結(jié)束了。往往上一次的輸出 會影響到下一次處理。時序邏輯的出現(xiàn)就這么引入了,同時也帶來了時鐘的概念。(掌握組合邏輯 輸出反饋為下一個時鐘的輸入得到時序電路的分析方法)?
(4)?上面這些都是實(shí)時輸出的,即輸入的同時才能得到對應(yīng)的輸出,一旦輸入沒有,輸出也就丟了。數(shù)據(jù)沒有辦法保存。于是人們又通過門電路制作出了可以鎖存數(shù)據(jù)的RS觸發(fā)器,PROM存儲器。(掌握存儲器的電路原理,如何通過總線時序訪問)?
準(zhǔn)確理解了上述內(nèi)容后,在后續(xù)學(xué)習(xí)微機(jī)原理的課程中,你會發(fā)現(xiàn)CPU的核心單元就是一個復(fù)雜點(diǎn) 的時序邏輯,而外設(shè)資源的話,都是些組合邏輯或時序邏輯包起來的黑盒子。
2. 入門課程?
2.1 51單片機(jī)?
講道理,目前Proteus仿真軟件確實(shí)很強(qiáng)大,使用它學(xué)習(xí)51的書籍,教程,示例十分的多,非常適 合學(xué)習(xí)。
但我還是建議真心學(xué)習(xí)的的話,去淘寶上淘個實(shí)物開發(fā)板和模塊,學(xué)生黨經(jīng)濟(jì)能力一般的 就上閑魚,買個二手板子,包郵不超過50。
為什么建議買實(shí)物呢?
因?yàn)镻roteus仿真畢竟是仿真, 對于很多硬件上的電壓、信號時序等要求不像實(shí)際電路嚴(yán)謹(jǐn),或者說不夠嚴(yán)苛。就好比i2c時序不是 很符合從機(jī)的要求也能正常通信,但同樣的程序放到實(shí)物單片機(jī)上就很有可能i2c通信不上。?
這里再順帶手的介紹下51主要學(xué)習(xí)些什么?以及簡單的學(xué)習(xí)步驟:
創(chuàng)建工程,學(xué)會如何編譯,如何下載,理解sbit,sfr等51單片機(jī)特有的寄存器數(shù)據(jù)結(jié)構(gòu)?
假設(shè)使用的STC系列的單片,要學(xué)會去STC官網(wǎng)(stcmcu.com)下載官網(wǎng)資料,數(shù)據(jù)手冊文檔。官方下載工具、電路參考設(shè)計等資料。(從芯片廠商官網(wǎng)上獲取學(xué)習(xí)的資源也是一項很重要的能 力),或許51這樣的單片機(jī)資料太多,基本你想要做的東西,別人早就做過了,官網(wǎng)的資料早就變成千萬的人的博客文章,但以后學(xué)習(xí)一些不是熱門的處理器,官網(wǎng)的資料就顯得很權(quán)威也很重要了。
學(xué)習(xí)51單片機(jī)的IO模塊,使用IO點(diǎn)燈(流水燈)、控制數(shù)碼管、控制8*8點(diǎn)陣模塊、按鍵輸入。
學(xué)習(xí)51單片機(jī)的中斷模塊,先從最簡單的外部中斷,使用中斷的方式識別按鍵事件。
學(xué)習(xí)51單片機(jī)的定時器模塊,實(shí)現(xiàn)1s定時,實(shí)現(xiàn)簡單的數(shù)字秒表,實(shí)現(xiàn)IO口輸出PWM波。
學(xué)習(xí)51單片機(jī)的串口模塊,掌握串口電平標(biāo)準(zhǔn),TTL、RS232、USB電平標(biāo)準(zhǔn),掌握串口波形組成,掌握波特率,多主機(jī)通信等概念。
51基礎(chǔ)模塊學(xué)習(xí)完了后,就可以學(xué)習(xí)擴(kuò)展模塊了??梢允褂肐O口模擬各種各樣的低速總線協(xié)議, 如i2c協(xié)議、spi協(xié)議還有一些特定模塊自定義的協(xié)議,如DS18B20溫度傳感器的單總線協(xié)議,加深對協(xié)議的理解。
學(xué)習(xí)的過程可以通過買該協(xié)議對應(yīng)的模塊進(jìn)行學(xué)習(xí),盡量挑網(wǎng)上教程多的模塊 買,如i2c就買eeprom和mpu6050,spi就買flash。
學(xué)到這里,就可以做點(diǎn)小東西了,比如說旋轉(zhuǎn)LED,循跡小車,遙控小車。最開始就跟著網(wǎng)上的 教程學(xué)習(xí),學(xué)習(xí)的第一步總是從模仿開始的。先模仿,再理解,再改進(jìn),最后吸收轉(zhuǎn)化為自己的能力。
建議上述過程多花點(diǎn)時間,做到絕大部分地方都能搞懂,都能夠理解。畢竟是基礎(chǔ),后面的學(xué)習(xí)是 在其上進(jìn)行擴(kuò)展,基礎(chǔ)學(xué)的好,后面有著觸類旁通的功效。
2.2?微機(jī)原理(可選)
一般的小伙伴這個時候就會開始上手STM32了,但是我建議在上手STM32之前,先看看8086處理 器的設(shè)計,即學(xué)習(xí)下《微機(jī)原理》這門課,我覺得還是很有必要的。
微機(jī)原理,可以大概的了解的,CPU如何執(zhí)行指令,如何通過地址總線、數(shù)據(jù)總線、控制總線訪問內(nèi)部寄存器,外部存儲器, 中斷如何被響應(yīng),以及中斷的具體內(nèi)部處理過程。
2.3 STM32?
接下來可以安安心心的學(xué)習(xí)STM32了,這個就比51要復(fù)雜了。但是不慌,本質(zhì)和51是一樣的東 西,只是功能模塊變復(fù)雜了,模塊數(shù)量變多了。但是萬變不離其宗,本質(zhì)上模塊無非就是組合邏輯 或者是時序邏輯電路,而模塊寄存器就是該邏輯電路的輸入。
我們只要看懂模塊框圖,將框圖中的 配置和相應(yīng)的寄存器對應(yīng)上,學(xué)習(xí)就是一樣的。
stm32單片機(jī),推薦購買野火或者正點(diǎn)原子的開發(fā)板學(xué)習(xí),并非打廣告,而是教程確實(shí)講的好。這個跟著視頻一個一個模塊學(xué)習(xí)就可以了?;蛘咭宰髌窞閷?dǎo)向,做個平衡小車,OLED時鐘等小玩意。
2.4 數(shù)據(jù)結(jié)構(gòu)