已经学过51单片机,如何进阶?我来教你
大家好,我是小麥,最近有朋友問,已經學過51單片機了,如何進階?
問題
事情是這樣的,他在本科時期已經有相應的單片機開發經驗,做過簡單的項目,流水燈,倒計時,紅綠燈,后面該如何提高呢?
首先我感覺得給進階下一個定義,也就是明確也學習目標,怎么樣才算進階?我掌握哪些東西,可以獨立完成哪些開發任務,才算達到了進階的目的呢?
如果單純是單片機開發的進階?
我認為入門的階段是這樣的:
- 如果剛開始以51單片機起步,能基于開發板做簡單的項目,比如搞個流水燈,再復雜點會做電子萬年歷(DS1302+LCD1602)就挺不錯了;
- 如果一開始就上STM32了,那么能在常用的STM32開發板上做一些功能,實現一些小的功能,或者能用CubeMX配置和初始化代碼,然后做一些項目;
我認為的進階是這樣的,需要掌握這些;
- 首先我覺得硬件設計是必要的,能根據需求,進行硬件開發,進行原理圖設計,PCB的Layout,繪制簡單的雙層PCB板;
- 在進行硬件設計的過程中,可以試著抄一下已經開源的原理圖,或者一般集成電路的DataSheet中都有相應的參考電路,根據這些參考電路進行原理圖設計,后面可能會進行一些修改,在新的改版中進行修改即可。
- 焊接技能,如果有最好了,沒有的話,可以在PCB打樣的時候找廠家進行貼片,配套服務還是很不錯的,節省了時間成本;
- 樣板到了之后,就要動手對板子進行調試了,這時候會比較復雜,配套的技能包,比如示波器如何使用?如何捕獲波形?如何使用萬用表?有時候問題會比較玄乎,感覺可能在硬件上,又感覺在軟件上,這里建議最好有一個方案驗證板(至少保證硬件沒問題);
- 最后是編寫安全可靠的代碼,當然如果移植性好,代碼框架好最好了;
之前也有朋友問我,自己想做一些DIY項目,軟硬件都自己設計,該如何學習?他是搞互聯網專業的,做嵌入式單純是愛好,享受生命在于折騰的快樂而已;
硬件設計
新手建議使用Altium Designer,教程比較多,國產軟件立創EDA也不錯,開源的KiCad也可以使用,選一款就行,軟件都大同小異,不要在糾結選擇哪一款軟件上而浪費時間,我個人建議使用Altium Designer,下面簡稱AD;
網上有很多免費的教程,可以去搜一下,看完教程一定要自己嘗試著設計一個電路,可以簡單一點,設計一個單片機的最小系統。
鏈接:https://pan.baidu.com/s/1yKfsttgIBeKKMK65m9H91g
提取碼:pzsz
軟件設計
單片機的編程開發是必須要掌握C語言的,匯編語言可以簡單能讀懂就行,調試的時候能簡單看懂反匯編就行,所以要把主要精力放在C語言上,其實,初期C語言會常用的語法:
- 循環:for,while
- 分支:if else,switch
就可以做很多事情了,但是后面還需要進階,因為寫出健壯高效,可復用,可移植的程序,只會這些還遠遠不夠。
好了,我們學習了C語言是為了開發單片機的,是要直接對硬件進行操作,直接操作單片機上的外設寄存器,所以
這里以STM32舉例,通常我們需要熟悉常用的接口和協議,和一些常用的外設,后面你會發現,不論是什么廠家的單片機,其實都大同小異;
比較常用的,我們會遇到GPIO,TIM定時器,systick,UART,I2C,SPI,CAN等;
一般來說,像STM32這種硬件平臺,前期使用的人很多,網絡資源非常豐富,很多時候會Ctrl+C和Ctrl+V就行了,另外ST提供了cubeMX這種工具,初始化根本不需要人為干預,但是有時候過于依賴工具,往往會被工具反噬,我就遇到過用cubeMX配置代碼,遇到問題一臉懵逼,不知道如何下手的朋友。
當然我不是提倡大家穿著新鞋走老路,因為時代在發展,不能換一個寄存器一個寄存器去手擼,不過這時候,需要對底層有一個更全面的認識了,從單片機內核架構層面去理解,這需要學習其他的體系知識了,比如地址總線,數據總線,ARM的架構,外設是如何CPU進行數據交換的等等;
比如今年缺芯嚴重,不得不進行國產替代,不吹不黑,今年換了幾款國產的MCU,資料不太完善,也沒有太多參考的Demo,后來使用固件庫的時候發現了幾處BUG,最后還是得靠自己參考開發手冊排查錯誤。
言歸正傳,我們要學會去官網找資料,有很多應用方案,芯片的開發手冊UM(?user manual),自己搭建開發環境,然后找到相應的芯片的固件庫,這些都能自力更生,就非常不錯了。
多提問,多交流
一個人,走得快,一群人,走得遠;所以要多與人交流溝通,不恥下問,這里一定要注意提問的技巧;下面是我認為的幾點;
- 盡量別問搜索引擎能解決的問題;
- 盡量收集問題相關的信息;
- 例如單片機而言,你不能問:為什么我的燈點不亮?或者你可以問:我的燈點不亮,測量了IO輸出電平正常,但是沒有亮?
- 不要使用難懂、模糊化等詞句,盡量簡短,清晰,簡明,扼要地描述你的問題;
- 對的時間,問對的人,在別人全神貫注思考或搬磚的時候,就不要輕易打擾他人;
- 明確你的提問目的是什么,如果你自己都不在自己要問什么,那還是先整理一下問題再問吧;
加入嵌入式技術交流群一起進步https://mp.weixin.qq.com/s?__biz=Mzg5MDU1OTgzMw==&mid=100007435&idx=1&sn=9082f2e84c7b6fcbc83165c9de5794f5&chksm=4fdb923d78ac1b2b8f28c6a4040b355f0da96dcd6e336f6cc06cd92467a2d042823e85588ba1#rd
最后
這篇文章里我簡單地聊了一下如何進行單片機進階,個人認為需要硬件設計和軟件設計兩部分;
- 硬件設計;
- 軟件設計;
如果詳細展開,每個部分都有很多東西可以學習的,其實感覺最初能做簡單的PCB,然后在這硬件基礎上進行相應的軟件開發,就已經達到了一個進階的目的,后續需要的是不斷在項目中進行提高,可以不斷積累硬件方面的經驗,另外還需要系統地學習基礎知識,比如計算機系統(微機原理),C語言,數據結構等,軟件部分可以多看一下開源的優秀項目,學習他們的設計思想,這樣會提高得很快。
好了,這期先這樣,時間比較趕,簡單地說一下哈,我是小麥,我們下期再見。
總結
以上是生活随笔為你收集整理的已经学过51单片机,如何进阶?我来教你的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 服务治理·理论篇(一)
- 下一篇: linux内核字符设备文件的自动创建