【經(jīng)驗(yàn)分享】給學(xué)習(xí)stm32單片機(jī)新人入門指南
時(shí)間:2018-12-23 00:00:00
來(lái)源:信盈達(dá)
作者:信盈達(dá)
一、入門總結(jié)
1.1為什么要把時(shí)間花在“猶豫”上? 每當(dāng)我們?cè)谌腴T之前(ARM是這樣,DSP也一樣),總會(huì)會(huì)有很多疑問(wèn),會(huì)有很多顧慮。
我們渴望知道學(xué)習(xí)STM32前景如何?需要啥基礎(chǔ)?難不難?適不適合我?但是什么時(shí)候能心潮澎湃地、相當(dāng)著急地開(kāi)始學(xué)STM32?日子在一天一天過(guò)去!你開(kāi)始行動(dòng)了嗎?沒(méi)有行動(dòng)的思索,永遠(yuǎn)都不可能入門!把這些時(shí)間用來(lái)看書(shū)吧,效果能好一萬(wàn)倍。
大家可能是從51單片機(jī)過(guò)來(lái)的,回想一下,我們之前學(xué)單片機(jī)時(shí)如何入門呢?實(shí)際上都是先看書(shū)(理論),再玩板子(實(shí)踐)。
熟悉之后才會(huì)自己寫(xiě)程序代碼實(shí)現(xiàn)某個(gè)功能。
因此,如果你正在咨詢STM32;如果你正對(duì)STM32心潮澎湃;如果你想入門STM32;那么,從現(xiàn)在開(kāi)始,不要猶豫了,不要想再詳細(xì)地了解STM32的前景了。
做一個(gè)可能影響你一生的決定吧!不用咨詢,不用興奮,開(kāi)始看書(shū)籍(文檔)吧??!每個(gè)人都是這么走過(guò)來(lái)的。
1.2看資料需要計(jì)劃、耐心和速度 這里所謂的“資料”包括STM32書(shū)籍、文檔。
因?yàn)镾TM32有個(gè)特點(diǎn),datasheet很多都是中文的,有些同學(xué)就沒(méi)有去買書(shū)籍,直接看STM32的用戶手冊(cè),也是可以的。
但是不管看書(shū)籍還是文檔,我們是需要計(jì)劃的。
請(qǐng)記住,你學(xué)的不是寂寞,是STM32! 看書(shū)或文檔不是用來(lái)消遣時(shí)間的。
兩周內(nèi)把一定粗略地過(guò)一遍!不要求都看懂,事實(shí)上,不可能都看懂。
但我們必須理解基本知識(shí),對(duì)難度高的知識(shí)有一個(gè)印象,至少以后碰到問(wèn)題的時(shí)候,我們會(huì)似曾相識(shí),感覺(jué)在哪里見(jiàn)到過(guò),于是翻資料上網(wǎng)找答案——帶著問(wèn)題的時(shí)候,效率才是超高的。
兩周過(guò)去了,STM32的知識(shí)你過(guò)一遍了嗎?沒(méi)看完?那么,你應(yīng)該考慮這些天中,你是否盡力了?是否真的想學(xué)STM32?或者還是看到STM32人氣很高,也想跟下時(shí)髦?是不是碰到問(wèn)題沒(méi)法解決就想放棄了?現(xiàn)在是你做第二個(gè)決定的時(shí)候了,請(qǐng)決定你是否繼續(xù)攻讀STM32。
如果是一時(shí)沖動(dòng)想跟時(shí)髦,請(qǐng)馬上放棄——你已經(jīng)浪費(fèi)兩周時(shí)間了,你還想再浪費(fèi)14天嗎?如果想吃得苦中苦,方為人上人,OK,請(qǐng)繼續(xù)往下看:
1.3學(xué)STM32必備開(kāi)發(fā)板 稍微了解一些理論知識(shí)后,現(xiàn)在擺在你面前,有兩條路:
筆者之前做過(guò)幾次PCB設(shè)計(jì),而且當(dāng)時(shí)在實(shí)驗(yàn)室可以報(bào)銷所有費(fèi)用,就自己做了一個(gè)PCB板。
建議有報(bào)銷條件的同學(xué)自己設(shè)計(jì)一塊板子學(xué)習(xí)。
無(wú)法報(bào)銷的同學(xué),可以選購(gòu)一款開(kāi)發(fā)板來(lái)學(xué)。
總之一句話,選購(gòu)的開(kāi)發(fā)板一定要性價(jià)比最高的,最實(shí)惠的,而不是最貴的。
實(shí)際上,大多數(shù)同學(xué)選購(gòu)的開(kāi)發(fā)板是用來(lái)學(xué)習(xí)的,不是用來(lái)項(xiàng)目開(kāi)發(fā)的。
因此,能讓你上手STM32,目的已經(jīng)達(dá)到了。
1.4熟悉開(kāi)發(fā)板并試圖寫(xiě)程序 這時(shí)的你,不能再停留在理論上了。
看到開(kāi)發(fā)板,馬上就有一種說(shuō)不出的興奮!但是,心急吃不了熱豆腐!請(qǐng)耐心把廠家配套的開(kāi)發(fā)板使用手冊(cè)瀏覽一遍,熟悉你買的開(kāi)發(fā)板。
按照使用手冊(cè),把開(kāi)發(fā)板上的相關(guān)測(cè)試、操作步驟,都動(dòng)手做一遍,你會(huì)發(fā)現(xiàn),原來(lái)開(kāi)發(fā)STM32是如此簡(jiǎn)單!那么就讓我們開(kāi)始STM32的開(kāi)發(fā)之路吧! 如何進(jìn)行真正入門STM32,請(qǐng)看第二章《STM32入門方法談》。
二、STM32入門方法談
2.1拿到開(kāi)發(fā)板我該做什么? 國(guó)內(nèi)用戶有一個(gè)普遍現(xiàn)象:
由于沒(méi)有自己的思路,又是初學(xué)者,也沒(méi)有好的突破口,因此,買來(lái)開(kāi)發(fā)板后,開(kāi)機(jī),看看觸摸屏,感嘆“好漂亮”的屏幕顯示,然后就迷茫了。
開(kāi)發(fā)板的光盤(pán)?光盤(pán)里放置一大堆資料——我該先看哪個(gè)?后看哪個(gè)?總之,我如何開(kāi)始STM32的入門學(xué)習(xí)?? 從拿到開(kāi)發(fā)板后需要了解如何安裝J-Link、MDK(keil)調(diào)試軟件,一直到STM32上的UCOS移植,配合專門的教程,會(huì)在學(xué)習(xí)STM32的過(guò)程中少走許多彎路,提高學(xué)習(xí)效率了。
2.2我的時(shí)間如何安排? 筆者做任何事情前,習(xí)慣寫(xiě)一個(gè)計(jì)劃——可能是在公司的時(shí)候,每天、每周、每月必寫(xiě)計(jì)劃和總結(jié)養(yǎng)成的“毛病”,呵呵。
我們要用一個(gè)月內(nèi)上手STM32!我們開(kāi)始考慮,如何更好地利用好這一個(gè)月的時(shí)間呢? 我想起了第一天公司入職的情景。
我的工作導(dǎo)師讓我先領(lǐng)一臺(tái)PC,安裝必要的軟件,然后告訴我近一個(gè)月的任務(wù)是什么。
當(dāng)時(shí)我很不屑,因?yàn)閯倕⒓恿斯窘M織的培訓(xùn),以為自己啥都會(huì),但是失敗了。
就像每天早上醒來(lái)睜開(kāi)眼睛,卻不知道自己今天要干啥。
筆者認(rèn)為,學(xué)習(xí)STM32,實(shí)際上也是進(jìn)行項(xiàng)目的過(guò)程。
進(jìn)行項(xiàng)目,就必須有項(xiàng)目進(jìn)度文檔,至少需要預(yù)計(jì)項(xiàng)目的耗時(shí)。
雖然沒(méi)有那么規(guī)范,但建議大家至少要給自己一個(gè)時(shí)間表:
告訴自己從2012年x月y日至2012年m月n日,必須能夠進(jìn)行獨(dú)立的項(xiàng)目開(kāi)發(fā)。
找感覺(jué)——談及STM32,立即反應(yīng)到調(diào)試的方法如何。
修改例程——按自己的意愿修改例程,讓自己有點(diǎn)成就感。
主動(dòng)攻擊——給自己找一個(gè)小項(xiàng)目,把它實(shí)現(xiàn)出來(lái)。
每個(gè)階段有一個(gè)目標(biāo)后,再細(xì)化該目標(biāo)到每天,寫(xiě)出每天要完成的任務(wù)。
注意,每天的任務(wù)不可太多,否則時(shí)間太緊,完成不了當(dāng)天的任務(wù),反而會(huì)進(jìn)入惡性循環(huán),導(dǎo)致第二天、第三天,以后的任務(wù)也將無(wú)法完成。
如果每天只有2個(gè)小時(shí),切記,寧可少安排任務(wù),也不可追求加快項(xiàng)目進(jìn)度。
當(dāng)然,心中有事情后,每天自然就會(huì)忙碌起來(lái)!你的學(xué)習(xí)生活會(huì)更加充實(shí)! 2.3碰到問(wèn)題怎么辦? 學(xué)習(xí)難免會(huì)遇到問(wèn)題。
能否避開(kāi)走另一條路?比如調(diào)試程序,某一個(gè)程序的語(yǔ)法不太懂,就想用另一種表示方法來(lái)代替,或者直接注釋掉。
因?yàn)槟悻F(xiàn)在一旦放過(guò)一個(gè)問(wèn)題,可能意味著你一輩子可能都沒(méi)有機(jī)會(huì)去碰這個(gè)問(wèn)題。
我們是為學(xué)習(xí)而來(lái),說(shuō)難聽(tīng)點(diǎn),我們現(xiàn)在的付出,是想以后能有更好的回報(bào)的。
1、這個(gè)問(wèn)題可能是你的疑問(wèn),但它還不具體,你無(wú)法用最好的語(yǔ)言讓別人接受、理解,并且回答它。
很多網(wǎng)友看到模凌兩可的問(wèn)題,是不會(huì)回答的。
比如Linux如何移植?這個(gè)問(wèn)題,如果詳細(xì)說(shuō),需要用半本書(shū)來(lái)解釋——沒(méi)有人愿意花兩三個(gè)小時(shí)告訴你如何移植。
所以這時(shí)候,你要做的,是先去查資料,自己試圖解決它。
當(dāng)碰到某一個(gè)具體的步驟,實(shí)在想不通的時(shí)候,比如Linux移植過(guò)程中,文件掛載打印卡住了。
這個(gè)現(xiàn)象,可能對(duì)有經(jīng)驗(yàn)的人來(lái)說(shuō),一句話就能點(diǎn)破。
而你因?yàn)橛邢惹把芯康幕A(chǔ),一聽(tīng)即可知道哪里出問(wèn)題。
2、CPU是相通的,相信大部分的同學(xué)都學(xué)習(xí)過(guò)單片機(jī),是有一定基礎(chǔ)的。
如果你碰到問(wèn)題,去嘗試了,自己把問(wèn)題解決了,你會(huì)很有成就感!!因?yàn)檫@是你獨(dú)立思考的結(jié)果??!當(dāng)然,你應(yīng)該寫(xiě)一個(gè)總結(jié)文檔,收藏在PC中備忘。
也可以把總結(jié)文檔發(fā)帖到論壇上,這樣的原創(chuàng)文檔,跟帖率是最高的。
當(dāng)然,筆者在此并不是不讓大家使用別的方式討論問(wèn)題。
剛才是就事論事,也是筆者自己的一點(diǎn)小經(jīng)歷。
三、STM32學(xué)習(xí)步驟 在第二章,我們已經(jīng)談及到學(xué)習(xí)需要計(jì)劃。
那么,在這章節(jié),我們就來(lái)詳細(xì)地闡述這個(gè)計(jì)劃——僅供參考。
3.1關(guān)于STM32文檔學(xué)習(xí) 本期教程,我們假定大家已經(jīng)對(duì)STM32的書(shū)籍或者文檔有一定的理解。
如不理解,請(qǐng)立即閱讀STM32的文檔,以獲取最基本的知識(shí)點(diǎn)。
STM32的學(xué)習(xí)與ARM9的學(xué)習(xí)有一個(gè)很大的區(qū)別。
比如三星的S3C2440,官方的文檔都是英文的,大部分工程師只能去看國(guó)內(nèi)出版的書(shū)籍。
英文好的同學(xué),請(qǐng)不要以為你很牛,可以只看英文文檔。
畢竟你是中國(guó)人,你最熟悉的,理解最好的還是中文。
看英文的速度還是比看中文慢一些,我們要的是最短的時(shí)間,而不是追求短時(shí)間內(nèi)記住所有細(xì)節(jié)。
當(dāng)然,如果是一篇論文,建議看英文原版還是有好處的。
STM32處理器進(jìn)入國(guó)內(nèi)市場(chǎng)時(shí)候,ST官方(或者第三方)的推廣工作做的非常好。
翻譯了大量的英文文檔,迎合了國(guó)內(nèi)的很多工程師的思維。
所以現(xiàn)在大部分STM32F103xxx的用戶datasheet都有中文版。
當(dāng)然,有雄厚經(jīng)濟(jì)條件的朋友可以購(gòu)買本書(shū)籍哈~ 學(xué)習(xí)的時(shí)候,關(guān)注兩個(gè)比較重要的文檔:
《STM32F103xxx參考手冊(cè)》,《STM32固件庫(kù)使用手冊(cè)》。
ST官方的所有中英文文檔,在ST的中國(guó)大陸區(qū)網(wǎng)站可以下載到:
閱讀《STM32F103xxx參考手冊(cè)》,一定要注意,不需要全部閱讀——沒(méi)有時(shí)間的。
存儲(chǔ)器和總線架構(gòu)、電源控制、備份寄存器、復(fù)位和時(shí)鐘控制,通用和復(fù)用功能I/O,中斷和時(shí)間等等部分一定要花時(shí)間閱讀。
如果我們用到哪個(gè)模塊,就可以去閱讀哪個(gè)模塊。
比如在使用AD的時(shí)候,就需要去閱讀第10章ADC。
相信每個(gè)初學(xué)者都有自己的研究方向和判斷。
閱讀《STM32固件庫(kù)使用手冊(cè)》,主要是為了簡(jiǎn)化編程。
STM32給我們提供了一個(gè)非常好的固件函數(shù)庫(kù),我們只要去調(diào)用即可。
當(dāng)然,我們也可以不去碰這些固件庫(kù)——傳說(shuō)使用它會(huì)使得代碼效率變低,是有道理的。
網(wǎng)絡(luò)上也出現(xiàn)了很多網(wǎng)友自己寫(xiě)的代碼,沒(méi)有使用帶固件庫(kù)函數(shù)。
這里我主要強(qiáng)調(diào)的是,閱讀《STM32固件庫(kù)使用手冊(cè)》的時(shí)候,前面幾章也是必須閱讀的。
比如第一章文檔和庫(kù)規(guī)范中的命名規(guī)則,編碼規(guī)則,這些都是需要注意的。
第二章描述了固件庫(kù)的架構(gòu),我們?nèi)绾稳ナ褂霉碳?kù)的步驟等。
有了第二章的基礎(chǔ),我們就可以借助固件庫(kù)寫(xiě)出自己的代碼了。
第四章開(kāi)始之后,就可以根據(jù)大家的需要來(lái)閱讀。
實(shí)際上,后續(xù)的章節(jié),都是描述某個(gè)模塊有什么什么函數(shù),每個(gè)函數(shù)如何使用等。
關(guān)于后面的章節(jié),建議對(duì)GPIO庫(kù)函數(shù)、中斷部分庫(kù)函數(shù)、復(fù)位和時(shí)鐘設(shè)置的庫(kù)函數(shù)要比較熟悉,因?yàn)槠綍r(shí)經(jīng)常會(huì)用到。
以上提到的這兩個(gè)文檔,已經(jīng)足夠您看的了,呵呵。
希望您能從中獲取大量的STM32基礎(chǔ)知識(shí)。
3.2 30天上手STM32計(jì)劃
(1)這里所謂的“上手”,指的是能理解并掌握一些常用的STM32外設(shè),真正想掌握一款處理器,30天根本說(shuō)明不了什么問(wèn)題。
(2)這里所謂的“30天”,根據(jù)每個(gè)人的時(shí)間安排不同而不同。
如果您每天有充足的時(shí)間學(xué)習(xí),那么可以規(guī)定自己盡快地能獨(dú)立地進(jìn)行簡(jiǎn)單的STM32開(kāi)發(fā)。
如果您每天只有業(yè)余時(shí)間來(lái)學(xué)習(xí)STM32,建議根據(jù)您的具體情況安排時(shí)間。
畢竟計(jì)劃時(shí)間如果安排太緊,反而收不到良好的效果,只能進(jìn)入惡性循環(huán),這是我們要避免的。
但是建議,不管您有無(wú)充足的時(shí)間,都必須給自己做一個(gè)計(jì)劃! 我這里列出一個(gè)思路,僅供參考:
步驟一,安裝完STM32學(xué)習(xí)的軟件,比如J-Link、KeilforARM(MDK)、ISP(如果需要從串口下載的話)。
這些軟件安裝的詳細(xì)步驟,可以參考我們推出的相應(yīng)教程進(jìn)行。
步驟二,挑選部分例程的HEX,比如LED燈的例程HEX文件,下載到STM32開(kāi)發(fā)板中,觀察LED燈的閃爍情況。
這部分的操作,可以參考我們推出的相應(yīng)的教程進(jìn)行。
實(shí)際上,以上兩個(gè)步驟,是為了熟悉要使用的工具軟件而已。
其實(shí)我們還沒(méi)開(kāi)始STM32的學(xué)習(xí)呢!
步驟三,準(zhǔn)備幾個(gè)常用的文檔,比如《STM32的用戶手冊(cè)》,《STM32固件庫(kù)使用手冊(cè)》等文檔。
這些文檔,在光盤(pán)中的芯片手冊(cè)目錄中均可找到。
步驟四,開(kāi)始查看例程的編寫(xiě),看看例程是如何寫(xiě)的,自己可否修改下例程,達(dá)到自己想要的效果呢?芯達(dá)STM32開(kāi)發(fā)板的光盤(pán)中為大家提供了豐富的例程代碼,可以參考。
您一定可以修改出更精彩的例程! 步驟五,Ucos-II的移植,是否需要試一下? 恭喜你,至此,你已經(jīng)可以自如進(jìn)行獨(dú)立的開(kāi)發(fā)了。
最后一步,給自己一個(gè)目標(biāo)(項(xiàng)目),把它實(shí)現(xiàn)出來(lái)! 再次強(qiáng)調(diào),以上只是一個(gè)學(xué)習(xí)STM32的思路,供大家參考。
下面列出了前面關(guān)鍵的步驟,希望大家能盡快入門。
后續(xù)的每個(gè)模塊的編程,請(qǐng)參考我們的芯達(dá)STM32入門系列教程。
熟悉調(diào)試軟件 對(duì)初學(xué)者來(lái)說(shuō),我們至少需要安裝兩個(gè)軟件:
J-Link驅(qū)動(dòng)軟件、MDK(就是原來(lái)的Keil)軟件。
這兩個(gè)軟件,用《鄉(xiāng)村愛(ài)情》里的一句話“必須的!” 如何驗(yàn)證自己已經(jīng)熟悉調(diào)試軟件的操作了呢?很簡(jiǎn)單, STM32開(kāi)發(fā)板光盤(pán)里附帶了很多HEX格式的文件,可以選擇一些HEX文件,來(lái)觀察運(yùn)行結(jié)果。
比如LED燈的例程HEX文件,下載到芯達(dá)STM32開(kāi)發(fā)板中,觀察LED燈的閃爍情況。
燈在閃爍,就說(shuō)明你剛才的操作已經(jīng)把HEX文件燒寫(xiě)到閃存中了。
熟悉調(diào)試軟件,如燒寫(xiě)HEX出現(xiàn)問(wèn)題,可簡(jiǎn)單判別問(wèn)題所在,并獨(dú)立解決。
GPIO編程 這是第一次接觸固件庫(kù)的編程,一定要硬著頭皮去了解固件庫(kù)。
而不是避開(kāi)固件庫(kù)自己寫(xiě)代碼——這樣只能在學(xué)習(xí)中才會(huì)發(fā)生。
實(shí)際的項(xiàng)目中,代碼成百上千個(gè),如何一個(gè)一個(gè)自己寫(xiě)?調(diào)用固件庫(kù)中的函數(shù)來(lái)完成,才是王者之道。
1、設(shè)置GPIO口的引腳為輸入或者輸出模式。
我們?cè)谶M(jìn)行點(diǎn)燈代碼的時(shí)候,一般設(shè)置為推挽輸出模式。
2、操作寄存器,往寄存器里置1或者清零操作——這個(gè)步驟,固件庫(kù)已經(jīng)提供了專門的GPIO_SetBits函數(shù)和GPIO_ResetBits函數(shù),我們只要去調(diào)用即可實(shí)現(xiàn)對(duì)IO口的置1和清零。
3、實(shí)現(xiàn)多種花樣的LED閃動(dòng),使得自己熟悉GPIO的編程過(guò)程。
但是在調(diào)用固件庫(kù)的時(shí)候,我們還需要有GPIO結(jié)構(gòu)聲明,結(jié)構(gòu)成員初始化,系統(tǒng)時(shí)鐘配置等等注意事項(xiàng)。
熟悉調(diào)試軟件,如燒寫(xiě)HEX出現(xiàn)問(wèn)題,可簡(jiǎn)單判別問(wèn)題所在,并獨(dú)立解決。
3.2.3開(kāi)始全新的STM32深入研究 經(jīng)過(guò)以上調(diào)試軟件的熟悉和GPIO口的編程調(diào)試后,相信您已經(jīng)對(duì)STM32有一定的了解。
至少知道如何利用STM32的固件庫(kù)去寫(xiě)一個(gè)代碼。
OK,下面我們將開(kāi)始全新的STM32深入研究。
在這個(gè)階段,將要接觸到串口編程、TFT液晶屏驅(qū)動(dòng)編程、定時(shí)器編程、串行外設(shè)接口SPI編程、存儲(chǔ)器編程、SD卡與文件系統(tǒng)移植、USB讀寫(xiě)、UCOS移植等,有精力還可以研究其他外設(shè)。
由于篇幅及本教程主題限制,這里不詳細(xì)說(shuō)明每個(gè)模塊都如何編程。
最后祝愿大家早日成為STM32的高手!

信盈達(dá)從事嵌入式教育十多年,積累了豐富的實(shí)戰(zhàn)教學(xué)項(xiàng)目,比如:四軸飛行器、機(jī)械手臂、17自由度運(yùn)動(dòng)機(jī)器人、MCU環(huán)境檢測(cè),智能可穿戴、智能家居等。此外,信盈達(dá)2018嵌入式課程全面升級(jí),新添加RK3399(A53+A72)教學(xué)平臺(tái)學(xué)習(xí)內(nèi)容,該平臺(tái)廣泛適用于AR設(shè)備、VA設(shè)備、3D設(shè)備、智能機(jī)器人、人臉識(shí)別、一體機(jī)、 庭影音、集群服務(wù)器、智能交互、車載設(shè)備、醫(yī)療行業(yè)、電視盒子等。