【小白】【大學】一名嵌入式軟件開發小白的單片機學習歷程、心路歷程、經驗分享

我爲什麼寫這篇文章

先簡單介紹一下我自己

  本人就讀於山東一普通高校,上個月從自己一手創辦的創客社團退位,即將畢業,9月26號拿到了青島一家企業的offer,做嵌入式軟件開發。
  回首大學幾年時間,一晃而過。整個大學生涯進過學生會、帶過社團、參加過大賽、創辦過公司。大一起進入實驗室學習,從電氣到電子,做過電氣控制、工業機器人項目,基於西門子s7-200、200—SMART、300、1200做個幾個大型的項目,基於匯博機器人、棟樑機器人、匯川做個幾個技能技術大賽。交叉於電氣控制技術的學習,大一開始瞭解到51單片機、Arduino,到大二開始接觸ARM,前前後後做個相關項目十餘項,整個學習過程大都靠自學,學習歷程痛並快樂着,因爲參與各類大賽的緣故學習有明確的目標和動力源。大學的整個學習生涯中參與技能技術類大賽、科技創新類大賽取得國賽二等獎兩項、省賽一等獎七項、二等獎五項。經過這幾年的學習和摸索,終於找到了自己的定位,選擇了嵌入式軟件開發方向,並逐漸入了門。

與每一個技術小白共勉

  從迷茫焦慮痛苦到逐漸發現樂趣取得成就感,短短几年時間,技術的成長方面走過彎路,有過很多誤區,對嵌入式學習、自動化學習、電氣控制學習(大學階段)有自己的一些看法和經驗,大學生涯即將結束,走過學校的每一條林蔭小道,經過的每一個洋溢着青春色彩的學弟學妹,回想過去的一點一滴,感觸良多。所以希望通過這個平臺將我以往的經歷記錄下來,把我自己的學習經驗分享給大家,希望每一個剛入大學的學弟學妹們快速渡過迷茫期,找到自己的願意爲之追求一生的目標和事業,今早制定出自己的學習規劃,併爲之努力。我的大學畢業在即,而學弟學妹們還大有可爲,只要努力,萬事皆有可能,任重道遠,我以後會通過這個平臺與朋友們持續分享自己的所得所想,個人對技術的感悟與看法,也會一點點的分享出來,希望以後越來越好,未來可期!

這篇文章寫給誰

  這篇文章接下來會分享我在單片機及嵌入式方面的學習心得、學習歷程。如果你是自動化類專業新生、電子信息類專業新生、計算機軟件類新生想進一步瞭解單片機,瞭解嵌入式和物聯網,如果你決定要學習嵌入式或單片機但是不知道怎麼學,不瞭解嵌入式和單片機需要先學什麼再學什麼,或者不知道學習這些需要哪些資料,那麼我希望我的這篇文章能夠給你帶來幫助。

我的學習經驗分享

我的成長之路

  第一次聽到單片機的概念是在大一上學期一個電子技術類社團的納新大會上,我是衆多參與大會的小白之一,同時接觸到的還有PLC,說實話第一次聽到這個概念,我心裏是沒有什麼感覺的,那時候我根本get不到自己的興趣點,我唯一的優勢就是對任何事物都不排除願意嘗試,相信興趣是可以培養的(這點非常重要,基於這一點認識,我競選了班長,進到學生會,進到實驗室,才最終發現了最適合我的發展方向),可惜的是當時沒有進入這個社團進行電子類技術的學習(原因是當時我在學生會工作,這個社團十分排斥),再後來因爲我是班長的緣故與各個老師關係比較緊密(老師與學生間的溝通橋樑嘛),我們專業的教研主任也是我們專業的負責老師介紹我進入了麥科電氣社團一個電氣技術類社團(我的技術的發源地),開始學習電氣控制技術,並正式進入實驗室學習(那時候社團發展並不好,整個社團團隊加上我只有寥寥幾人,同級的學生只有我自己一個人),有時候機會到來的時候是悄無聲息的,大一寒假,老師在羣裏要求假期提前返校培訓(提前到大年初七),真正參與到培訓的只有五個人,其中4個是大三的學生大一的學生只有我自己,培訓的內容是現代電氣控制,基於西門子s7-200,STEP7,梯形圖編程(這是我接觸到的第一種編程語言,與C差別很大,但是萬變不離其宗),很多朋友不願提前返校培訓,甚至他們可能會覺得我喫虧喫大了,喫虧是福,正是因爲這個假期培訓讓我領先了跟我同級同學院的所有人,等到培訓結束,大家都返校以後,我就開始自己去學着做團隊帶團隊了,那時候幾乎一有閒空就會到實驗室自學,剛開始的一段時間偌大的實驗室只有我自己一個人,慢慢我交結到幾個志同道合的朋友,拉入我自己的團隊一起學習,經常是我先自己去學習一類指令,然後在黑板上給他們講(這段時間進步很快),到2016年5月份(大一下學期)整本PLCs7-200的教程都被我喫透了,很自然的進入了工業機器人的實驗室,加入到全國工業機器人技術應用技能大賽備賽小組(含金量很高),再往後到現在幾乎沒有過任何一個完整的假期,成年累月的在實驗室學習,雖然很累,但是快樂是打心底的。
  2016年4月,接手了大學生涯的第一個項目,由一個電子信息專業的老師指導,基於物聯網的森林防火系統,技術含量很高,用到stm32跑FreeRTOS系統,用了一大堆外設,跑了一大堆的通訊協議,那時候什麼都不懂,軟件硬件大都是老師在做,我們在看,我就只負責簡單的焊板,接線走線,配電箱的打孔這些工作,這個項目雖然我實際接觸到的不多,但是那種第一次去做一個項目去體現我自己價值所在的興奮與喜悅只有經歷過的人才會懂。這是我第一次真正接觸單片機、接觸電子電路,也是我單片機學習之路的開始,值得懷念。4月PLC學習結束後,我立即開始了單片機的自我成長中,我的學習平臺是普中科技的51開發板及相關的一些教學視頻。當時是真正的零基礎學習,沒學過C語言、不懂GPIO、不懂SOC得工作原理,剛開始學習的那段時間因爲涉及內容簡單,學起來沒那麼痛苦,但是學起來也是困難重重,直到開始學習定時器中斷,到了學習瓶頸,又趕上工業機器人項目的集中培訓,單片機的學習中斷了一段時間,集訓結束後,因爲接手了一個基於51單片機的園丁機器人項目,又從新把51的學習拾起來,攻破了定時器中斷的學習瓶頸,進一步學習PWM輸出,及各類外設的簡單控制,成功用園丁機器人拿下了第一個省賽的二等獎,這個項目是我獨立自主設計開發的第一個項目,取得省二的成績真的已經超級開心了,賽後單片機的學習又因爲工業機器人省賽備賽擱置了一段時間,後來2016年10月再次啓動了硬幣兌換機的項目,這時開始慢慢接觸到了STM32(項目用到的是基於ARM cortex-M3架構的STM32f103ze系列單片機),又再一次被這款MCU性能之強大,學習之痛苦震撼到了。在老師的指導下,因爲學習時間緊迫,勉強將硬幣兌換機的項目做出來參賽(12月三個省級大賽),意外的是拿到了省科技創新大賽一等獎,還因爲這個比賽被齊魯衛視幾個媒體報道過,當時在學院也已經算是個風雨人物了(早在16年6月接手了麥科電氣社團和電氣電子創新工作室、納新、活動、培訓一手操辦,能力提升飛速)。
  2017年1月開始,我陷入了一陣迷茫期,迷茫來自未來方向的選擇(電氣方向還是電子方向),說實話我在電氣控制方向也許更有希望一些,因爲電氣方向參加過很多高含金量的比賽,例如全國工業機器人技術應用大賽、“棟樑杯”工業機器人大賽,常用roborstdio做工業機器人的離線編程,精通西門子s7-200、200smart、1200系列PLC的軟件編程及硬件設計搭建,熟練掌握西門子博途硬件組態網絡、SCL程序設計、HMI設計、及組態王軟件應用等,這些都是我在電氣控制方向優勢的一面,而反觀電子方向,當時沒什麼突出的優勢。這個時期很關鍵也很痛苦,一方面要繼續準備工業機器人的國賽,一方面我發現自己在單片機方面更有興趣,這個時間段持續了4個月的時間,直到2017年5月國賽結束,國賽發揮有些失常,因爲國賽要求每個省份只推出兩隻參賽隊伍即一隊、二隊,是代表山東省去參賽,作爲山東省一隊隊長壓力巨大,因爲我帶領團隊失誤,導致做機器人部分的隊員沒有順利發揮,從而只拿到了國賽二等獎的成績。
  2017年5月國賽結束後,我立刻組建團隊設計自己的項目低成本智能分揀流水線,項目還算比較複雜,由24個光電傳感器搭建出一個傳感陣列,來模擬工業相機的作用,這個項目我前後做了三遍,分別用51單片機、arduino和stm32各做了一遍,所用外設也全然不同,一遍比一遍優化,也因此拿下了不少獎項,單片機方面技術長進不小。成功就是這樣熬出來的,現在現在意義深刻。2017年暑假參加了2個省賽,一個電氣類的棟樑杯工業機器人技術應用大賽,這段時間我差點就要選擇要走工控這條路了,大賽拿下了省二的成績(因爲粗心大意把題目要求搞反了一個大題的分丟了,本來是穩穩可以進國賽的),好在機電產品創新設計大賽拿下了省一成績,這讓我更加有信心走好嵌入式單片機這條路,2017年下半年做了兩個大型的電子項目,一個是二足機器人,拿下了省賽一等獎的好成績,一個是“華航唯實杯”的移動機器人項目,去北京參加國賽拿下了國二的成績(這個項目用到了myrio基於labview編程)。再後來2018年開始創業做創客教育,給小孩子教編程,這方面就不多介紹了,18年做了幾個單片機的項目,包括robomaster迷宮機器人、對戰機器人、基於stm32的物料分揀系統等多個項目,基於ARM搭建各種RTOS,基於S5PV210跑Linux系統做了幾個簡單的項目,同時在18年9月創立了自己的創客協會,轉眼就到了今年,忙過去創業,又陸陸續續參加了幾個比賽(包括電子設計大賽、省信息技術大賽),緊接着進入到就業找工作的大軍中了。關於應屆畢業生應聘相關的一些問題和看法,我打算抽時間另寫一片文章來介紹。
  以上就是我從一個菜鳥成長爲一個小鳥(還是很菜)的學習歷程,當然除了技術學習外,我也有一些其他重要的歷程想簡單聊一下,我一直相信我們可以一輩子癡迷技術,但是不能一輩子靠技術生存,因此我建立了自己豐富的非技術目標:
  1、站臺能力(演講、宣講),我從班級班長日常班級例會開始鍛鍊,到學生會宣講活動,到社團各種活動大會(包括走班納新宣講、例會、年會等),到新生開學典禮面對進一萬新生的學生代表發言,經驗分享等。
  2、管理能力,從班級日常管理,到學生會活動組織舉辦,到社團各種培訓活動組織、會員幹事管理創業公司管理、參賽團隊管理等。

我的單片機學習歷程分享

  上面介紹了我整個大學,學習的經驗分享,那麼接下來我就單片機該怎麼學做一下簡單的介紹,並把我自己的學習大綱給大家分享出來,希望這些對你有用:
  首先簡單分析一下什麼時候去學習51單片機最合適,有很多學弟學妹問我,我纔剛上大一專業課都沒學過幾門,現在去學習單片機合適嗎?我想說的是其實51單片機的入門門檻沒那麼高,你只需要會用電腦會打字,高中門檻,學習起來就不會有任何問題,現在有很多孩子從初中就開始接觸單片機了,所以如若認定要學習它就立刻投入學習即可,不需要太多的專業課支持,相反單片機學習的過程會促進你對專業課的學習慾望。至於單片機該怎麼去學習,這個問題,我接下來會介紹到。有學弟會問單片機這個東西要學多久能學通,這要看你自己,你想學到什麼程度,你是不是打算以後從事這方面的事業,還是隻是玩玩而已,如果你只是玩玩而已會編個程序裝裝逼刷刷帥就夠了,那你很簡單,幾天你就可以耍帥了。但是如果你把它看做自己的一份事業,你也許要做好長期學習的準備,嵌入式單片機的學習曲線又陡又長,如果堅持不下去我建議還是不要去做這方面的學習了。
  如果你準備好了可以繼續往下看了

51系列單片機學習歷程

  51單片機的學習,首先你要有一款開發板,開發板就是你學習單片機並實踐的工具。打開淘寶一搜51開發板一大堆信息,當時我用的是普中科技的開發板,普中科技的開發板做的還是非常不錯的,建議要買可以買個外設多一點,功能全一點的,小板子雖然便宜內部電路都是設計好的不需要你拿排線接線,很多東西不容易理解。當然現在網上各種板子資源多了,也可以選擇其他廠家的板子來學,但是教程一定要配套這樣可以減少很多問題的出現,課程的話我推薦朱有鵬老師的單片機完全學習系列課程,我現在系統學習嵌入式軟件開發看的就是朱老師的課,講的非常細緻,又通俗易懂。可惜當年我學的時候,朱老師還沒有開始錄單片機的課程,自己學習遇到大部分問題都要好久才能解決,所以朱有鵬老師的課值得你去學習。預算足夠的話直接看他的課,從51到32,從裸機到跑一些簡單的RTOS,基本上一站搞定(我這不是打廣告,主要還是因爲朱老師講的真的好,簡單推薦一下)。當你買到自己的51開發板以後就可以開始正式的學習了。
  接下來我參照我自己的學習歷程經驗及朱有鵬老師開設的課程簡單介紹一下51學習的大綱

預備知識:(可以查百度)

1、C語言基礎,這個可以去看朱有鵬老師的免費教學視頻,也可以看中國大學mooc裏面各高校的優質課源。也可去看開發板自帶的教程。
2、要了解單片機與c語言的關係,爲什麼要學單片機,爲什麼從51開始學起,瞭解51單片機的介紹。
3、要了解什麼是單片機的最小系統,怎樣去搭建51單片機的開發環境。
4、瞭解ROM與RAM,單片機的工作原理,什麼是外設,軟件與硬件的區別和聯繫。
5、瞭解51單片機發展史,主流單片機及各自特點,51各個系列的特點,簡單瞭解做項目時如何選型主控單片機。
6、開發板功能的學習,這裏要學會去看開發板的功能介紹手冊和電路的原理圖,這個開發板自帶的教程一般都會有。

正式學習路徑

1、學會向單片機下載程序並運行。
2、學習瞭解什麼是Keil軟件並安裝Keil。
3、瞭解什麼是二進制和IO端口,並學會使用IO去點亮LED。
4、瞭解怎麼編寫C程序實現延時功能,並使LED閃爍。
5、C語言循環語句回顧,並實現流水燈。
6、瞭解什麼是數碼管,實現靜態數碼管的初步驅動,瞭解動態數碼管並做相關項目。
7、瞭解LED點陣及字模,編寫驅動,並實現文字顯示,也可以適當做一下項目。(當時用點陣給我女朋友做了一個生日禮物,非常華麗,來自工科生的浪漫,哈哈)
8、瞭解怎麼讀取信號輸入,學習按鍵、外部各種傳感器的使用。
9、瞭解.51單片機的中斷系統簡介,外部中斷、定時器中斷、串口中斷、看門狗中斷,概念學習。(比較難,我第一次的學習就是卡在這裏了)
10、瞭解軟件控制硬件的關鍵-寄存器(很重要,進階32單片機的關鍵)。
11、基於以上所學先去實踐幾個項目,通過項目進行學習才能更好的掌握。
12、瞭解蜂鳴器的原理,瞭解基於定時器中斷怎樣去搭建PWM發生器。,並在蜂鳴器上實踐一下(也可以用舵機來實踐)。
13、學習直流電機的控制,瞭解步進電機理論,並進行步進電機編程實踐。
14、瞭解通信有關的常見概念,學習什麼是串行通信,瞭解51的串行通信相關寄存器,並進行串行通信實戰。
15、學習RTC有關的背景知識,學習時序圖的讀法,編程實踐並添加串口調試。
16、學習DS1302的時間格式詳解,編程向DS1302寫入時間,並及時對程序進行規整。
17、學習EEPROM及其背景知識,瞭解I2C低層時序圖和程序及EEPROM讀寫程序設計。
18、學習AD轉換及其相關背景知識,結合例程分析時序,編程實踐串口直接顯示電壓值,進而學習DA轉換
19、開始學習LCD顯示器相關背景,以及控制器的低層時序,學習LCD1602、LCD12864,瞭解LCD12864低層時序。
20、學習ST7565的指令集,學習並實踐LCD12864顯示文字、圖片。

STM32系列單片機學習歷程

  很多朋友問我,我沒學過51想直接學32可不可行,這個我不好回答,因爲本身我沒有嘗試過,我是從51開始一點一點慢慢學過來的,但是理論上直接學習32單片機也是可行的,只是開始會痛苦一些而已,那有的同學也許就會說,那直接學32就好了呀,這個還是個人,51單片機現在市場也還是有很多產品在用,如果你時間緊急目標就是要把32學好,那你可以直接去學32沒問題,如果你想一點一點吧基礎打好,有的是時間學習,那你也可以先把51學好,再去看32,循序漸進學習的同學學到32就不會那麼痛苦,只需要轉變一下學習方式就好了。
  這裏談一下32和51有哪些差別,首先32的內部資源更多,地址空間上51單片機只有64KB;STM32有4GB。片上資源:51單片機ROM只有2K-64K,RAM僅爲128B-1K;STM32的ROM爲20K-1MB,RAM有8K-256K。外設上:51單片機僅有三個定時器和一個串口;STM32卻擁有AD,DA,Timer,WWDG,IWDG,CRC,DMA,IIC,SPI,USART等衆多外設,操作系統方面:51單片機連RTOS都很難能跑;STM32可以跑很多RTOS。所以學習起來,兩者之間是存在很大差別的。
  好了接下來介紹一下STM32的學習大綱

預備知識:(可以查百度)

1、自學STM32的來歷背景。
2、學會去看各個SOC的Datasheet。
3、瞭解STM32簡單中文手冊。
4、瞭解STM32的各種仿真器調試器是怎麼回事。
5、瞭解STM32的標準庫和HAL(cubeMX)庫是怎麼回事。(這個非常重要,32的編程學習與51還是有很大差別的,51的學習大都通過寄存器直接配置編程控制,32除了寄存器控制外,st爲32提前做好了大量的庫文件,我們在編程是隻需要按需要調用調參即可)
6、瞭解STM32的存儲器映像,與51的可以按位尋址不同,這裏要重點了解攻破。
7、學會STM32的位帶操作,既然不能按位尋址,這是我們的解決辦法。
8、瞭解STM32的啓動模式。
9、瞭解STM32的電源管理系統。
10、學習STM32的時鐘框圖。
11、看開發板原理圖瞭解開發板詳情。
12、學習開發板ISP下載原理分析。
13、瞭解STM32F4的浮點運算單元是怎麼回事。
14、學習瞭解MDK5軟件的安裝使用。
15、學會使用JLINK程序下載。

正式學習路徑

1、基於庫函數學習新建工程。
2、基於寄存器學習新建工程。
3、看數據手冊瞭解GPIO工作原理,及重要的寄存器。
4、學習利用GPIO實現LED的控制。
5、學習利用GPIO實現按鍵等數字量傳感器的信號讀取。
6、學習 STM32時鐘系統精講。
7、學習時鐘系統初始化函數的使用並實踐。
8、瞭解端口複用和重映射功能。
9、學習NVIC中斷優先級管理。
10、學習串行通信原理講解-UART。
11、學習STM32串口寄存器庫函數配置方法。
12、學習外部中斷-EXTI,並利用按鍵進行實踐。
13、瞭解獨立看門狗、窗口看門狗。
14、學習瞭解通用定時器基本原理。(基於51中斷系統再來學習32會容易很多)
15、編寫程序配置定時器中斷實現LED閃爍功能。
16、學習PWM輸出配置實現。
17、瞭解基於中斷系統的輸入捕獲。
18、學習OLED顯示的基本原理,並調用庫函數進行控制實驗。
19、瞭解LCD-TFTLCD原理與配置介紹。
20、學習USMART調試組件。
21、學習RTC實時時鐘_備份區域BKP 原理並變成實踐。
22、學習如何待機喚醒-實現低功耗。
23、學習ADC基本原理。
24、編程實現ADC模數轉換實驗。
25、利用ADC實現內部溫度傳感器實驗。
26、學習並進行DAC數模轉換實驗。
27、學習如何利用定時器配置 PWM。
28、 DMA基本原理學習及編寫程序實驗.
29、學習I2C通信實現基於I2C通訊的傳感器信號讀取。
30、學習SPI接口原理與配置。
31、學習485通信。
32、學習CAN通信基礎知識並實現CAN控制器配置。
33、學習並進行觸摸屏實驗。
34、學習紅外編碼並進行紅外遙控器實驗。
35、學習MPU6050六軸傳感器實驗。
36、學習並進行2.4G無線通信實驗。
37、學習FLASH閃存編程原理與步驟,利用FLASH模擬EEPROM實驗。

結束語

  以上是我分享的學習歷程,希望能給你帶來一定的啓示與幫助,嵌入式軟件方面的內容,我還在不斷努力的去學習,未來的學習道路還長,我會把我在學習之路上的感想慢慢與大家分享,最後一句話與大家共勉:理想,是我們一步一個腳印踩出來的坎坷道路。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章