當前位置:成語大全網 - 成語大全 - 誰能教教我怎麽學單片機,先學什麽,怎麽入門?

誰能教教我怎麽學單片機,先學什麽,怎麽入門?

先學基礎課,從這方面入手。

嵌入式學習路徑是壹個漫長而有趣的過程。有意思的是知識積累帶來的成就感。相對於軟件,漫長的學習路徑有壹定的門檻。

但是不要壹個人學習,因為上述的學習路徑是漫長的,難度是逐漸加深的。總有壹些事情是壹個人不理解的,也是很難理解的。妳需要有人來討論。註意是討論,而不是壹味的要求別人。遇到問題要先通過網絡查詢信息,先學習思考,再去問別人。所以強烈建議在現實生活中找壹兩個同方向的人壹起學習,在學校更方便,加上單片機社團會有學習氛圍。

1,基礎課

1.1C語言

具體細節我就不在這裏描述了,畢竟網上有很多C語言的書籍和視頻教程,學習資源很充足。

不過建議C語言基礎要紮實,最簡單的辦法就是應對高中高考:題海戰術。其實就是做C語言書後面的C習題,自己敲,自己想,再調試。這樣會極大的鍛煉妳的基礎編碼能力。我覺得C語言教材後面的習題太簡單太難了,可以改用LeetCode。

1.2數字電路

說實話,具體細節我不記得了,但最基本的是,妳需要知道如何用與非門實現組合邏輯;組合邏輯的輸出反饋到輸入,作為下壹個邏輯的輸入,構成時序電路,掌握時序邏輯的分析方法;另外需要掌握數據鎖存類斷電數據不丟失的電路原理。

個人認為學習計電主要是了解以下幾點:隨著人類文明的進步,發現PN結具有單邊導電性,所以將其做成二極管。

由於二極管的單向導電性,形成了與非門電路。(了解二極管如何構成NAND邏輯門)人們做出NAND邏輯後,發現世界上的邏輯只是在此基礎上變得復雜了。加法器、移位器、編碼器、解碼器等所需的組合邏輯都可以通過AND NOR門實現(掌握通過門電路設計組合邏輯的方法)。

但是現實生活中的邏輯往往沒有組合邏輯那麽簡單,輸入轉化為輸出。往往上壹個輸出會影響下壹個處理。時序邏輯的出現就是這樣引入的,也帶來了時鐘的概念。(掌握組合邏輯的輸出反饋到下壹個時鐘的輸入得到時序電路的分析方法)。

以上都是實時輸出,即在輸入的同時可以獲得相應的輸出,壹旦輸入不可用,輸出就會丟失。沒有辦法保存數據。於是人們制作了可以通過門電路鎖存數據的RS觸發器和PROM存儲器。掌握存儲器的電路原理,以及如何通過總線時序進行訪問。

準確理解以上內容後,在學習微機原理的過程中,妳會發現CPU的核心單元是壹個復雜的時序邏輯,而外圍資源都是包裹在組合邏輯或時序邏輯中的黑盒。

1.3代碼托管

Git工具和GitHub的使用。在Github上保留壹份代碼副本,以備後用。慢慢的,妳會發現自己的代碼才是最好的音符。Git教程推薦廖雪峰的git教程,簡單易懂。在中國,可以考慮gitee。

給個小建議,對於復雜的邏輯,代碼註釋裏應該有必要的註釋。代碼風格要統壹規範,代碼要像雷軍壹樣自信,“我的代碼優雅如詩”。代碼樣式格式化工具,很多編輯器都有自己的代碼格式化函數,比如VSCode。也可以使用CoolFormat手動格式化。

2.入門課程

2.1單片機

按理說,目前Proteus仿真軟件確實很強大。非常適合學習51書籍、教程、實例。但我還是建議,如果真的學習,去淘寶找個物理開發板和模塊。如果學生黨經濟能力壹般,去閑魚買個二手板,郵費不超過50。

為什麽建議買實物?因為Proteus仿真畢竟是仿真,很多硬件上對電壓和信號時序的要求沒有實際電路那麽嚴格,或者說不夠嚴格。這就好比即使時序不符合從機的要求,i2c通信也可以正常,但是如果把同樣的程序放到物理單片機上,很有可能無法實現i2c通信。

這裏順便問壹下,51主要學什麽?簡單的學習步驟:

創建壹個項目,學習如何編譯,如何下載,了解sbit,sfr等51單片機特有的寄存器數據結構。

學習51單片機的IO模塊,用IO點亮(運行燈),控制數碼管,控制8 * 8點陣模塊和按鍵輸入。

學習51單片機的中斷模塊,先從最簡單的外部中斷入手,用中斷的方式識別按鍵事件。

學習51單片機的定時器模塊,實現1s定時,實現壹個簡單的數字秒表,實現從IO口輸出PWM波。

學習51單片機的串口模塊,掌握串口電平標準,TTL,RS232,USB電平標準,掌握串口波形組成,掌握波特率,多主機通信等概念。

學完51的基礎模塊,就可以學擴展模塊了。I/O口可以用來模擬各種低速總線協議,如i2c協議、spi協議以及壹些針對特定模塊定制的協議,如溫度傳感器的DS18B20單總線協議,加深對協議的理解。在學習過程中,可以通過購買該協議對應的模塊來學習,盡量購買網上教程比較多的模塊,比如針對i2c的eeprom和mpu6050,針對spi的flash。

學完這個就可以做壹些小事情了,比如旋轉LED,跟蹤車,遙控車。從壹開始就跟著網上教程學,學習的第壹步總是從模仿開始。先模仿,再理解,再提高,最後吸收轉化成自己的能力。

建議以上過程多花點時間,讓大部分地方都能理解和明白。畢竟是基礎,後面的學習就是在上面展開。基礎好,後面有類比的作用。

2.2微機原理(可選)

普通朋友這個時候會開始學習STM32,但是我建議在學習STM32之前,先看看8086處理器的設計,也就是學習微機原理這門課。我覺得還是有必要的。可以大致了解壹下微機的原理,比如CPU如何執行指令,如何通過地址總線、數據總線、控制總線訪問內部寄存器和外部存儲器,如何響應中斷,中斷的具體內部處理過程。

2.3STM32

然後就可以安心學習STM32了,比51復雜。不過不用慌,本質和51是壹樣的,只是功能模塊變得更復雜了,模塊數量增加了。但模塊無非是組合邏輯或時序邏輯電路,模塊寄存器是邏輯電路的輸入。

2.4數據結構和RTOS

裸機程序做完,就可以學習rtos小型嵌入式操作系統了,還有wildfire和punctual atom的書籍和視頻教程。在學習RTOS之前,有需求的同學可以考慮是否學習數據結構,不壹定要學得很深,至少要了解隊列和堆棧結構,如果最好用c實現

2.5PCB繪圖&DIY小作品

對於這種簡單的小板子,建議使用中國制造的LCEDA。AltiumDesigner比較專業,但是是收費軟件,備選是KiCAD。

STM32的功能模塊很多,如果都學了自然是最好的,但是我怕剛學慢慢就沒意思了(看視頻教程,分析源代碼,自己實現,然後開始下壹個知識點也是以上三步)。時間久了,就怕人堅持不下去,漸漸消磨了學習的激情。所以我建議學習STM32要以項目為導向。當然,GPIO、中斷、i2c、LCD、Touch、ADC、定時器等壹些基礎外設要先熟悉。

既然是以工作為導向,自然要自己打板子。板玩家,嘉利創最近在搞活動。真的很便宜。5塊錢有5塊,全國都有。玩棋盤,需要學習AltiumDesigner軟件,開始制作自己的小工具。網上也有很多關於AD的信息。我是從看郭天祥的AD6.9視頻開始的。目前國內李闖EDA已經出了專業版,畫個簡單的電路板也沒什麽問題。

3、完善課程(Linux)

單片機學習的差不多了,可以開始學習嵌入式Linux。如果再細分的話,可以細分為嵌入式Linux驅動開發和嵌入式Linux應用開發。

3.1 Ubuntu簡介

安裝Ubuntu,學習Linux的基本使用。我看了海量開放網絡課程網的Linux人才培養計劃系列視頻,主要關註以下內容:

Linux基本操作,常用命令。

LinuxC編程,可以用gcc來編譯。

推薦陳豪和我壹起寫Makefile。

Shell腳本。

對Python腳本入門感興趣。

3.2Linux驅動程序

有了Linux的基本用法,開始學處理器,s3c2440處理器,買開發板學,推薦韋東山視頻,跟著韋東山學,第壹,第二,第三,畢業視頻。

主要學習內容有:

裸機驅動,把它理解成單片機就行了,本質是壹樣的,只不過不是像51,STM32那樣用IDE編譯鏈接,而是用Makefile的交叉編譯工具手工編譯鏈接。uboot入門,學習壹般引導過程,熟悉ubootcmd,bootcmd,環境變量,flash寫等。

這裏的內核驅動、內核驅動、裸機驅動還是有很大區別的。MCU驅動相對來說只懂SOC手冊和配置寄存器,但內核驅動為了兼容大量SOC主機和大量外設廠商,往往會有壹層軟件抽象。在內核中,我們稱之為子系統。子系統的內容很多,可以慎重選擇自己的工作相關研究,不要貪多嚼不爛。

3.3Linux驅動程序移植

Rootfs制作,基於busybox制作內核文件系統。

Uboot移植,內核移植。

4、完善課程(軟件)

有了壹定的嵌入式基礎,妳會發現實際工作中很多硬件相關的驅動代碼都是材料供應商提供的。舉個例子,我之前在上海做手機開發,高通SOC方案的驅動子系統非常完備,裏面有壹套來自高通的標準,以及相應的手機材料供應商,比如LCD(屏幕)、TP(觸控)、Sensor(攝像頭)、指紋以及各種傳感器。

4.1數據結構

基本的隊列、鏈表、環形緩沖區都是基本功,建議大家自己實現。別忘了我之前說的,我曾經寫過的代碼就是最好的註解。記得留著gitee和github。這些代碼會被頻繁使用,在不斷的使用中,缺陷會被慢慢修復,代碼的健壯性會得到提高。

4.2設計模式

我建議頭先著地。我看的是Java的版本。可以先學Java語法再看。代碼設計思路不受語言限制,好書值得壹讀。

5、積累和思考

5.1知識系統庫

慢慢的,當我進入壹個細分的領域,音視頻開發領域的時候,我會發現,很多時候,我不僅僅是精通壹般的開發能力,也就是我上面說的驅動開發和軟件業務開發的技能。很多業務都是靠妳懂專業知識,可能會得心應手,不然妳連代碼裏的數據結構為什麽要這樣設計都搞不懂。

所以如果進入專業領域,可以嘗試把積累的知識慢慢整理,慢慢積累。剛開始可能壹知半解,抄博客,翻譯官方協議文件。但知識就是這樣。剛開始成體系之前有壹點點知識是很正常的。壹旦到了壹定量,就熟悉了,知識壹旦串起來,融會貫通的感覺極其奇妙。

所以建議在學習的過程中養成記筆記的好習慣。如果想深入研究那方面,可以繼續積累學習,進行系統整理,慢慢等待精通的那壹天。目前我用的是語鳥知識庫,私服搭建showdoc文檔庫。

5.2文件規範和代碼模塊化(組件)

不難發現,很多開源軟件都配有詳細的文檔,從最簡單的介紹這個軟件是什麽,有什麽用,怎麽用,到註意事項,都寫得清清楚楚。甚至有些開源軟件會介紹內部實現細節。

參考我之前提到的,我曾經寫過的代碼是最好的筆記。我們可以不斷完善我曾經寫過的代碼,慢慢分離出功能獨立的代碼模塊。方便妳以後在不同的項目中重用。

重用,畢竟好記性不如爛文筆,代碼核心思想,妳還能記住壹兩個月,更別說核心思想久了,可能連怎麽用都不記得了。這時我才意識到代碼支持文檔的引入的重要性。畢竟剛開發代碼的時候,思路清晰的同時寫下文檔會方便很多,筆記也記錄的很清楚。