剛才我看到一個帖子,回答了一個單片機學習者的問題。但是我個人覺得這個問題比較有普遍性,想謝謝自己的經歷,給那些愛好單片機,以及正在學習單片機的朋友們。 我大一的時候,就加入了學校電子實驗室,學習51單片機,那個時候沒日沒夜的學單片機編程。從最簡單的LED到后來的各種協議,用51單片機運用自如。后來上了大二,我記得那個時候正逢湖北省電子設計大賽,我有幸被選拔為參賽成員,由于大賽的規定,我不得不轉入msp430單片機的學習。由于有熟練的51單片機的基礎,所以在學習430的時候,上手很快。熟悉了430的寄存器,基本上就能夠上手變成了,就這樣,我學習了半年的MSP430單片機。 在學習單片機的同時,自已學習電路以及PCB的設計,從基本的模塊到整個大的系統,自己都嘗試做PCB。可以說PCB是我一直堅持學習的。從大一到大四,以至于現在我仍然設計一些PCB,但是相比于學校的,公司里面的更為復雜,要求更為苛刻。因為涉及到高頻PCB布線,我就不詳述了。總之,學習單片機的同時,硬件也在步步跟進。自己做開發板,自己做一些小玩意。 后來,玩430覺得不過癮,又買了PIC和AVR的開發板學習,可是學來學去,總是那么幾個模塊,那么幾個協議。后來我自己嘗試著做了一套AVR的開發板,花了一個暑假的時間,調通了所有的配套模塊。當時是在大二下學期的時候,當時還準備把開發板發到淘寶去賣,后來發現,淘寶各種類型的開發板太多了,生活費都賺不來,所以,我把我那些開發板都分給了我的學弟們。后來想學習高速PCB設計,那時候有幸認識了黃文聰博士,是帶我進入高頻PCB設計的老師,不是他,或許我還永遠停留在altiumDesigner的層面,在黃老師的指導下,我學習了cadence以及allegro PCB布線,學習了各種布線要求,以及DDR布線技巧,等長約束等各類約束技巧。以至于后來我大學找工作跟面試官談起allegro 高速布線,面試官都有些詫異。 后來有幸認識了學校的一個教授,那個時候正是STM32正火熱的時候,我第一次接觸STM32,感覺很興奮,當時學的STM32F103能夠倍頻到72M,當時學習用STM32驅動攝像頭等各種模塊,因為當時有一個小項目是做視頻采集的。所以用51或者430基本上力不從心,速度太慢,刷屏超級慢。所以,我投入了很多精力去學習STM32。從基本的GPIO到各種協議的驅動。都一遍遍的看代碼,寫代碼。那個時候有點傻,第一次學習STM32的時候,竟然是用寄存器編程的。那次寫一個ADC的程序,光寄存器就是有好幾十個。現在想想,悔不當初,用庫開發又快。但是轉念想想,學了寄存器也挺實用的。至少現在用庫開發的時候,知道寄存器里面是怎么配置的。從大三上學期學習STM32一直到現在,敲過的代碼不算少了。但是我總覺得還差點什么。 是的,還差點什么?我在大三的暑假的時候,在與帶我的教授聊天中,我知道差點什么了。那就是算法,單片機的核心不是說你能如何熟練的玩轉單片機。如何的熟悉每一個寄存器,每一個寄存器的地址。這些都不是的。我后來總結了一下,無論是51,,40,avr,pic,stm32。我們學習的時候,一開始就是點亮發光二極管。后來就是學習I2C,SPI等各種外設。但是驅動這些外設真的不難,有參考代碼,有官方的數據手冊,這一切都不是問題。特別是我現在工作之后,特別能體會到這點,單片機種類不限于多,在于算法的精。在公司,用什么型號的單片機,完全老大說了算,今天選飛思卡爾,明天用LPC的,后天又用英飛凌的單片機。等等,大學時間有限,你如何能學完所有單片機。單片機種類和型號那么多,你如何能記住全部的寄存器? 再談談找工作吧。 當時我滿以為我精通4大單片機,4-6層PCBLayout,找工作應該很順利吧?可是,卻也有不盡如人意的時候。我面試的第一家公司是CVTE,廣州視源。那待遇是沒的說,我當時帶著自己厚厚的一本項目集,第一輪面試的時候,我把項目集交給了面試的HR,面試竟然很順利的通過了。大家都知道CVTE的要求之高,后來我如約收到了CVTE的專業筆試短信,我后來專心準備了一番,功夫不負有心人,筆試竟然過了,筆試考試的全部是模擬電子方面的內容,后來我在專業面試環節掛了。面試我的應該是一名技術大牛,跟我談了很多的技術問題,我當時還自我感覺良好。最后一句話讓我記憶深刻:我覺得你專業技術運用的不夠靈活,就這樣,我被淘汰了。 之后,我又應聘了臺達,應聘的方向是做電源。筆試面試都過了,后來連三方協議都簽了,最后我還是違約了。我拒絕了臺達,因為后來我發現,不是提供的研發崗位,只是跟我說以后能轉研發崗位。我覺得不靠譜,就拒絕了。 后來又陸陸續續面試過幾家公司,有人家不同意我的,也有我不滿意企業的。就這樣來來回回折騰了一個月。由于找工作非常疲憊,當時打算,有研發崗就去。就這樣,當時廣州數控來武漢理工開宣講會,我去投了簡歷,簡歷上明確寫了崗位意向是研發崗位。后來如愿與廣州數控簽約了。 工作中,經常要設計PCB以及各類模塊的調試,有的時候一些底層的代碼也要自己寫。但是單片機型號就不固定了。各種型號的都有。現在想起來,以前在學校的時候,把太多時間浪費在各種類型單片機的學習中去了。但是另一方面,各種類型的單片機的學習,增加了你在找工作中的籌碼。 工作了這么久,想寫點心得給未畢業的學弟們,也是我以前認識的一些誤區,分享一下。 1、MCU學的種類不在于多,在于精,再設計過程中,什么樣型號的單片機都可能被用到,在我看來,只要是不涉及加載系統的,單片機都一回事,從基本的51到ARMv7,沒有本質區別。無非是資源的多少,處理速度的問題,以及開發調試便利性的問題。 2、要非常熟練基本的通信協議,了解本質和原理,I2C、UART、SPI、CAN、485等等這些最最基本的協議。不要糾結于是調試飛思卡爾某型號的SPI,還是STM32的SPI,亦或是MSP430的SPI等等。 3、扎實的C語言基礎,多把時間花在對C語言深層次的理解上,說實在的,用51單片機點一個LED,和你用ARM點一個LED,沒有區別。切莫成為“一燈大師”。掌握單片機語法和算法,是最重要的。我記得以前在大學,單片機種類自學了很多,基本的51單片機、AVR,MSP430,PIC16F,STM32,現在想想,學的有點過了。單片機種類真的不是問題,重要的是算法。 4,模擬電子和數字電子,這個是最最基本的必須要掌握的。不要局限于課本,課本的知識只能應付考試,在工程設計中,課本上的內容完全不夠用,建議買一些小日本或者美國佬編寫的模擬電子的書。 5,說到設計PCB的軟件,入門用AD,想升級的使用PADS或者Cadence。如果還有用protel的,趁早轉AD或者PADS。AD適合2-4層低速電路板設計,PADS在手機主板設計領域比較多(以前華強北的手機主板基本都是PADS畫的),至于Cadence,中興華為聯想小米等公司現在主流設計軟件,就不多說了。 最后我想說的是,學好技術,不會說工作不好找的。待遇不會差的。在大學里,不要太沉迷于單片機的設計,如果有精力,轉嵌入式設計,或者安卓開發。這個以后是很好的發展趨勢,需求量也大,我找工作那會,安卓開發人才急缺,如果你覺得搞安卓開發和嵌入式linux做不來,那就老老實實學好單片機和模電數電等硬件軟件開發 |