


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、STM32學(xué)前班教程之一:為什么是它經(jīng)過幾天的學(xué)習(xí),基本掌握了STM32的調(diào)試環(huán)境和一些基本知識(shí)。想拿岀來與大家共享,笨教程本著最大限度簡化刪減STM32入門的過程的思想,會(huì)把我的整個(gè)入門前的工作推薦給大家。就算是給網(wǎng)上的眾多教程、筆記的一種補(bǔ)充吧,所以叫學(xué)前班教程。其中涉及產(chǎn)品一律隱去來源和品牌,以防廣告之嫌。全部漢字內(nèi)容為個(gè)人筆記。所有相關(guān)參考資料也全部列岀。:lol教程會(huì)分幾篇,因?yàn)樘L啦。今天先來說說為什么是它一一我選擇STM32的原因。我對(duì)未來的規(guī)劃是以功能性為主的,在功能和面積之間做以平衡是我的首要選擇,而把運(yùn)算放 在第二位,這根我的專業(yè)有關(guān)系。里面的運(yùn)算其實(shí)并不復(fù)雜,在入門階段想
2、盡量減少所接觸的東西。不過說實(shí)話,對(duì) DSP的外設(shè)并和開發(fā)環(huán)境不滿意,這是為什么STM32一岀就轉(zhuǎn)向的原因。下面是我自己做過的兩塊 DSP28的全功能最小系統(tǒng)板,在做這兩塊板子的過程中發(fā)現(xiàn)要想盡力縮小DSP的面積實(shí)在不容易(目前只能達(dá)到50mm45mm這還是沒有其他器件的情況下),尤其是雙電源的供電方式和 1.9V的電源讓人很頭疼。后來因?yàn)橐粋€(gè)項(xiàng)目,接觸了LPC2148并做了一塊板子,發(fā)現(xiàn)小型的ARM7在外設(shè)夠用的情況下其實(shí)很不錯(cuò),于是開始搜集相關(guān)芯片資料,也同時(shí)對(duì)小面積的AVR和51都進(jìn)行了大致的比較,這個(gè)時(shí)候發(fā)現(xiàn)了 CortexM3的STM32比2148擁有更豐富和靈活的外設(shè),性能幾乎是2
3、148兩倍(按照MIPS值計(jì)算)。正好2148我還沒上手,就直接轉(zhuǎn)了這款STM32F10&與 2811 相比較(核心 1.8V 供電情況下),135MHZX1MIPS?,F(xiàn)在用 STM32F103, 72MHzX1.25MIPS, 性能是 DSP的 66%, STM32F103( 64 管腳)芯片面積只有 2811 的 51% STM32F103( 48管腳)面積是 2811的25%,最大功耗是 DSP的20%單片價(jià)格是 DSP的30%且有更多的串口,CAP和PWM這是有用的。高端型號(hào)有SDIO,理論上比 SPI速度快。由以上比較,準(zhǔn)備將未來的擁有操作系統(tǒng)的高端應(yīng)用交給DSP的新型浮點(diǎn)型
4、單片機(jī)28335,而將所有緊湊型小型、微型應(yīng)用交給STM32STM32學(xué)前班教程:怎么開發(fā)sw笨笨的STM32學(xué)前班教程之二:怎么開發(fā)目前手頭的入門階段使用的開發(fā)器概述該產(chǎn)品為簡易 STM32調(diào)試器和DEMC板體化的調(diào)試學(xué)習(xí)設(shè)備,價(jià)格在一百多塊。2、硬件配置仿真部分:USB口,reset,指示燈,JTAGDEM(部分:4按鍵(10), 4LED (10), 個(gè)串口,啟動(dòng)方式跳線,所有引腳的焊盤(可自行焊 接插針進(jìn)行擴(kuò)展)DEM0芯片:STM32F103C8T6(程序空間 64K)參數(shù)和擴(kuò)展:注:學(xué)習(xí)的目標(biāo)芯片是STM32F103CBT6( 7 X7mm 128K flash ,16KRAM 以
5、及 STM32F103RET6(10 X10mm 512K flash , 64K RAM。STM32-SK的硬件連接方法(用板載調(diào)試器調(diào)試板載DEMO:JP3、JP5須全部短接USB通過電纜連接至 PC的USB串口連接至 PC的串口或者通過 USB轉(zhuǎn)串口電纜連接 (力特Z-TEC,USB2.0與RS232轉(zhuǎn)接電纜)WindowsXP自動(dòng)安裝驅(qū)動(dòng)安裝完成后如果 DEMO板里面有程序就會(huì)自動(dòng)運(yùn)行了。這是ST-L in k-ll的通用連接方法以上是學(xué)習(xí)階段比較方便的仿真器,進(jìn)入工程階段后準(zhǔn)備換J-Link V7的仿真器進(jìn)行開發(fā)。目前比較滿意的產(chǎn)品:JLink v7+USB轉(zhuǎn)串口:購買后所需的改造:
6、打開殼體,將USB的+5V供電跟JTAG20針的第二腳 Vsupply飛線,提供目標(biāo)板5V500mA的供電。看中的特點(diǎn):集成串口,擁有20針JTAG可以改造Vspply為供電接口,小巧好帶,便宜。常見的用于STM32單片機(jī)的仿真器分類a)Ulink2 :之前常用的仿真器。Keil公司產(chǎn)品,之前專用于ARM7現(xiàn)擴(kuò)展到 CortexM3,調(diào)試接口支持JTAG和SWD連接到PC主機(jī)的USB現(xiàn)在這種調(diào)試器已經(jīng)用的越來越少了。b)ST-Link-ll : ST公司的仿真接口,支持IAR EWARM USB1.1全速,USB電源供電,自適應(yīng)目標(biāo)系統(tǒng)JTAG電平3.3V-5V,可向目標(biāo)系統(tǒng)提供不大于5V/2
7、00mA電源。這種調(diào)試器不多見,但是許多調(diào)試器與目標(biāo)板一體設(shè)計(jì)的學(xué)習(xí)板上常見。c)J-Link V6/V7 : SEGGE公司產(chǎn)品,調(diào)試接口支持 JTAG和 SW(V7 速度是 V6 的 12 倍),USB2.0 接口,通過USB供電,下載速度達(dá)到 720k byte/s ,與IAR WEARI無縫集成,寬目標(biāo)板電壓范圍:1.2V-3.3V( V7支持5V),多核調(diào)試,給目標(biāo)板提供 3.3V50mA電源。這種調(diào)試器現(xiàn)在岀現(xiàn)的越來越多,兼容性比較好(主要是指能夠與IARWEAR無縫集成這點(diǎn)),國內(nèi)山寨貨和各種變種也很多。6、目標(biāo)板主要分為一體化設(shè)計(jì)(與調(diào)試器、供電整合)和單獨(dú)設(shè)計(jì)兩類,詳細(xì)產(chǎn)品比
8、較見豆皮 的如何選擇 STM32開發(fā)板。STM32學(xué)前班教程之三:讓PC工作開發(fā)軟件的選擇1、軟件與版本的選擇需求:支持 STLink2或未來的Jlink V7調(diào)試接口(因?yàn)?STM32-SK使用這個(gè)接口),能夠找到去除軟件限制的方法,最好具有中文版幫助和界面,最好帶有純軟件仿真選擇:RealView MDK3.23RPC 或者 IAR EWARM.42A (5 版本觀望一下)。2、RealView MDK3.23RPC (中國版)安裝與去除限制第一步:執(zhí)行安裝程序完成基本安裝,最后選項(xiàng)選擇加入虛擬硬件,便于純軟件調(diào)試。第二步:執(zhí)行軟件,點(diǎn)擊File->LiceneeManager,復(fù)制
9、CID的數(shù)據(jù)到破解器的 CID,其他選項(xiàng)如下圖,然后點(diǎn)擊 Generate。第三步:復(fù)制LIC0的數(shù)據(jù)到軟件的 LIC框里面,點(diǎn)擊Add LIC。注意添加序列號(hào)后 Lice nee Ma nager會(huì)算岀這個(gè)號(hào)對(duì)應(yīng)的有效期,如果到期會(huì)顯示為紅色,需要重新點(diǎn)擊破解軟件的Gen erate,再算一個(gè)填進(jìn)去就行了。第四步:將 ST-LINKII-KEIL Driver所需的文件(兩個(gè) DLL)拷貝到KeilARMBIN 下,替換原有文件。第五步:打開 Keil安裝目錄下的 TOOLS.INI文件,在ARM、ARMADS、KARM項(xiàng)目下添加TDRV7=BINST-LINKII-KEIL.dll(&qu
10、ot;ST Linkll Debugger")行,并保存修改。第六步:打開 MDK在項(xiàng)目的 options 設(shè)置的Debug選項(xiàng)中選擇 STLINKII Debugger,同時(shí)在Utilities 的選項(xiàng)中選擇 STLINKII Debugger。完成以上步驟,就完成了ST-LINKII的相關(guān)配置,可以作為調(diào)試器開始使用。注意:目前ST-LINKII不支持 Flash菜單中的 Download和Erase命令,程序在使用Start/Stop Debug Session 時(shí)自動(dòng)載入 flash 中供調(diào)試。3、IAR EWARM4.42A安裝與破解第一步:開始/運(yùn)行/CMD顯示DOS界面
11、,執(zhí)行iarid.exe»ID.TXT得到本機(jī)ID碼,復(fù)制這個(gè)ID碼,再執(zhí)行iarkg.exe ID碼>>Lic422A.TXT,得到一組注冊(cè)碼。第二步:使用 EWARM-EV-WEB-442A.exe ( 30天限制版,其他版本無法使用第一步中的注冊(cè)碼),執(zhí)行安裝程序完成基本安裝,過程中需要添入第一步里面算岀來的注冊(cè)碼,可以取消時(shí)間限制, 但是那一組當(dāng)中只有一個(gè)有效,需要實(shí)驗(yàn)。4、鏈接硬件調(diào)試程序RealView MDK找到一個(gè)STM32-SK的基礎(chǔ)程序,最好是只關(guān)于IO的且與當(dāng)前板子程序不同,這樣在板上就可以看到結(jié)果,點(diǎn)擊Project/openproject 。例如
12、GPIO、TIMER (另兩個(gè)例程是關(guān)于串口的,需要連接串口才能夠看到運(yùn)行結(jié)果)。使用 OpenProject "打開,然后設(shè)置 Option里面的linker 和Utilities 里面的項(xiàng)目為ST Linkll Debuger ”。編譯程序,再使用Start/Stop Debug Session ”來寫入程序。IAR EWARM與以上相同,找到一個(gè)符合條件的例程打開一個(gè)eww工程文件,右鍵選取Option ,在 Debuger 里面選擇 Third-Party Driver ”,在 Third-Party Driver "里面添上$PROJ_DIR$.ddlSTM32D
13、river.dll使用 Make"或Rebuild All "來編譯程序,點(diǎn)Debug"就燒寫進(jìn)Flash使用調(diào)試欄里面的go”等等運(yùn)行程序。注:由于目前版本 MDK與我手頭的ST-LINK-II編程器不兼容,所以后面的所有工作均改用IARSTM32學(xué)前班教程之四:打好基礎(chǔ)建立模板1、新建目錄Project_IAR4 ,按照自己的順序重新組織dll (驅(qū)動(dòng));inc、src函數(shù)庫;settings ,其他所有文件全部放這個(gè)新建的目錄下。2、雙擊打開Project.eww ,繼續(xù)更改內(nèi)部設(shè)置。3、需更改的內(nèi)容列表:位置和項(xiàng)目目標(biāo)說明Project'Edirc
14、onfignations新建基于STM3210B的配置編譯目標(biāo)和過程文件存放Project'Optio nGen eralOptio n'TargetST STM32F10x 選擇芯片類型C/C+ CompilerPreprocessorAdditio nalin clude directories $PROJ_DIRmap/lib/type ” 的位置$PROJ_DIR$inc頭文件相對(duì)位置,需要包括C/C+ CompilerPreprocessorDefi nedsymbols 空空白是在Flash里面調(diào)試程序,VECT_TAB_RA是在RAM里調(diào)試程序C/C+ Compi
15、ler'Optimizatio ns'Size最終編譯一般選擇High調(diào)試可選None None,Low,Medium,High 是不同的代碼優(yōu)化等級(jí)Li nkerOutput去掉Overrride default輸岀格式使用默認(rèn)Lin kerExtra Output打開 Ge neral Extra Output 去掉 Overrride default 廠家要求LinkerConfig 打開 Overrride default$PROJ_DIR$lnkarm_flash.xcl使用Flash調(diào)試程序,如果需要使用RAM調(diào)試則改為ln karm_RAM.xclDebugger
16、SetupDriver Third-Party Driver 使用第三方驅(qū)動(dòng)連接單片機(jī)Download Use flash loader 下載到 flash 所需的設(shè)置 Third-PartyThird-Party DriverIAR debugger driver $PROJ_DIR$ddlSTM32Driver.dll驅(qū)動(dòng)文件路徑注1:所有跟路徑相關(guān)的設(shè)置需要根據(jù)實(shí)際情況編寫,相對(duì)路徑的編寫一一“$PROJ_DIR$'代表eww文件所在文件夾,“."代表向上一層。注2 :其他設(shè)置使用庫函數(shù)里面的工程文件的默認(rèn)選項(xiàng)即可,初學(xué)不用了解太多4、需要重新刪除并重新添加Projec
17、t下FWLib”和User ”的所有文件,為了刪減外設(shè)模塊方便需要在 USER額外添加 Stm32f10x_c onf.h ”(不添加也可以,需要展開ma in .c找到它)。然后執(zhí)行Project'Rebuid All ,通過則設(shè)置完畢。5、完成以上步驟,第一個(gè)自己習(xí)慣的程序庫就建立完畢了,以后可以從stm32f10x_co nf.h ”中刪減各種庫文件,從Stm32f10x_it.c"編輯中斷,從 main.c "編寫得到自己的程序。最后需要將這個(gè)庫打包封存,每次解壓縮并修改主目錄名稱即可。6、我的程序庫特點(diǎn):a)默認(rèn)兼容 ST-LINK-II , IAR EW
18、ARM.42A,F(xiàn)lash調(diào)試,其他有可能需要更改設(shè)置b)為操作方便減少了目錄的層次c)為學(xué)習(xí)方便使用網(wǎng)友漢化版固件,主要是庫函數(shù)中c代碼的注釋。后面隨著學(xué)習(xí)深入將在我的模板里面加入如下內(nèi)容:d)加入必用的flash (讀取優(yōu)化),lib ( debug),nvic (中斷位置判斷、開中斷模板),rcc (時(shí)鐘管理模板,開啟外設(shè)時(shí)鐘模板),gpio (管腳定義模板)的初始化代碼,所有模板代碼用到的時(shí)候只要去掉前面的注釋/ ”,根據(jù)需求填入相應(yīng)值就可以了。e)因?yàn)樽约河浶圆缓?,所?main函數(shù)中的代碼做到每行注釋,便于自己以后使用。f)集成Print_U函數(shù)簡單串口收發(fā)函數(shù)代碼,便于調(diào)試,改變
19、使用Printf 函數(shù)的調(diào)試習(xí)慣。g)集成使用systick 的精確延時(shí)函數(shù) delay。h)集成時(shí)鐘故障處理代碼。i)集成電壓監(jiān)控代碼。j)集成片上溫度檢測代碼。k)逐步加入所有外設(shè)的初始化模塊一、編寫程序所需的步驟1、解壓縮,改目錄名稱,和eww文件名,以便跟其他程序區(qū)分。2、更改設(shè)置:在stm32f10x_conf.h "關(guān)閉不用的外設(shè)(在其聲明函數(shù)前面加注釋符號(hào)/ ")。并根據(jù)外部晶振速度更改其中HSE_Value”的數(shù)值,其單位是 Hz。3、 完成各種頭文件的包含(#in elude "xxx.h"),公共變量的聲明(static 數(shù)據(jù)類型 變
20、量名稱;),子程序聲明(void函數(shù)名稱(參數(shù));)C語言必須的前置工作。4、改寫我的程序庫里面所預(yù)設(shè)的模板,再進(jìn)行其他模塊的初始化子程序代碼的編寫,并在程序代碼的開始部分調(diào)用。注意:必須記住所有外設(shè)的使用需要考慮4個(gè)問題:a)開時(shí)鐘RCC(在RCC初始化中);b)自身初始化;c)相關(guān)管腳配置(在 GPIO初始化中);d)是否使用中斷(在 NVIC初始化中)5、編寫main.c中的主要代碼和各種子函數(shù)6、在 §tm32f10x_it.c”填寫各種中斷所需的執(zhí)行代碼,如果用不到中斷的簡單程序則不用編寫 此文件。7、編譯生成bin "的方法:LinkerOutputFormat
21、,里面選擇Other ”在下面的 Output "選 raw-b in ary "生成 bin。8、編譯生成hex "的方法:LinkerOutputFormat,里面選擇Other ” 在下面的 Output "選intel-extended ” 生成a79直接改名成為 hex或者選中上面的 Output Flie '在 Overrride default "項(xiàng)目里面改擴(kuò)展名為hex。是直接將程序燒寫進(jìn)Flash進(jìn)使用軟件界面的 Debug燒寫并按鈕調(diào)試程序。注意,ST-Link-II行調(diào)試,而不是使用RAM的方式。STM32學(xué)前班教
22、程之五:給等待入門的人一點(diǎn)點(diǎn)建議入門必須閱讀的相關(guān)文檔1、幾個(gè)重要官方文檔的功能:a)Datasheet 芯片基本數(shù)據(jù),功能參數(shù)封裝管腳定義和性能規(guī)范b)固件函數(shù)庫用戶手冊(cè) 一一函數(shù)庫功能,庫函數(shù)的定義、功能和用法。c)參考手冊(cè)一一各種功能的具體描述,使用方法,原理,相關(guān)寄存器。d)STM32F10xxx硬件開發(fā):使用入門 一一相關(guān)基礎(chǔ)硬件設(shè)計(jì)e)STM32F10XXX勺使用限制:芯片內(nèi)部未解決的硬件設(shè)計(jì)bug,開發(fā)需要注意繞開。f)一本簡單的C語言書,相信我,不用太復(fù)雜。2、其他的有用文檔,對(duì)初學(xué)幫助很大a)如何使用STM32的軟件庫在IAR的EWAR下進(jìn)行應(yīng)用開發(fā)一一IAR基礎(chǔ)設(shè)置。b)輕
23、松進(jìn)入STM32+Cortex-M3世界.ppt 開發(fā)板和最小系統(tǒng)設(shè)計(jì)需求。c)如何選擇STM32開發(fā)板.pdf 各種開發(fā)板介紹和功能比較。d)MXCHIP的系列視頻教程全部芯片基礎(chǔ)及其外設(shè)的教程,使用函數(shù)庫編程的話就不用看每個(gè)視頻后半段的關(guān)于寄存器的介紹了。e)STM32_Technical_Slide( 常見問題)一些優(yōu)化設(shè)計(jì)方案。3、關(guān)于參考書,買了兩本但是基本對(duì)學(xué)習(xí)沒什么幫助,如果湊齊以上資料,建議慎重買書,不如留著那n個(gè)幾十塊錢,攢到一起買開發(fā)板。我自己的學(xué)習(xí)過程1、一共24個(gè)庫,不可能都學(xué),都學(xué)也沒用。按照我的工作需求必須學(xué)的有16個(gè),這16個(gè)也不是全學(xué)。主要學(xué)習(xí)來源是各種例程代碼
24、、固件函數(shù)庫用戶手冊(cè)”和參考手冊(cè)”。具體學(xué)習(xí)方法是通讀不同來源的程序,在程序中找到相關(guān)的函數(shù)庫的應(yīng)用,然后再閱讀相關(guān)文檔,有條件的實(shí)驗(yàn)。對(duì)于內(nèi)容的選擇方面,根據(jù)入門內(nèi)容和未來應(yīng)用,將所涉及的范圍精簡到最低,但是對(duì)所選擇的部分的學(xué)習(xí)則力求明確。以下是我按照自己的需求對(duì)程序庫函數(shù)排列的學(xué)習(xí)順序:a)絕大部分程序都要涉及到的庫flash ,lib ,nvic,rcc,只學(xué)基礎(chǔ)的跟最簡單應(yīng)用相關(guān)必用的部分,其他部分后期再返回頭學(xué)。b)各種程序通用但不必用的庫exti ,MDA systic,只通讀理解其作用。c)DEM(板擁有的外設(shè)庫gpio, usart,編寫代碼實(shí)驗(yàn)。d) 未來需要用到的外設(shè)的庫t
25、im , timl , adc , i2c , spi,先理解等待有條件后實(shí)驗(yàn)。e) 開發(fā)可靠性相關(guān)庫bkp, iwdg, wwdg pwr,參考其他例程的做法。f) 其他,根據(jù)興趣來學(xué)。STM32學(xué)前班教程之六:這些代碼大家都用得到2、閱讀flash :芯片內(nèi)部存儲(chǔ)器 flash操作函數(shù)我的理解一一對(duì)芯片內(nèi)部flash進(jìn)行操作的函數(shù),包括讀取,狀態(tài),擦除,寫入等等,可以允許程序去操作flash上的數(shù)據(jù)?;A(chǔ)應(yīng)用1,F(xiàn)LASH時(shí)序延遲幾個(gè)周期,等待總線同步操作。推薦按照單片機(jī)系統(tǒng)運(yùn)行頻率,0 24MHz時(shí),取 Latency=O ; 2448MHz時(shí),取 Latency=1 ; 4872MHz
26、時(shí),取 Latency=2。所有程序中必須的用法:FLASH_SetLate ncy(FLASH_Late ncy_2);位置:RCC初始化子函數(shù)里面,時(shí)鐘起振之后?;A(chǔ)應(yīng)用2,開啟FLASH預(yù)讀緩沖功能,加速FLASH的讀取。所有程序中必須的用法:FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_E nable);位置:RCC初始化子函數(shù)里面,時(shí)鐘起振之后。3、閱讀lib :調(diào)試所有外設(shè)初始化的函數(shù)。我的理解一一不理解,也不需要理解。只要知道所有外設(shè)在調(diào)試的時(shí)候,EWRA需要從這個(gè)函數(shù)里面獲得調(diào)試所需信息的地址或者指針之類的信息。基礎(chǔ)應(yīng)用1,只有一個(gè)函
27、數(shù) debug。所有程序中必須的。用法:#ifdef DEBUGdebug();#en dif位置:main函數(shù)開頭,聲明變量之后。4、閱讀nvic :系統(tǒng)中斷管理。我的理解一一管理系統(tǒng)內(nèi)部的中斷,負(fù)責(zé)打開和關(guān)閉中斷?;A(chǔ)應(yīng)用 1中斷的初始化函數(shù),包括設(shè)置中斷向量表位置,和開啟所需的中斷兩部分。所有程 序中必須的。用法:void NVIC_Configuration(void)NVIC_I ni tTypeDefNVIC_I nitStructure;/ 中斷管理恢復(fù)默認(rèn)參數(shù)#ifdef VECT_TAB_RAM/ 如果 C/C+ CompilerPreprocessorDefinedsymb
28、ols 中的定義了 VECT_TAB_R(M見程序庫更改內(nèi)容的表格)NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); / 則在 RAM調(diào)試#else / 如果沒有定義 VECT_TAB_RAMNVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);/ 則在 Flash 里調(diào)試#endif/結(jié)束判斷語句/以下為中斷的開啟過程,不是所有程序必須的。NVIC_PriorityGroupCo nfig(NVIC_PriorityGroup_2);/設(shè)置NVIC優(yōu)先級(jí)分組,方式。/注:一共16個(gè)優(yōu)先級(jí),分為搶占式和響應(yīng)式。兩種優(yōu)先級(jí)
29、所占的數(shù)量由此代碼確定,NVIC_PriorityGroup_x 可以是0、1、2、3、4,分別代表搶占優(yōu)先級(jí)有1、2、4、8、16個(gè)和響應(yīng)優(yōu)先級(jí)有16、8、4、2、1個(gè)。規(guī)定兩種優(yōu)先級(jí)的數(shù)量后,所有的中斷級(jí)別必須在其中選擇, 搶占級(jí)別高的會(huì)打斷其他中斷優(yōu)先執(zhí)行,而響應(yīng)級(jí)別高的會(huì)在其他中斷執(zhí)行完優(yōu)先執(zhí)行。NVIC_lnitStructure.NVIC_IRQChannel=中斷通道名;/開中斷,中斷名稱見函數(shù)庫NVIC_I nitStructure.NVIC_IRQCha nn elPreemptio nPriority= 0;/搶占優(yōu)先級(jí)NVIC_I nitStructure.NVIC_IR
30、QCha nn elSubPriority= 0;/響應(yīng)優(yōu)先級(jí)NVIC_InitStructure.NVIC_IRQChannelCmd= ENABLE;/ 啟動(dòng)此通道的中斷NVIC_Init(&NVIC_InitStructure);/ 中斷初始化5、閱讀rcc :單片機(jī)時(shí)鐘管理。我的理解一一管理外部、內(nèi)部和外設(shè)的時(shí)鐘,設(shè)置、打開和關(guān)閉這些時(shí)鐘。基礎(chǔ)應(yīng)用1時(shí)鐘的初始化函數(shù)過程用法:void RCC_Configuration(void)/ 時(shí)鐘初始化函數(shù)ErrorStatus HSEStartUpStatus; / 等待時(shí)鐘的穩(wěn)定RCC_DeInit();/時(shí)鐘管理重置RCC_HSE
31、Config(RCC_HSE_ON); / 打開外部晶振HSEStartUpStatus = RCC_WaitForHSEStartUp(); / 等待外部晶振就緒if (HSEStartUpStatus = SUCCESS)FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_E nable);/flash讀取緩沖,加速RCC_HCLKConfig(RCC_SYSCLK_Div1); /AHB 使用系統(tǒng)時(shí)鐘RCC_PCLK2Config(RCC_HCLK_Div2); /APB2 (高速)為 HCLK的一半RCC_PCLK1Config(RCC_HCLK_
32、Div2); /APB1 (低速)為 HCLK的一半/注:AHB主要負(fù)責(zé)外部存儲(chǔ)器時(shí)鐘。PB2負(fù)責(zé)AD, I/O ,高級(jí)TIM,串口 1。APB1負(fù)責(zé)DA, USBSPI,I2C,CAN 串口 2345,普通 TIM。RCC_PLLCo nfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);/PLLCLK = 8MHz* 9 = 72 MHzRCC_PLLCmd(ENABLE); / 啟動(dòng) PLLwhile (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET)/等待PLL啟動(dòng)RCC_SYSCLKCo nfig(RCC_SYSC
33、LKSource_PLLCLK);/將PLL設(shè)置為系統(tǒng)時(shí)鐘源while (RCC_GetSYSCLKSource() != 0x08)/等待系統(tǒng)時(shí)鐘源的啟動(dòng)RCC_AHBPeriphClockCmd(ABP2 設(shè)備 1 | ABP2設(shè)備 2 |, ENABLE);/啟動(dòng)AHP設(shè)備RCC_APB2PeriphClockCmd(ABP2 設(shè)備 1 | ABP2設(shè)備 2 |, ENABLE);/啟動(dòng)ABP2設(shè)備RCC_APB1PeriphClockCmd(ABP2 設(shè)備 1 | ABP2設(shè)備 2 |, ENABLE);/啟動(dòng)ABP1設(shè)備1、閱讀exti :外部設(shè)備中斷函數(shù)我的理解一一外部設(shè)備通過引腳
34、給岀的硬件中斷,也可以產(chǎn)生軟件中斷,19個(gè)上升、下降或都觸發(fā)。EXTIOEXTI15連接到管腳,EXTI線16連接到PVD (VDD監(jiān)視),EXTI線17連接到 RTC(鬧鐘),EXTI線18連接到USB(喚醒)?;A(chǔ)應(yīng)用1,設(shè)定外部中斷初始化函數(shù)。按需求,不是必須代碼。用法:void EXTI_Configuration(void)EXTI_InitTypeDefEXTI_InitStructure;/ 外部設(shè)備中斷恢復(fù)默認(rèn)參數(shù)EXTInitStructure.EXTI_Line=通道 1| 通道 2;/設(shè)定所需產(chǎn)生外部中斷的通道,一共19個(gè)。EXTI_InitStructure.EXTI_
35、Mode = EXTI_Mode_Interrupt; / 產(chǎn)生中斷EXTIn itStructure.EXTI_Trigger= EXTI_Trigger_Falli ng;/上升下降沿都觸發(fā)EXTInitStructure.EXTI_LineCmd= ENABLE;/ 啟動(dòng)中斷的接收EXTI_I nit(&EXTIn itStructure);/ 外部設(shè)備中斷啟動(dòng)2、閱讀dma:通過總線而越過 CPU讀取外設(shè)數(shù)據(jù)我的理解一一通過DMA應(yīng)用可以加速單片機(jī)外設(shè)、存儲(chǔ)器之間的數(shù)據(jù)傳輸,并在傳輸期間不影 響CPU進(jìn)行其他事情。這對(duì)于入門開發(fā)基本功能來說沒有太大必要,這個(gè)內(nèi)容先行跳過。3、閱
36、讀systic :系統(tǒng)定時(shí)器我的理解一一可以輸岀和利用系統(tǒng)時(shí)鐘的計(jì)數(shù)、狀態(tài)?;A(chǔ)應(yīng)用1,精確計(jì)時(shí)的延時(shí)子函數(shù)。推薦使用的代碼。用法:static vu32 TimingDelay;/全局變量聲明void SysTick_Config(void)/systick初始化函數(shù)SysTick_Cou nterCmd(SysTick_Cou nter_Disable);停止系統(tǒng)定時(shí)器SysTick_ITConfig(DISABLE);/ 停止 systick 中斷SysTick_CLKSourceCo nfig(SysTick_CLKSource_HCLK_Div8);/systick 使用HCLK作為
37、時(shí)鐘源,頻率值除以8。SysTick_SetReload(9000);重置時(shí)間1毫秒(以72MHz為基礎(chǔ)計(jì)算)SysTick_ITConfig(ENABLE);/ 開啟 systic 中斷void Delay (u32 nTime) / 延遲一毫秒的函數(shù)SysTick_Cou nterCmd(SysTick_Cou nter_E nable);/systic 開始計(jì)時(shí)TimingDelay = nTime;/計(jì)時(shí)長度賦值給遞減變量while(TimingDelay != 0);/檢測是否計(jì)時(shí)完成SysTick_CounterCmd(SysTick_Counter_Disable);/ 關(guān)閉計(jì)數(shù)
38、器SysTick_CounterCmd(SysTick_Counter_Clear);/ 清除計(jì)數(shù)值void TimingDelay_Decrement(void)if (TimingDelay != 0x00)/檢測計(jì)數(shù)變量是否達(dá)到0Timi ngDelay-;/計(jì)數(shù)變量遞減注:建議熟練后使用,所涉及知識(shí)和設(shè)備太多,新手岀錯(cuò)的可能性比較大。新手可用簡化的延 時(shí)函數(shù)代替:void Delay(vu32 nCount) 簡單延時(shí)函數(shù)for(; nCount != 0; nCount-);(循環(huán)變量遞減計(jì)數(shù))當(dāng)延時(shí)較長,又不需要精確計(jì)時(shí)的時(shí)候可以使用嵌套循環(huán):void Delay(vu32 nCo
39、unt)/簡單的長時(shí)間延時(shí)函數(shù)int i;/聲明內(nèi)部遞減變量for(;nCount != 0; nCount-)/ 遞減變量計(jì)數(shù)for (i=0;ivOxffff;i+)/內(nèi)部循環(huán)遞減變量計(jì)數(shù)4、閱讀gpio : I/O設(shè)置函數(shù)我的理解一一所有輸入輸出管腳模式設(shè)置,可以是上下拉、浮空、開漏、模擬、推挽模式,頻率特性為2M, 10M, 50M。也可以向該管腳直接寫入數(shù)據(jù)和讀取數(shù)據(jù)。基礎(chǔ)應(yīng)用1,gpio初始化函數(shù)。所有程序必須。用法:void GPIO_Configuration(void)GPIO_InitTypeDef GPIOnitStructure;/GPIO 狀態(tài)恢復(fù)默認(rèn)參數(shù)GPIOni
40、tStructure.GPIO_Pin= GPIO_Pin_標(biāo)號(hào) | GPIO_Pin_標(biāo)號(hào);/管腳位置定義,標(biāo)號(hào)可以是NONE ALL、0至15。GPIOnitStructure.GPIO_Speed= GPIO_Speed_2MHz; 輸岀速度 2MHzGPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; / 模擬輸入模式GPIO_Init(GPIOC, &GPIO_InitStructure);/C 組 GPIO初始化/注:以上四行代碼為一組,每組GPIO屬性必須相同,默認(rèn)的GPIO參數(shù)為:ALL, 2MHz, FLATING。如果其中任意一
41、行與前一組相應(yīng)設(shè)置相同,那么那一行可以省略,由此推論如果前面已經(jīng)將此行參數(shù)設(shè)定為默認(rèn)參數(shù)(包括使用GPIO_InitTypeDef GPIO_InitStructure代碼),本組應(yīng)用也是默認(rèn)參數(shù)的話,那么也可以省略。以下重復(fù)這個(gè)過程直到所有應(yīng)用的管腳全部被定義完畢?;A(chǔ)應(yīng)用2,向管腳寫入0或1用法:GPIO_WriteBit(GPIOB, GPIO_Pin_2, (BitAction)0x01);寫入 1STM32筆記之七:讓它跑起來,基本硬件功能的建立0、實(shí)驗(yàn)之前的準(zhǔn)備a) 接通串口轉(zhuǎn)接器b) 下載IO與串口的原廠程序,編譯通過保證調(diào)試所需硬件正常。1、 flash , lib , nvi
42、c, rcc 和 GPIO,基礎(chǔ)程序庫編寫a) 這幾個(gè)庫函數(shù)中有一些函數(shù)是關(guān)于芯片的初始化的,每個(gè)程序中必用。為保障程序品質(zhì),文件,是x代替,比初學(xué)階段要求嚴(yán)格遵守官方習(xí)慣。注意,官方程序庫例程中有個(gè)platform_co nfig.h專門用來指定同類外設(shè)中第幾號(hào)外設(shè)被使用,就是說在main.c里面所有外設(shè)序號(hào)用如USARTx程序會(huì)到這個(gè)頭文件中去查找到底是用那些外設(shè),初學(xué)的時(shí)候參考例程別被這個(gè)所 迷惑住。b) 全部必用代碼取自庫函數(shù)所帶例程,并增加逐句注釋。c) 習(xí)慣順序 Lib (debug),RCC(包括 Flash 優(yōu)化),NVIC, GPIOd) 必用模塊初始化函數(shù)的定義:/定義時(shí)鐘
43、初始化函數(shù)/定義管腳初始化函數(shù)/定義中斷管理初始化函數(shù)/定義延遲函數(shù)void RCC_Configuration(void);void GPIO_Configuration(void);void NVIC_Co nfigurati on (void);void Delay(vu32 nCount);e) Main中的初始化函數(shù)調(diào)用:RCC_Co nfigurati on ();NVIC_Co nfiguratio n();/時(shí)鐘初始化函數(shù)調(diào)用/中斷初始化函數(shù)調(diào)用GPIO_Co nfiguratio n();/管腳初始化函數(shù)調(diào)用f) Lib注意事項(xiàng):屬于Lib的Debug函數(shù)的調(diào)用,應(yīng)該放在 m
44、ain函數(shù)最開始,不要改變其位置。g) RCC注意事項(xiàng):Flash優(yōu)化處理可以不做,但是兩句也不難也不用改參數(shù)根據(jù)需要開啟設(shè)備時(shí)鐘可以節(jié)省電能 時(shí)鐘頻率需要根據(jù)實(shí)際情況設(shè)置參數(shù)h) NVIC注意事項(xiàng)注意理解占先優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)的分組的概念i) GPIO注意事項(xiàng)注意以后的過程中收集不同管腳應(yīng)用對(duì)應(yīng)的頻率和模式的設(shè)置。作為高低電平的I/O,所需設(shè)置:RCC初始化里面打開 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA);GPIO 里面管腳設(shè)定:10 輸岀(50MHz Out_PP); IO 輸入(50MHz IPU);j) GPIO應(yīng)用GPIO_Write
45、Bit(GPIOB, GPIO_Pin_2, Bit_RESET); 重置GPIO_WriteBit(GPIOB,GPIO_Pin_2,(BitActio n)0x01);寫入1GPIO_WriteBit(GPIOB,GPIO_Pin_2,(BitActio n)0x00);寫入0GPIO_ReadI nputDataBit(GPIOA,GPIO_Pin_6) ;/ 讀入IOk) 簡單Delay函數(shù)void Delay(vu32 nCount) 簡單延時(shí)函數(shù)for(;nCount != 0; nCount-);實(shí)驗(yàn)步驟:RCC初始化函數(shù)里添加:RCC_APB2PeriphClockCmd(RC
46、C_APB2Periph_USART11 RCC_APB2Periph_GPIOA| RCC_APB2Periph_GPIOB, ENABLE);不用其他中斷,NVIC初始化函數(shù)不用改GPIO初始化代碼:/IO 輸入,GPIOB的2、10、11腳輸岀GPIO_InitStructure.GPIO_Pin= GPIO_Pin_2 ;/ 管腳號(hào)GPIOnitStructure.GPIO_Speed= GPIO_Speed_50MHz; / 輸岀速度GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; / 輸入輸岀模式GPIO_Init(GPIOB,&am
47、p;GPIOnitStructure);/ 初始化簡單的延遲函數(shù):void Delay(vu32 nCount)/ 簡單延時(shí)函數(shù) for (; nCount != 0; nCount-);/ 循環(huán)計(jì)數(shù)延時(shí)完成之后再在 main.c的while里面寫一段:GPIO_WriteBit(GPIOB,GPIO_Pin_2, (BitAction)0x01);寫入 1Delay ( Oxffff );GPIO_WriteBit(GPIOB,GPIO_Pin_2, (BitAction)0x00);寫入 0Delay ( 0xffff );就可以看到連接在PB2腳上的LED閃爍了,單片機(jī)就跑起來了。STM
48、32筆記之八:來跟PC打個(gè)招呼,基本串口通訊a) 目的:在基礎(chǔ)實(shí)驗(yàn)成功的基礎(chǔ)上,對(duì)串口的調(diào)試方法進(jìn)行實(shí)踐。硬件代碼順利完成之后, 對(duì)日后調(diào)試需要用到的printf 重定義進(jìn)行調(diào)試,固定在自己的庫函數(shù)中。b) 初始化函數(shù)定義:void USART_Configuration(void);/ 定義串口初始化函數(shù)c) 初始化函數(shù)調(diào)用:void UART_Co nfigurati on (void);/串口初始化函數(shù)調(diào)用初始化代碼:/串口初始化函數(shù)void USART_Configuration(void)/串口參數(shù)初始化USART_InitTypeDef USART_InitStructure;/
49、串口設(shè)置恢復(fù)默認(rèn)參數(shù)/初始化參數(shù)設(shè)置USART_InitStructure.USART_BaudRate= 9600;/ 波特率 9600USART_InitStructure.USART_WordLength= USART_WordLength_8b; / 字長 8 位USART_I nitStructure.USART_StopBits = USART_StopBits_1;1 位停止字節(jié)USART_InitStructure.USART_Parity= USART_Parity_No;/ 無奇偶校驗(yàn)USART_I nitStructure.USART_HardwareFlowCo ntr
50、ol = USART_HardwareFlowC on trol_No ne;無流控制USART_InitStructure.USART_Mode = USART_Mode_RX USART_Mode_Tx;/ 打開 Rx 接收和 Tx 發(fā)送功能USART_Init(USART1, &USART_InitStructure);/ 初始化USART_Cmd(USART1ENABLE);/ 啟動(dòng)串口RCC中打開相應(yīng)串口RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);GPIO里面設(shè)定相應(yīng)串口管腳模式/串口 1的管腳初始化GPIO_I
51、nitStructure.GPIO_Pin= GPIO_Pin_9;/ 管腳 9GPIOnitStructure.GPIO_Mode= GPIO_Mode_AF_PP; / 復(fù)用推挽輸岀GPIOnitStructure.GPIO_Pin= GPIO_Pin_10;/ 管腳 10GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IN_FLOATING; 浮空輸入GPIOnit(GPIOA,&GPIO_InitStructure);RX 初始化d) 簡單應(yīng)用:發(fā)送一位字符USART_SendData(USART1,數(shù)據(jù));/ 發(fā)送一位數(shù)據(jù)while(USART
52、_GetFlagStatus(USART1, USART_FLAG_TXE= RESET)/等待發(fā)送完畢接收一位字符while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE= RESET)/等待接收完畢變量=(USART_ReceiveData(USART1); / 接受一個(gè)字節(jié)發(fā)送一個(gè)字符串先定義字符串:char rx_data250;然后在需要發(fā)送的地方添加如下代碼int i;/定義循環(huán)變量while(rx_data!='0')/循環(huán)逐字輸岀,到結(jié)束字'0'USART_SendData(USART1, rx_data
53、);/ 發(fā)送字符while(USART_GetFlagStatus(USART1,USART_FLAG_TXE= RESET) / 等待字符發(fā)送完畢i+;e) USART注意事項(xiàng):發(fā)動(dòng)和接受都需要配合標(biāo)志等待。只能對(duì)一個(gè)字節(jié)操作,對(duì)字符串等大量數(shù)據(jù)操作需要寫函數(shù)使用串口所需設(shè)置:RCC初始化里面打開 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USARTx);GPI0 里面管腳設(shè)定:串口 RX( 50Hz, IN_FLOATING);串口 TX( 50Hz,AF_PP);f) printf 函數(shù)重定義(不必理解,調(diào)試通過以備后用)(1) 需要c標(biāo)準(zhǔn)函數(shù):#i n
54、clude "stdio.h"(2) 粘貼函數(shù)定義代碼#define PUTCHAR_PROTOTYPiE _io_putchar(intch) / 定義為 putchar 應(yīng)用(3) RCC中打開相應(yīng)串口(4) GPIO里面設(shè)定相應(yīng)串口管腳模式(6) 增加為putchar函數(shù)。int putchar(int c)/putchar 函數(shù)if (c = 'n')putchar('r');/將printf 的n變成r/發(fā)送字符USART_Se ndData(USART1, c);while(USART_GetFlagStatus(USART1,
55、USART_FLAG_TXE= RESET) / 等待發(fā)送結(jié)束return c;/返回值(8)通過,試驗(yàn)成功。printf 使用變量輸岀:%c字符,d整數(shù),%f浮點(diǎn)數(shù),%s字符串,/n或/r為換行。注意:只能用于main.c中。3、NVIC串口中斷的應(yīng)用a) 目的:利用前面調(diào)通的硬件基礎(chǔ),和幾個(gè)函數(shù)的代碼,進(jìn)行串口的中斷輸入練習(xí)。因?yàn)樵趯?shí)際應(yīng)用中,不使用中斷進(jìn)行的輸入是效率非常低的,這種用法很少見,大部分串口的輸入都離不開中斷。b) 初始化函數(shù)定義及函數(shù)調(diào)用:不用添加和調(diào)用初始化函數(shù),在指定調(diào)試地址的時(shí)候已經(jīng)調(diào)用過,在那個(gè) NVIC_C on figuration里面添加相應(yīng)開中斷代碼就行了。c) 過程:i. 在串口初始化中USART_Cm之前加入中斷設(shè)置:USART_ITConfig(USART1, USART_IT_TXE,ENABLE);/TXE 發(fā)送中斷,TC傳輸完成中斷,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國除塵設(shè)備產(chǎn)業(yè)運(yùn)營狀況與發(fā)展?jié)摿Ψ治鰣?bào)告
- 2025-2030年中國鉛白市場發(fā)展現(xiàn)狀及前景趨勢分析報(bào)告
- 2025-2030年中國鎢鐵行業(yè)發(fā)展現(xiàn)狀及前景趨勢分析報(bào)告
- 2025-2030年中國轎車懸架彈簧轎行業(yè)發(fā)展?fàn)顩r及前景趨勢分析報(bào)告
- 2025-2030年中國葡萄糖酸鈣市場競爭狀況及投資趨勢分析報(bào)告
- 2025-2030年中國色選機(jī)市場競爭格局及發(fā)展趨勢分析報(bào)告
- 2025-2030年中國紡織品直噴墨水行業(yè)發(fā)展趨勢與十三五規(guī)劃研究報(bào)告
- 2025-2030年中國立磨市場運(yùn)行態(tài)勢及投資戰(zhàn)略研究報(bào)告
- 2025-2030年中國硫磺回收市場運(yùn)行狀況及發(fā)展趨勢預(yù)測報(bào)告
- 2025-2030年中國石蠟行業(yè)市場運(yùn)行狀況及發(fā)展策略分析報(bào)告
- 初中物理競賽及自主招生講義:第7講 密度、壓強(qiáng)與浮力(共5節(jié))含解析
- 2024-2025學(xué)年重慶市渝中區(qū)四年級(jí)(上)期末數(shù)學(xué)試卷
- 2025年人教版中考英語一輪復(fù)習(xí):七年級(jí)下冊(cè)考點(diǎn)測試卷(含答案)
- 三年級(jí)體育下冊(cè)全冊(cè)教案
- 2024年八年級(jí)語文下冊(cè)《經(jīng)典常談》第一章《說文解字》練習(xí)題卷附答案
- (研究生)商業(yè)倫理與會(huì)計(jì)職業(yè)道德ppt教學(xué)課件(完整版)
- 三年級(jí)數(shù)學(xué)下冊(cè)單元計(jì)劃【9個(gè)單元全】
- 火力發(fā)電廠水汽化學(xué)監(jiān)督導(dǎo)則
- 二年級(jí)科學(xué)上冊(cè)期末考試質(zhì)量分析
- 相聲《治病》
- 行動(dòng)學(xué)習(xí)-組織能力提升新境界培訓(xùn)課件.ppt
評(píng)論
0/150
提交評(píng)論