找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3288|回復(fù): 1
收起左側(cè)

學(xué)習(xí)單片機(jī)怎么入門

[復(fù)制鏈接]
ID:115111 發(fā)表于 2016-4-28 03:21 | 顯示全部樓層 |閱讀模式
      這篇文章針對的是那些剛剛知道單片機(jī)這個(gè)東西,而且對他很感興趣,想學(xué)習(xí)但是又無從下手的小白。這里面可能大多數(shù)大學(xué)生,也可能有少數(shù)是電子愛好者,不管是什么身份,只要對單片機(jī)感興趣,就一定能學(xué)會(huì)它,而掌握了正確的學(xué)習(xí)方法則會(huì)快速的學(xué)會(huì)它。其實(shí)不管是單片機(jī)還是其他的任何東西,只要你擁有極大的興趣,投入全部精力,就會(huì)很快學(xué)到它。筆者之前是做管理的,由于對軟件開發(fā)感興趣,所以就辭職專門學(xué)習(xí)IOS開發(fā),由于有C的基礎(chǔ)(大學(xué)畢業(yè)到現(xiàn)在一直在玩單片機(jī)),所以僅僅只用一個(gè)月,就寫出了一個(gè)約一萬行代碼的記賬軟件,現(xiàn)在剛上架在審核中。
        話說回來,既然這篇文章面對的是新手,那肯定會(huì)有好多大神提出不同的觀點(diǎn),當(dāng)然,對于新人來說,最好是權(quán)衡自己的條件,去選擇最佳的學(xué)習(xí)路線。只要能快速學(xué)到知識,不同的方法都可以試試嘛。

        接下來我就講講我和單片機(jī)的故事。

        現(xiàn)在想起來我接觸單片機(jī)也是被動(dòng)接受的,并不是主動(dòng)的想去學(xué)習(xí)它。大一的時(shí)候有C語言這門課程,到學(xué)期末兩周,C語言課程有一個(gè)集訓(xùn),就是在實(shí)驗(yàn)室使用一套巡線智能車完成教程中的內(nèi)容,現(xiàn)在想來很簡單,那個(gè)套件根本算不上智能車。但是當(dāng)時(shí)我對單片機(jī)并沒有什么概念,開始集訓(xùn)后老師就講了這個(gè)套件可以怎么用,能實(shí)現(xiàn)什么功能,并帶領(lǐng)我們在電腦上完成了keil的安裝和燒寫器驅(qū)動(dòng)的安裝。當(dāng)時(shí)大一,沒怎么玩過電腦,而且根本不知道單片機(jī)這個(gè)東西(因?yàn)楫?dāng)時(shí)那個(gè)套件中單片機(jī)是在一塊開發(fā)板上的,在我眼里就是一塊電路板而已)。老師講完就走了,我們就在實(shí)驗(yàn)室自己看著書搗鼓書上那些代碼,有問題的時(shí)候就跑去找老師解決。通過這樣的一周學(xué)習(xí),我們能讓智能車跑起來了。接下來要實(shí)現(xiàn)的功能是用完成智能車巡線,地上有一條2CM寬的黑線,機(jī)器人要跟著這個(gè)線走,實(shí)現(xiàn)的原理就是使用傳感器檢測地面上的黑線,如果是黑線,傳感器返回0,如果不是黑線,傳感器返回1,然后根據(jù)返回值的情況去設(shè)置車左右兩個(gè)輪子的驅(qū)動(dòng),進(jìn)而讓車巡線。我記得我當(dāng)時(shí)對這套東西特別感興趣,正好大一期中買了筆記本電腦,就跟老師溝通好晚上把白天在實(shí)驗(yàn)室用的這一套智能車套件帶回宿舍,用自己的電腦繼續(xù)玩,后來我和自己的搭檔不但完成了集訓(xùn)要求的內(nèi)容,而且做出了很多新的花樣,給老師留下了不錯(cuò)的印象。也正是因?yàn)檫@個(gè),對我以后產(chǎn)生了深遠(yuǎn)的影響。

        大二開學(xué)剛來到學(xué)校,就接到老師的通知,從全年級選了五個(gè)人出來繼續(xù)做之前的智能車套件,目的是在兩個(gè)月后參加深圳的智能車比賽(筆者大學(xué)是在北京上的),這對我來說是個(gè)不小的誘惑,在做自己喜歡的事情的同時(shí)還可以去這么遠(yuǎn)的地方走一遭,此樂何極。所以我就接下了這個(gè)任務(wù),并且每天廢寢忘食的開始研究,在這段時(shí)間里,我總算對單片機(jī)有了較深的了解。在準(zhǔn)備比賽的過程中我經(jīng)常遇到難以解決的問題,這個(gè)時(shí)候我就會(huì)去圖書館查閱相關(guān)資料(大學(xué)的圖書館是個(gè)好地方,學(xué)弟學(xué)妹們有時(shí)間一定要多去走走),也正是這段時(shí)間,我知道了匯編,知道了電路板是怎么設(shè)計(jì)的,知道了傳感器的基本原理,知道了元器件的線性工作特性與死區(qū)。。。每當(dāng)遇到問題的時(shí)候,我就停不下來了,不斷調(diào)整自己的算法,通過不同的參數(shù)對比找出問題的原因,或者是去查閱相關(guān)知識,因此也逃了不少其他的課程。又幾次甚至嫌回宿舍睡覺浪費(fèi)時(shí)間,直接帶了被子到實(shí)驗(yàn)室打地鋪,最后感覺睡地上不舒服,索性起來熬夜做。最終我們團(tuán)隊(duì)在深圳的比賽中獲得了二等獎(jiǎng)。我原以為我們的成績應(yīng)該是不錯(cuò)的,但是當(dāng)真的去了賽場,我才發(fā)現(xiàn)我們和別人的差距有多大:我們是大學(xué)組,有好多高中組的做出來的效果已經(jīng)讓我們瞠目結(jié)舌了。更何況其他大學(xué)組。有一些我們以前遇到的難以解決的問題,比如如何提高巡線精度等問題,我們的解決方案都是通過調(diào)整軟件中算法的參數(shù)去解決的,但是發(fā)現(xiàn)更高效而且穩(wěn)定的辦法是通過硬件去解決,在不違反比賽規(guī)定的前提下增加傳感器數(shù)量,這樣就提高了測量精度,進(jìn)而降低了算法的難度,也就提高了系統(tǒng)的穩(wěn)定性。

        所以參見完比賽我就開始了解電路設(shè)計(jì)的一些東西,并在網(wǎng)上免費(fèi)報(bào)名參加Altium Designer公司舉辦的社會(huì)培訓(xùn),通過自己的學(xué)習(xí),最終掌握了電路板的設(shè)計(jì),當(dāng)時(shí)記憶最深刻的是為了學(xué)會(huì)每個(gè)電路元器件的用途、性能、封裝,我去圖書館找到了一本元器件大全,就像字典一樣的書,當(dāng)時(shí)把那本書翻了好多編,也逛了不少論壇,嘗試畫了不少電路PCB板,但那個(gè)時(shí)候只是紙上談兵,并沒有實(shí)際的制板經(jīng)驗(yàn),而且畫的都是雙面板。
        大三我們開始學(xué)習(xí)單片機(jī),學(xué)的是51,(大學(xué)一般單片機(jī)課程都是51),用的編程語言是匯編。也學(xué)習(xí)了計(jì)算機(jī)基本原理,還有數(shù)字電路、模擬電路等課程,下學(xué)期開始學(xué)習(xí)自動(dòng)控制原理。在這一年中我跟老師做了不少項(xiàng)目,其中有MSP430單片機(jī)、也有51,也嘗試過ARM7和STM32,在北京市電子設(shè)計(jì)大賽中獲得過一等獎(jiǎng)。這個(gè)時(shí)候因?yàn)橐恍┩饨缫蛩,我對單片機(jī)的愛好沒有那么強(qiáng)烈了,后來又一段時(shí)間沒有做什么項(xiàng)目,直到大四,開始覺醒,并跟著老師做了幾個(gè)項(xiàng)目,這其中有物理實(shí)驗(yàn)的試驗(yàn)箱的制作(我負(fù)責(zé)硬件設(shè)計(jì)和下位機(jī)與上位機(jī)的通訊,下位機(jī)程序設(shè)計(jì))并參加北京市物理實(shí)驗(yàn)競賽獲二等獎(jiǎng)。也跟著老師做了企業(yè)的太陽能板的項(xiàng)目,畢業(yè)設(shè)計(jì)做了S3C2410上的LINUX移植和驅(qū)動(dòng)編寫的課題(當(dāng)時(shí)這樣的課題對本科生來說難度是有點(diǎn)大的)。

        很不幸的是筆者大四簽訂工作的公司是重工企業(yè),也做海洋平臺(tái) 的制造,我當(dāng)時(shí)應(yīng)聘去是做電儀設(shè)計(jì)的,在這里設(shè)計(jì)的東西都是有行業(yè)規(guī)定的,沒有什么可以創(chuàng)新的東西,每天工作死氣沉沉,在這樣的環(huán)境下呆了大概兩年,終于不能忍受乏味的工作生活,于是辭職(當(dāng)時(shí)我辭職的時(shí)候并未確定下家公司,因?yàn)槲蚁氲氖侵匦聦W(xué)習(xí)電子相關(guān)的東西,而因?yàn)樽约簝赡隂]有接觸這方面的東西,已經(jīng)遠(yuǎn)遠(yuǎn)跟不上了,所以需要專心學(xué)習(xí)一段時(shí)間).

        在這里我開始回答這篇文章題目中提出的問題,這也是我在一些論壇和QQ群中每天都會(huì)看到有人在問的問題,接下來我將把我的一些觀點(diǎn)和經(jīng)驗(yàn)介紹給各位同仁,由于我也是菜鳥,所以個(gè)別觀點(diǎn)難免偏頗,希望大神不要笑話,能給我和其他新手一點(diǎn)指導(dǎo)意見,大家共同提高。

        1、我是新手,我想學(xué)單片機(jī),應(yīng)該學(xué)51還是直接上手ARM?

        答:學(xué)習(xí)任何東西,學(xué)的都是思維。而單片機(jī)本身只是一個(gè)工具,這個(gè)工具是用來實(shí)現(xiàn)我們的思維的。比如我通過學(xué)習(xí),知道了可以使用單片機(jī)控制LED燈閃爍(原諒我使用這個(gè)太常見的例子)那么你想讓單片機(jī)怎么閃爍,或許你的想法和別人都不一樣,有可能你做出來的閃爍效果是最好看的,這就是你的思維通過學(xué)習(xí),加上自己的天賦比別人厲害的地方。那么你所想的這個(gè)閃爍效果如何實(shí)現(xiàn)?至少得借助一個(gè)工具吧,這個(gè)工具就是單片機(jī),那么這個(gè)單片機(jī)如何實(shí)現(xiàn)你的想法,也就是控制流程?那你就需要了解這個(gè)單片機(jī)。當(dāng)你了解了之后,你發(fā)現(xiàn)其實(shí)原理很簡單,而且不只是你所了解的這款單片機(jī)原理簡單,而是所有的都這般簡單。所以你高興的上手寫程序了,你要用程序把你的控制流程寫出來,這時(shí)候你突然發(fā)現(xiàn)沒那么簡單了,當(dāng)你把你的控制流程轉(zhuǎn)換為單片機(jī)的控制流程時(shí),你發(fā)現(xiàn)你遇到困難了,就好比你想喝水你會(huì)去用手拿杯子送到嘴邊,因?yàn)槟愕氖謺?huì)聽從大腦的智慧。可是你不知道單片機(jī)的手在哪里,你不知道單片機(jī)的大腦運(yùn)行有多快等等。所以這個(gè)時(shí)候你要停下來研究你要用的這個(gè)單片機(jī)了。你會(huì)去了解它的手和腳(IO、Uart、I2C等)還要去了解它的大腦(頻率、架構(gòu)、寄存器)等,然后你就像翻譯語言那樣很順利的就把你的控制流程教給單片機(jī)了,它按照你的想法完成了讓LED閃爍的任務(wù)。突然有一天你的想法變得更復(fù)雜了,之前的單片機(jī)滿足不了你了,然后你就要使用更強(qiáng)大的單片機(jī)了,你去了解另一個(gè)單片機(jī),你驚喜的發(fā)現(xiàn)它竟然是那么像之前你用的那個(gè),唯一的區(qū)別就是資源更多了,性能更強(qiáng)了,速度更快了。于是你在很短的時(shí)間就完成了學(xué)習(xí)并把你的想法移植在它上面。說這么多,無非就是想說,單片機(jī),原理大同小異,選擇一個(gè)學(xué)就是了,不用把太多的時(shí)間花費(fèi)在糾結(jié)學(xué)那個(gè)上面,有你糾結(jié)的時(shí)間,或許你已經(jīng)學(xué)會(huì)怎么點(diǎn)亮LED了。所以我的建議是,花盡量少的錢,在網(wǎng)上買個(gè)51開發(fā)板,然后按照板上帶的一些資料開始學(xué)就行了,等到你把店家給你的資料中的代碼完整的寫一遍,你就基本上掌握了51,然后你會(huì)發(fā)現(xiàn),拿到ARM的板,你稍微熟悉一兩天就可以上手了。當(dāng)然,你想使用STM8、STM32、AVR都行,最重要的是,選擇一個(gè),就把它徹底掌握。
        2、我初學(xué)單片機(jī)是使用C語言呢還是匯編語言?

        對于語言的選擇,個(gè)人認(rèn)為學(xué)習(xí)C比較簡單,畢竟C語言是其他大多數(shù)語言的基礎(chǔ),而且和匯編想比較容易理解多了,在初學(xué)單片機(jī)的過程中,我們要掌握單片機(jī)的工作原理和操作,而C語言相當(dāng)于我們操作單片機(jī)的工具,這時(shí)候我們應(yīng)該把重點(diǎn)精力放在單片機(jī)上,那有人就問了,如果我不把C語言學(xué)精,怎么去使用它操作單片機(jī)?對此我建議,想學(xué)單片機(jī)的人,先集中精力花費(fèi)一個(gè)月的時(shí)間去學(xué)習(xí)C語言。學(xué)會(huì)變量的定義、使用、函數(shù)的聲明、調(diào)用、宏定義、條件編譯、數(shù)組、分支、循環(huán)、等,基本就差不多可以操作單片機(jī)了,等到單片機(jī)學(xué)到一定程度,你會(huì)發(fā)現(xiàn)自己的C語言那一塊欠缺,然后再去針對性學(xué)習(xí),這樣互相補(bǔ)充,很快你就是大牛了。在學(xué)習(xí)的過程中你會(huì)享受到那種讓機(jī)器按照你的思維動(dòng)作的樂趣。而匯編語言由于直接操作寄存器的,比較枯燥而且麻煩,如果一開始學(xué)這個(gè),很容易對單片機(jī)失去興趣。關(guān)于C語言的學(xué)習(xí),我后續(xù)會(huì)發(fā)布一個(gè)學(xué)習(xí)路線供大家參考。

上面寫到我的個(gè)人經(jīng)歷,回答了新手學(xué)習(xí)單片機(jī)選擇什么單片機(jī)入門好,還有選擇什么編程語言適合新手這兩個(gè)問題,接下來我們討論選擇什么平臺(tái),以及學(xué)習(xí)的路線。


        3、新手學(xué)習(xí)單片機(jī)選擇用什么開發(fā)平臺(tái)?

        在這個(gè)問題的回答里,我把軟硬件平臺(tái)統(tǒng)一囊括在一起。

        1)、軟件平臺(tái),在第一個(gè)問題中我建議大多數(shù)新手使用51起步,具體就是AT89S51\AT89S52這兩個(gè)芯片,如果你確實(shí)選擇用它了,那編程軟件就是keil forC51,這時(shí)候很多新手都會(huì)存在一個(gè)問題,究竟是買一塊開發(fā)板實(shí)際操作呢,還是使用Proteus這樣的仿真軟件進(jìn)行仿真呢?我這里的回答是,剛開始學(xué)習(xí)單片機(jī),千萬不要使用Proteus仿真,現(xiàn)在一個(gè)開發(fā)板也不貴;ú坏100大洋就可以買一個(gè)開發(fā)板,買的時(shí)候不要買功能太強(qiáng)大的,因?yàn)橐婚_始你入門,需要的板上資源其實(shí)不多,有l(wèi)ed,有按鍵,差不多就可以了。而學(xué)習(xí)IO口、定時(shí)器、計(jì)數(shù)器、中斷、看門狗、串口通訊,這些都可以用led去模擬實(shí)驗(yàn)效果。后期學(xué)習(xí)其他的東西,如果板子上沒有,沒關(guān)系,一般的板子IO口都可以擴(kuò)展出來,所以我們直接使用面包板或者焊接來搭建其他電路。通過使用真實(shí)的板子進(jìn)行學(xué)習(xí),你不但可以對單片機(jī)、各種資源、各種元器件有一個(gè)直觀的認(rèn)識、而且你可能會(huì)遇到一些只有在現(xiàn)實(shí)的元器件上才會(huì)發(fā)生的各種問題,如led燒毀不能點(diǎn)亮,電容被擊穿、這些問題你遇到了,然后通過各種方式去排除這些問題,然后把問題解決方案記錄下來,就是你成長的過程。而這些問題,在使用軟件仿真中是遇不到的,而且軟件仿真中有些可行的方案,在實(shí)際中并不可行。所以新手一定要使用真實(shí)的開發(fā)板去學(xué)習(xí)單片機(jī),等到自己掌握了單片機(jī)的基本知識,那時(shí)候再去用軟件仿真運(yùn)行你的軟件,也是可行的,而且這個(gè)時(shí)候由于你掌握的一些實(shí)際的經(jīng)驗(yàn),所以在仿真中遇到的問題你也能很快解決,而不是像無頭蒼蠅一樣沒有解決辦法。
        如果你選擇了STM32,那么開發(fā)環(huán)境可以選擇AIR或者keil forARM,再次重申一遍,軟件沒有什么絕對的好不好,你可以兩個(gè)都試用一下,覺得那個(gè)適合你你就去使用那個(gè)。我個(gè)人比較傾向于keil ,keil5之后加入了很多功能,包括4之后增加的代碼自動(dòng)補(bǔ)全(建議新手不要使用這個(gè)功能)、庫文件的集成、仿真(這個(gè)里面的仿真功能還是很強(qiáng)大的)。具體的使用和可能會(huì)遇到的問題,我會(huì)開出一個(gè)專題來講。硬件的話,就是jlink,這個(gè)比51的ISP燒寫器強(qiáng)很多。
        如果你選擇了使用STM8,需要安裝兩個(gè)軟件1、STVD IDE開發(fā)環(huán)境,2、COSMIC for STM8 C編譯器。對于這個(gè)的詳細(xì)解讀,后面會(huì)有專題。


        4、如果我按照你說的,去先學(xué)習(xí)C語言,那么最高效的學(xué)習(xí)方法是什么?

        我認(rèn)為學(xué)習(xí)C語言的最高效的學(xué)習(xí)方法是:在圖書館借一本入門級的書,然后在電腦上裝一個(gè)開發(fā)環(huán)境(具體什么開發(fā)環(huán)境無所謂,VC6.0,VS2010什么的都可以,根據(jù)你電腦的配置選擇),然后開始邊看書邊敲代碼。下面是我做的一個(gè)C語言學(xué)習(xí)路線,如果你學(xué)C語言就是為了做單片機(jī),那你可以有側(cè)重點(diǎn)的學(xué)習(xí):

        以上是一個(gè)提綱,你可以按照上面的知識點(diǎn)一個(gè)個(gè)去學(xué)習(xí),學(xué)習(xí)完成之后通過打個(gè)勾,繼續(xù)下一個(gè),學(xué)完全部大概兩周就可以搞定。這時(shí)候你就可以閱讀單片機(jī)項(xiàng)目代碼。后續(xù)我會(huì)放出一些簡單的項(xiàng)目。當(dāng)然,上面的知識點(diǎn)或許過于冗余,你可以通過公眾號發(fā)消息給我,告訴我你自己設(shè)定的學(xué)習(xí)路線,我?guī)湍阋?guī)劃C的具體路線,告訴你哪些知識點(diǎn)可以淺嘗輒止,哪些知識點(diǎn)必須要徹底掌握。這樣就會(huì)在最短時(shí)間內(nèi)學(xué)到最多。

回復(fù)

使用道具 舉報(bào)

ID:82285 發(fā)表于 2016-4-28 11:03 | 顯示全部樓層
樓主最后一張圖說的很好
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表