大家好,我是小麥,最近有朋友問,已經學過51單片機了,如何進階?
問題
事情是這樣的,他在本科時期已經有相應的單片機開發經驗,做過簡單的項目,流水燈,倒計時,紅綠燈,後面該如何提高呢?
首先我感覺得給進階下一個定義,也就是明确也學習目标,怎麼樣才算進階?我掌握哪些東西,可以獨立完成哪些開發任務,才算達到了進階的目的呢?
如果單純是單片機開發的進階?
我認為入門的階段是這樣的:
我認為的進階是這樣的,需要掌握這些;
之前也有朋友問我,自己想做一些DIY項目,軟硬件都自己設計,該如何學習?他是搞互聯網專業的,做嵌入式單純是愛好,享受生命在于折騰的快樂而已;
硬件設計新手建議使用Altium Designer,教程比較多,國産軟件立創EDA也不錯,開源的KiCad也可以使用,選一款就行,軟件都大同小異,不要在糾結選擇哪一款軟件上而浪費時間,我個人建議使用Altium Designer,下面簡稱AD;
網上有很多免費的教程,可以去搜一下,看完教程一定要自己嘗試着設計一個電路,可以簡單一點,設計一個單片機的最小系統。
鍊接:https:///s/1yKfsttgIBeKKMK65m9H91g
提取碼:pzsz
軟件設計單片機的編程開發是必須要掌握C語言的,彙編語言可以簡單能讀懂就行,調試的時候能簡單看懂反彙編就行,所以要把主要精力放在C語言上,其實,初期C語言會常用的語法:
就可以做很多事情了,但是後面還需要進階,因為寫出健壯高效,可複用,可移植的程序,隻會這些還遠遠不夠。
好了,我們學習了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),自己搭建開發環境,然後找到相應的芯片的固件庫,這些都能自力更生,就非常不錯了。
多提問,多交流一個人,走得快,一群人,走得遠;所以要多與人交流溝通,不恥下問,這裡一定要注意提問的技巧;下面是我認為的幾點;
加入嵌入式技術交流群一起進步
最後這篇文章裡我簡單地聊了一下如何進行單片機進階,個人認為需要硬件設計和軟件設計兩部分;
如果詳細展開,每個部分都有很多東西可以學習的,其實感覺最初能做簡單的PCB,然後在這硬件基礎上進行相應的軟件開發,就已經達到了一個進階的目的,後續需要的是不斷在項目中進行提高,可以不斷積累硬件方面的經驗,另外還需要系統地學習基礎知識,比如計算機系統(微機原理),C語言,數據結構等,軟件部分可以多看一下開源的優秀項目,學習他們的設計思想,這樣會提高得很快。
好了,這期先這樣,時間比較趕,簡單地說一下哈,我是小麥,我們下期再見。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!