學習單片機有一學期了,現在也由51轉到STM32了。一直想對51的學習做一個總結。也希望對別人有一些啟發。也給后學者提供一些建議。當然本文是我對自己學習過程的總結,若有不對的地方,還請高手指出。
我想,再看本文之前,最好對單片機有了最基礎的了解,最好能用單片機驅動起一個LED燈,否則,可能會不知所云。 首先我想問一個問題,你認為單片機有哪些內容呢?也許你現在手里有一塊開發板,你已經開始從流水燈開始,一個一個外設在跑了。也許你已經看過一些單片機入門的書了。如果是這樣,我估計你會回答,單片機包括了流水燈,鍵盤,數碼管,定時器,中斷,串口,AD,DA,液晶,DS18B20……其實這樣的回答其實符合了大多數初學者的心態。因為天祥老師的視頻也是這么教的。但是當你會操作流水燈,鍵盤,數碼管,液晶,你有沒有發現他們有一個共同點,就是都是通過I/O口輸出或檢測高低電平來驅動這些外設,那我們可不可以把這些模塊歸為一類,就叫I/O口操作呢,那么這樣,要學的內容就又被濃縮了一下,可分為四個模塊了,I/O口,定時器,中斷,串口。對于AD,有的單片機,例如宏晶公司的加強型單片機就自帶了AD,若使用AD芯片,則也屬于I/O部分,AD部分我放到后面再提。 這樣,學起來條理就清楚了,其實當你驅動了流水燈和按鍵模塊。可以說,你就完成第一部分,I/O口的學習了。I/O的輸入和輸出你都學會了。至于數碼管,液晶,那是為了加強你I/O口編程的能力,說來說去,就是在什么時間輸出高電平,什么時間輸出低電平以符合他們的通信協議而已。如果你能理解他們都是I/O操作,學起來這些是很簡單的。 接下來,繼續定時器,中斷的學習,無所質疑,定時器與中斷是分不開的,沒有中斷,定時器也很難實現功能。在這里,建議先學習外部中斷,如果你認真的學完外部中斷,我想你應該能深刻了解中斷的含義(這里插一句,一定要理解中斷,為后來更高級處理器的中斷系統打基礎),在學定時器與定時器中斷。如果你能深入學習定時器與定時器中斷,我想這是,你應該能用數碼管做一個電子鐘了,具體實現就看你的編程水平了,可以試一試哦。 然后,花一把功夫學完串口通信,我可以對你說,你把單片機的內容學完了。現在,你可以試著把這些分立的模塊組合做成一個實際的東西鞏固一下。這時,但是,你要知道,還有更多的事等著你。現在只是基礎,你前面學的是單片機自身的內容,這時,你需要去了解單片機的外圍設備了,例如AD,DA,I2C,SPI等等內容了。但是,有些單片機自帶了AD的功能,但我仍然不把他列入單片機自身的內容,包括PWM,也不屬于單片機的內容,盡管有些單片機帶這個功能。這些外設還是需要花大氣力研究的,學到這里,你應該很容易讀懂芯片的時序圖了,也就是協議。這時對于DS18B20,紅外,315M無線通信等等,應該都不在話下了。 你原先的程序都是在開發板上跑的,你現在可以學習如何自制電路板了,也就是學會畫板,推薦使用Altium Designer軟件。現在可以自己畫一塊系統板,做出來,看看能不能工作。如果不能,找找原因,可以跟你說,這個是必須要會的。至此,單片機學的差不多了。 但是,更高的目標還在等著你,因為,一開始就是用C語言在編程,對底層的認識比較淺薄的,你可以看一看單片機的匯編語言,不要求你會寫匯編,但至少你要能看懂別人的匯編代碼,你可以接觸一下底層寄存器到底是怎么工作的,怎么尋址的。在這里插一句,以前你寫代碼時第一句總是#include<reg52.h>,我想如果把這一句去掉,你還能讓編譯通過嗎?你理解這個文件里有哪些內容嗎,把這個文件里的定義弄明白了,51單片機的寄存器也就差不多了。這時,你應該熟悉了51單片機了。這時學習其他單片機也應該很簡單了,只是換一種編譯器,寄存器改了而已,原理是不變的,反正都是用C語言編程,只要稍微改一下就完全可以適應另一種芯片。這就是我的整個學習過程,僅供參考。 這時,你需要的就是培養單片機的開發經驗。這時,不能說你精通了單片機,只能說會用單片機了。我想問一句,這時,你可以開發一個倉庫多點溫度測控系統,數據傳回電腦并處理嗎?不能,我也不能,但是如果你花大學四年時間就搞51的話,我確定是可以的。在這里就涉及到一個方向選擇問題,關于方向選擇,我的學長張永翔給了我比較好建議,這時你有兩個方向,一個往低層做,就是繼續學習51單片機開發,你的目標就是用最簡單的芯片,最低的成本實現最復雜的系統,比的是成本,也就是說,實現同樣功能的系統,你可以用比別人更低的成本,更簡單的硬件,更高效的算法去完成,這樣你才有市場。另一個當然是往高層做,去學習更高級的單片機,學習ARM嵌入式,操作系統,不過這條路比前一條難很多,當然就業的報酬也很多。只是,你要花更多的時間以及更高的投資,ARM開發板等等,這可不是一筆小數目,你要花的起,當然,從文章的第一句就知道了,我選的是后者。其實我覺得,作為本科生,還是選擇后者比較好,回旋余地大,可以繼續考研的。我現在還記得我的電路分析老師說的一句話,“現在學電子的本科生,如果你畢業時只會一個單片機,你就廢了”,我覺得還是挺有道理的,作為本科生,尤其是電子專業的本科生,往高層做是必須的,而且隨著技術的發展,高級單片機例如STM32的成本也一直在下降,高級單片機的普及已成為一種趨勢了。 當然,這只是個人的理解,仁者見仁,智者見智。若有不同見解,歡迎討論。再次重申,本文系個人的總結,若有不對的地方,請指正。
|