版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
..XX郵電大學(xué)〔計(jì)算機(jī)學(xué)院〕嵌入式系統(tǒng)板級(jí)電路裝配課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告專業(yè)名稱:計(jì)算機(jī)科學(xué)與技術(shù)班級(jí):計(jì)科學(xué)號(hào):XXXXXXXXX:XXX指導(dǎo)教師:XXX實(shí)驗(yàn)日期:2017年12月11日—12月22日第一周:開(kāi)發(fā)板硬件裝配開(kāi)發(fā)板硬件構(gòu)造開(kāi)發(fā)板由PACK板和底板構(gòu)成,PACK板板載一枚LCP2132芯片,該芯片是NXP公司〔飛利浦創(chuàng)立〕設(shè)計(jì)的一款基于ARM7TDMI-S的高性能32位RISC微控制器,具有Thumb擴(kuò)展功能,64KB片F(xiàn)lashROM,具有在系統(tǒng)編程〔ISP〕和應(yīng)用編程〔IAP〕,16KBRAM,向量中斷控制器,兩個(gè)UART,一個(gè)帶全調(diào)制解調(diào)器接口。兩個(gè)I2C串行接口,兩個(gè)SPI串行接口三個(gè)32位定時(shí)器,看門(mén)狗定時(shí)器,帶有備用電池備份的實(shí)時(shí)時(shí)鐘,欠壓檢測(cè)電路通用I/O引腳。CPU時(shí)鐘高達(dá)60MHz,片晶體振蕩器和片PLL。板子總體分了電源電路,晶振電路,復(fù)位電路,LED電路,按鍵電路,串口電路,JTAG調(diào)試電路等幾局部,如下列圖所示圖1EasyARM2132開(kāi)發(fā)板底板元件布局圖硬件原理組成及分析開(kāi)發(fā)板完整電路圖如下列圖所示圖2EasyARM2132開(kāi)發(fā)板完整電路圖電源電路:LPC2132電源電路局部采用了一個(gè)DC接口的POWER1供電口和一個(gè)5V的USB供電口,部采用了一個(gè)1N5819二極管來(lái)穩(wěn)流,采用SPX1117M3-3.3低壓差穩(wěn)壓器,如右圖所示。電路另一邊有一個(gè)紅色的發(fā)光二極管,當(dāng)電源接通后,二極管會(huì)點(diǎn)亮。復(fù)位電路復(fù)位電路采用一顆CAT1025芯片,CAT1025是基于微控制器系統(tǒng)的存儲(chǔ)器和電源監(jiān)控的完全解決方案。它們利用低功耗CMOS技術(shù)將2K位的串行EEPOM和用于掉電保護(hù)的系統(tǒng)電源監(jiān)控電路集成在一塊芯片。存儲(chǔ)器采用400KHz的I2C總線接口。CAT1025包含1個(gè)準(zhǔn)確的Vcc監(jiān)控測(cè)電路和2個(gè)開(kāi)漏輸出:RESET和!RESET。當(dāng)Vcc低于復(fù)位門(mén)檻電壓時(shí),!RESET引腳將變?yōu)楦唠娖?,RESET將變?yōu)榈碗娖健AT1025還包含一個(gè)寫(xiě)保護(hù)輸入〔WP〕。如果WP連接高電平,那么寫(xiě)操作被制止。nRST連接到芯片LPC2132的復(fù)位引腳,當(dāng)復(fù)位按鍵RST1按下時(shí),CAT1025的復(fù)位引腳輸出有效信號(hào),使芯片LPC2132復(fù)位。系統(tǒng)時(shí)鐘電路LPC2132微控制器可使用外部晶振或外部時(shí)鐘源,片外晶振頻率圍:1~30MHz,如下列圖中Y1-11.0592MHz,部鎖相環(huán)電路PLL可調(diào)整系統(tǒng)時(shí)鐘,通過(guò)片PLL可實(shí)現(xiàn)最大為60MHz的CPU操作頻率,實(shí)時(shí)時(shí)鐘具有獨(dú)立的時(shí)鐘源,如下列圖中Y2-32.768KHZ晶振。JTAG接口電路采用ARM公司提出的標(biāo)準(zhǔn)20腳JTAG仿真調(diào)試接口,JTAG信號(hào)的定義以及與LPC2132的連接如下列圖:按鍵及顯示電路LPC2132開(kāi)發(fā)板具有4個(gè)按鍵、4個(gè)LED燈。4個(gè)LED燈一邊已經(jīng)與DP3V3連接,另一邊經(jīng)過(guò)1個(gè)470R的電阻后與JP1跳線相連,當(dāng)JP12連通的時(shí)候,LED1的一側(cè)與芯片的P0.17口就會(huì)連通,P0.17口輸出低電平,LED1就會(huì)點(diǎn)亮,如果P0.17輸出高電平,LED1就會(huì)熄滅。4個(gè)按鍵中復(fù)位鍵已經(jīng)在前面介紹了,剩下三個(gè)按鍵KEY1、KEY2、KEY3一邊接地,另一邊接了4K7的電阻然后與正極相連,還接了JP2跳線組,如果JP2的12連通,那么P0.16就和KEY1連通,當(dāng)按鍵按下的時(shí)候,P0.16輸出低電平,當(dāng)按鍵沒(méi)有按下的時(shí)候P0.16輸出高電平,因?yàn)榘存I檢測(cè)電路可以編寫(xiě)為檢測(cè)是否有低電平來(lái)判斷按鍵是否按下。UART接口電路CH340G是一個(gè)USB轉(zhuǎn)串口芯片,可以把電腦的USB口映射為串口用。當(dāng)使用串口電路進(jìn)展UART調(diào)試的時(shí)候,需要將JP6短接,連通P0.0和CH340G的TXD口,連通P0.1和CH340G的RXD口。另一邊CH340G的X1和X0接入了X1-12MHz的晶振。開(kāi)發(fā)板硬件安裝調(diào)試過(guò)程焊接最小系統(tǒng)首先焊接電源模塊,復(fù)位電路模塊,晶振模塊,構(gòu)成最小系統(tǒng),然后對(duì)最小系統(tǒng)進(jìn)展測(cè)試。測(cè)試方法:將電源線和開(kāi)發(fā)板的電源模塊連接,觀察電源指示燈是否點(diǎn)亮,如果點(diǎn)亮,使用萬(wàn)用表測(cè)量U1點(diǎn)電壓,數(shù)值圍為:3.29V~3.31V,標(biāo)準(zhǔn)值為3.30V,說(shuō)明電源電路模塊正常。然后用示波器觀察晶振引腳的波形,查看晶振是否正常。焊接外接電路板。在洞洞板上面焊接一個(gè)LED燈,然后引出接口,一個(gè)為正,一個(gè)為負(fù),然后將正負(fù)極分別與排針焊接在一起;將蜂鳴器的正負(fù)極分別于排針焊接;將按鍵的兩邊與排針焊接在一起。測(cè)試方法:將LED正負(fù)極分別與開(kāi)發(fā)板的DP3.3V和GND連接,可以觀察到LED燈點(diǎn)亮。蜂鳴器的正負(fù)極與開(kāi)發(fā)板的DP3.3V和GND連接,可以聽(tīng)到蜂鳴器發(fā)聲。將開(kāi)發(fā)板正極和蜂鳴器正極相連,蜂鳴器負(fù)極與開(kāi)關(guān)一邊相連,然后開(kāi)關(guān)另一邊接低電平,按下按鍵后蜂鳴器會(huì)發(fā)出聲音,證明開(kāi)關(guān)電路完好。焊接LED燈焊接LED電路,將LED1-LED7焊接在開(kāi)發(fā)板上面,然后焊接R4-R7四個(gè)電阻,這是二極管的分壓電阻。測(cè)試方法:給開(kāi)發(fā)板通電,然后依次給JP1的1、3、5、7接低電平,會(huì)發(fā)現(xiàn)LED1-LED4依次點(diǎn)亮,如果有不亮的,說(shuō)明焊接有誤,檢查二極管的正負(fù)是否正確,用萬(wàn)用表檢測(cè)是否有短路。焊接開(kāi)關(guān)將KEY1、KEY2、KEY3焊接到開(kāi)發(fā)板上面,然后將3個(gè)4K7的電阻焊接到R1、R2、R3三個(gè)位置,最后在JP2上面焊接一組排針。測(cè)試方法:給開(kāi)發(fā)板供電,用萬(wàn)用表檢測(cè)KEY1-KEY3的電壓,正常圍應(yīng)該是3.28V-3.31V,當(dāng)KEY1鍵按下的時(shí)候,JP2的1電壓應(yīng)該為0V;當(dāng)KEY2鍵按下的時(shí)候,JP2的3電壓應(yīng)該為0V;當(dāng)KEY3鍵按下的時(shí)候,JP2的4電壓應(yīng)該為0V。焊接串口模塊將CH340G焊接到開(kāi)發(fā)板對(duì)應(yīng)位置,要注意焊接的時(shí)候容易將周圍引腳連接在一起,必須非常小心的操作。測(cè)試方法:給開(kāi)發(fā)板供電,然后USB口與電腦連接,電腦的設(shè)備管理器可以檢測(cè)到串口輸入,如下列圖:焊接JTAG模塊JTAG模塊很簡(jiǎn)單,只需要將JTAG后面的引腳依次焊接即可。檢測(cè)方法:開(kāi)發(fā)板供電后,用JTAG線連接開(kāi)發(fā)板的電腦,然后翻開(kāi)H-JTAGServer,點(diǎn)擊搜索可以檢測(cè)到芯片。如下列圖:在H-Flasher窗口的"FlashSelection〞項(xiàng)選擇仿真的器件型號(hào)LPC2132,在H-Flasher窗口的"Programming〞項(xiàng)窗,點(diǎn)擊<Check>按鈕,H-JTAG將檢測(cè)到的器件類型顯示于本窗口。遇到問(wèn)題分析及硬件調(diào)試體會(huì)遇到的問(wèn)題焊接好LED燈模塊后,測(cè)試LED燈的時(shí)候發(fā)現(xiàn)LED3不亮,用萬(wàn)用表檢測(cè)后發(fā)現(xiàn)是LED3的引腳虛焊,重新焊接后問(wèn)題解決。2、硬件調(diào)試體會(huì)焊接過(guò)程中需要足夠的耐心,不能看到別的同學(xué)進(jìn)度比自己快就急躁,急于求成做出來(lái)的產(chǎn)品只能是差的甚至是壞的,我們應(yīng)該從焊接中總結(jié)經(jīng)歷,提高自己的焊接能力,掌握焊接技巧,焊接出最好,最完美的電路板。第二周:軟件編程與調(diào)試一、調(diào)試環(huán)境搭建啟動(dòng)ADS1.2IDE集成開(kāi)發(fā)環(huán)境。在ADS主窗口主菜單項(xiàng)選擇擇File->New,使用asmforlpc2132工程模板建立一個(gè)工程〔圖例中工程名稱為:ZQL_LIB1〕,指定工程路徑〔圖例中工程路徑為D:\ARM_Lib_Bak\ARM_asm〕。點(diǎn)擊確認(rèn)<按鈕>,創(chuàng)立工程。在ZQL_LIB1工程窗口,雙擊模板文件main.S,翻開(kāi)該文件??稍谥鞔翱诓藛雾?xiàng)選擇擇Edit->Perferences,設(shè)置字體和字號(hào)。在main.S文件編輯窗的"addtheusercodehere.添加用戶代碼〞行下建立用戶匯編程序代碼。選擇Project->Make〔或快捷鍵<F7>〕,編譯整個(gè)工程。假設(shè)編譯成功,那么Erros&Warnings對(duì)話框會(huì)報(bào)告編譯錯(cuò)誤為0,此時(shí)即可對(duì)工程進(jìn)展仿真。二、調(diào)試方法單步運(yùn)行;在AXD調(diào)試器主窗口,選擇Execute->Step〔或快捷鍵<F10>〕,處理器執(zhí)行一行代碼;設(shè)置斷點(diǎn);在AXD調(diào)試器"代碼調(diào)試窗口〞雙擊目標(biāo)代碼行,假設(shè)出現(xiàn)紅色實(shí)心圓點(diǎn),那么表示斷點(diǎn)設(shè)置成功;然后選擇Execute->Go全速運(yùn)行,處理器執(zhí)行程序停頓在斷點(diǎn)行;運(yùn)行到光標(biāo)行;在AXD調(diào)試器"代碼調(diào)試窗口〞單擊選擇目標(biāo)代碼行,然后在AXD調(diào)試器主窗口,選擇Execute->RuntoCursor運(yùn)行到光標(biāo)處;通過(guò)斷點(diǎn)調(diào)試可以觀察ARM存放器和存儲(chǔ)單元的數(shù)值變化,具體操作方法在后面的實(shí)驗(yàn)中會(huì)作詳細(xì)介紹。二、完成實(shí)驗(yàn)容本人主要負(fù)責(zé)容:GPIO輸入輸出根底實(shí)驗(yàn),交通燈綜合實(shí)驗(yàn)中的蜂鳴器、中斷效勞程序、GPIO初始化模塊以及鍵盤(pán)掃描局部編寫(xiě)。1、GPIO輸入輸出實(shí)驗(yàn)〔1〕實(shí)驗(yàn)?zāi)康恼莆誏PC2132工程模板的使用。掌握EasyJTAG仿真器的安裝和使用。能夠在EasyARM教學(xué)實(shí)驗(yàn)開(kāi)發(fā)平臺(tái)上運(yùn)行第一個(gè)程序。熟悉LPC2000系列ARM7微控制器的GPIO控制?!?〕實(shí)驗(yàn)原理LPC2132系列的ARM7微控制器的所有GPIO口,均為雙向I/O口。引腳可以根據(jù)需要配置為I/O口或其它功能,和GPIO相關(guān)的存放器一共有6個(gè)見(jiàn)下表:通過(guò)編程控制BEEP〔P0.7〕輸出低電平,從而實(shí)現(xiàn)蜂鳴器持續(xù)發(fā)聲?!?〕實(shí)驗(yàn)過(guò)程啟動(dòng)ADS1.2IDE集成開(kāi)發(fā)環(huán)境,選擇ARMExecutableImageforlpc2132工程模板建立一個(gè)工程BeepCon_C。在user組里編寫(xiě)主程序代碼main.c。選用DebugInRam生成目標(biāo),然后編譯工程。將EasyARM教學(xué)實(shí)驗(yàn)開(kāi)發(fā)平臺(tái)上的P0.7管腳與Beep跳線短接選擇Project->Debug,啟動(dòng)AXD進(jìn)展JTAG仿真調(diào)試。全速運(yùn)行程序,程序?qū)?huì)在main.c的主函數(shù)中停頓〔因?yàn)閙ain函數(shù)起始處默認(rèn)設(shè)置有斷點(diǎn)〕。單擊ContextVariable圖標(biāo)按鈕〔或者選擇ProcessorViews->Variables〕翻開(kāi)變量觀察窗口,通過(guò)此窗口可以觀察局部變量和全局變量。選擇SystemViews->DebuggerInternals即可翻開(kāi)LPC2000系列ARM7微控制器的片外存放器窗口??梢詥尾竭\(yùn)行程序,可以設(shè)置/取消斷點(diǎn);或者全速運(yùn)行程序,停頓程序運(yùn)行,觀察變量的值,判斷蜂鳴器控制是否正確。〔4〕問(wèn)題分析與解決方法GPIO功能選擇之后沒(méi)有進(jìn)展IO0DIR方向選擇,導(dǎo)致P0.7口依然為輸入口,無(wú)法輸出低電平信號(hào),故而蜂鳴器沒(méi)有發(fā)聲,添加這行代碼后,成功實(shí)現(xiàn)功能。2、定時(shí)器與中斷控制〔1〕實(shí)驗(yàn)?zāi)康氖煜PC2000系列ARM7微控制器的定時(shí)器0的根本設(shè)置及匹配輸出應(yīng)用?!?〕實(shí)驗(yàn)原理使用定時(shí)器0實(shí)現(xiàn)1秒定時(shí),控制蜂鳴器蜂鳴。采用中斷方式實(shí)現(xiàn)定時(shí)控制。備注:EasyARM2132實(shí)驗(yàn)板上的系統(tǒng)時(shí)鐘默認(rèn)為11.0592MHz;系統(tǒng)中已定義了符號(hào)常量Fpclk=11059200;〔3〕實(shí)驗(yàn)過(guò)程啟動(dòng)ADS1.2,使用ARMExecutableImageforlpc2132工程模板建立一個(gè)工程TimeOut_C。在user組中的main.c中編寫(xiě)主程序代碼。選用DebugInExram生成目標(biāo),然后編譯連接工程。選擇【Project】->【Debug】,啟動(dòng)AXD進(jìn)展JTAG仿真調(diào)試。將LPC2132開(kāi)發(fā)板上的P0.7接入蜂鳴器全速運(yùn)行程序,蜂鳴器會(huì)響一秒,停一秒,然后再響一秒……依次循環(huán)。代碼如下:#include"config.h"#defineBEEP1<<7 /*P0.7控制BEEP,低電平蜂鳴*//*******************************************************************************************函數(shù)名稱:IRQ_Timer0()**函數(shù)功能:定時(shí)器0中斷效勞程序,取反LED2控制口。**入口參數(shù):無(wú)**出口參數(shù):無(wú)*******************************************************************************************/void__irqIRQ_Timer0(void){ if((IO0SET&BEEP)==0) IO0SET=BEEP; /*關(guān)閉BEEP*/ else IO0CLR=BEEP; T0IR=0x01; /*去除中斷標(biāo)志*/ VICVectAddr=0x00; /*通知VIC中斷處理完畢*/}/********************************************************************************************函數(shù)名稱:main()**函數(shù)功能:使用定時(shí)器實(shí)現(xiàn)1秒鐘定時(shí),控制LED9閃爍。中斷方式。**調(diào)試說(shuō)明:需要將跳線JP11連接BEEP。******************************************************************************************/intmain(void){ PINSEL1=0x00000000; /*設(shè)置管腳連接GPIO*/ IO0DIR=BEEP; /*設(shè)置BEEP控制口輸出*/ IRQEnable(); /*IRQ中斷使能*/ /*定時(shí)器0初始化*/ T0TC=0; /*定時(shí)器設(shè)置為0*/ T0PR=0; /*時(shí)鐘不分頻*/ T0MCR=0x03; /*設(shè)置T0MR0匹配后復(fù)位T0TC,并產(chǎn)生中斷標(biāo)志*/ T0MR0=Fpclk; /*1秒鐘定時(shí);系統(tǒng)中已定義Fpclk=11059200*/ T0TCR=0x01; /*啟動(dòng)定時(shí)器*/ /*設(shè)置定時(shí)器0中斷IRQ*/ VICIntSelect=0x00; /*所有中斷通道設(shè)置為IRQ中斷*/ VICVecttl0=0x20|0x04; /*設(shè)置定時(shí)器0中斷通道分配最高優(yōu)先級(jí)*/ VICVectAddr0=(uint32)IRQ_Timer0; /*設(shè)置中斷效勞程序地址*/ VICIntEnable=1<<0x04; /*使能定時(shí)器0中斷*/ while(1);return0;}〔4〕問(wèn)題分析與解決方法下板后蜂鳴器不發(fā)聲,檢查后發(fā)現(xiàn)是蜂鳴器一邊接了低電平,另一邊接了P0.7引腳,輸出低電平后,倆邊都是低,所以蜂鳴器不發(fā)聲,重新接線后恢復(fù)正常。3、外中斷控制〔1〕實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)LPC2000系列ARM7微控制器的向量中斷控制器及外中斷的應(yīng)用技術(shù)。〔2〕實(shí)驗(yàn)原理主程序閃爍LED,EINT使能/停頓BEEP的鳴響?!?〕實(shí)驗(yàn)過(guò)程跳線LED1、Key1和Beep分別連接到P1.18、P0.16和P0.7管腳;使用KEY1模擬外中斷;啟動(dòng)ADS1.2,使用ARMExecutableImageforlpc2132工程模板建立一個(gè)工程TimeEINT_C。在user組中的main.c中編寫(xiě)主程序代碼;使用系統(tǒng)宏IRQEnable(),使能IRQ中斷。裝載并使能外中斷;選用DebugInExram生成目標(biāo),然后編譯連接工程。選擇【Project】->【Debug】,啟動(dòng)AXD進(jìn)展JTAG仿真調(diào)試。全速運(yùn)行程序,LED閃爍;每一次按鍵Key,蜂鳴器就會(huì)轉(zhuǎn)換靜音或鳴響狀態(tài)。代碼如下:#include"config.h"#defineBEEPCON1<<7 //P0.7引腳控制Beep,低電平蜂鳴#defineLED11<<18 //P1.18引腳控制LED1,低電燈亮/*****************************************************************************名稱:DelayNS()*功能:長(zhǎng)軟件延時(shí)*入口參數(shù):dly---延時(shí)參數(shù),值越大,延時(shí)越久*出口參數(shù):無(wú)****************************************************************************/voidDelayNS(uint32dly){uint32i;for(;dly>0;dly--){for(i=0;i<5000;i++);}}/*****************************************************************************名稱:IRQ_EINT0()*功能:外中斷效勞程序,取反BEEPCON控制口。*入口參數(shù):無(wú)*出口參數(shù):無(wú)****************************************************************************/void__irqIRQ_Eint0(void){ if((IO0SET&BEEPCON)==0)//反轉(zhuǎn)BEEPCON管教輸出狀態(tài)IO0SET=BEEPCON; else IO0CLR=BEEPCON; while((EXTINT&0x01)!=0) EXTINT=0x01; //去除EINT0中斷標(biāo)志VICVectAddr=0x00; //通知VIC中斷處理完畢}/*****************************************************************************文件名:main.c*功能:主程序閃爍LED1;KEY1模擬外中斷方式,每次外中斷事件反轉(zhuǎn)Beep鳴響狀態(tài)。*說(shuō)明:****************************************************************************/intmain(void){ intx; PINSEL0=0x00000000; //設(shè)置管腳連接GPIO PINSEL1=0x00000001; //設(shè)置管腳P0.16為EINT0 IO0DIR=BEEPCON; //設(shè)置P0.7為輸出IO1DIR=LED1; //設(shè)置P1.18為輸出EXTMODE=0x00; IRQEnable(); VICDefVectAddr=(int)IRQ_Eint0; //設(shè)置EINT0為非向量IRQ中斷EXTINT=0x01; //去除EINT0中斷標(biāo)志VICIntEnable=1<<0x0e; //使能EINT0中斷while(1) //等待EINT0中斷 {if(x!=0) {IO1SET=LED1; x=0;} else {IO1CLR=LED1; x=1;} DelayNS(100); } return(0);}〔4〕問(wèn)題分析與解決方法LED閃爍正常,但是按鍵后蜂鳴器沒(méi)有任何反響,通過(guò)一步步排查,最終發(fā)現(xiàn),引腳定義到了KEY3,但是按鍵卻按下了KEY1,更改引腳定義后,問(wèn)題解決。4、UART串口通信〔1〕實(shí)驗(yàn)?zāi)康耐ㄟ^(guò)實(shí)驗(yàn),掌握UART查詢1方式程序的設(shè)計(jì)。〔2〕實(shí)驗(yàn)原理通過(guò)串口0接收上位機(jī)發(fā)送的字符串,如"HelloEasyARM2132!〞,然后返回上位機(jī)顯示。〔3〕實(shí)驗(yàn)過(guò)程=1\*GB3①啟動(dòng)ADS1.2,使用ARMExecutableImageforlpc2132工程模板建立一個(gè)工程DataRet_C。=2\*GB3②在user組中的main.c中編寫(xiě)主程序代碼,在工程中的config.h文件中參加#include<stdio.h>。=3\*GB3③選用DebugInRam生成目標(biāo),然后編譯連接工程。=4\*GB3④將EasyARM2132開(kāi)發(fā)板上的JP6跳線分別選擇TxD0和RxD0端時(shí),方可進(jìn)展UART0通信實(shí)驗(yàn)。=5\*GB3⑤使用串口延長(zhǎng)線把LPC2132教學(xué)實(shí)驗(yàn)開(kāi)發(fā)平臺(tái)的CZ2(UART0)與PC機(jī)的1連接。PC機(jī)運(yùn)行EasyARM軟件,設(shè)置串口為1,波特率為115200,然后選擇【設(shè)置】->【發(fā)送數(shù)據(jù)】,在彈出的發(fā)送數(shù)據(jù)窗口中點(diǎn)擊"高級(jí)〞即可翻開(kāi)接收窗口。=6\*GB3⑥選擇【Project】->【Debug】,啟動(dòng)AXD進(jìn)展JTAG仿真調(diào)試。=7\*GB3⑦全速運(yùn)行程序,在PC機(jī)上的EasyARM軟件發(fā)送如"HelloEasyARM2132!〞字樣的字符串,EasyARM2132開(kāi)發(fā)板接收到數(shù)據(jù)后,并將接收到的數(shù)據(jù)回發(fā)給PC機(jī)。代碼如下:#include"config.h〞#defineUART_BPS 115200 //串口通信波特率/*****************************************************************************名稱:DelayNS()*功能:長(zhǎng)軟件延時(shí)*入口參數(shù):dly 延時(shí)參數(shù),值越大,延時(shí)越久*出口參數(shù):無(wú)****************************************************************************/voidDelayNS(uint32dly){uint32i;for(;dly>0;dly--)for(i=0;i<5000;i++);}/***********************************************************************************函數(shù)名稱:UART0_Init()**函數(shù)功能:串口初始化,設(shè)置為8位數(shù)據(jù)位,1位停頓位,無(wú)奇偶校驗(yàn),波特率為115200**入口參數(shù):無(wú)**出口參數(shù):無(wú)*********************************************************************************/voidUART0_Init(void){ uint16Fdiv; U0LCR=0x83; //DLAB=1,允許設(shè)置波特率Fdiv=(Fpclk/16)/UART_BPS; //設(shè)置波特率U0DLM=Fdiv/256; U0DLL=Fdiv%256; U0LCR=0x03;}/***********************************************************************************函數(shù)名稱:UART0_GetByte()**函數(shù)功能:從串口接收1字節(jié)數(shù)據(jù),使用查詢方式接收**入口參數(shù):無(wú)**出口參數(shù):接收到的數(shù)據(jù)**********************************************************************/uint8UART0_GetByte(void){ uint8rcv_dat; while((U0LSR%0x01)==0); //等待接收標(biāo)志置位rcv_dat=U0RBR; return(rcv_dat);}/***********************************************************************************函數(shù)名稱:UART0_GetStr()**函數(shù)功能:從串口接收**入口參數(shù):s 指向接收數(shù)據(jù)數(shù)組的指針n 接收的個(gè)數(shù)**出口參數(shù):無(wú)**********************************************************************/voidUART0_GetStr(uint8*s,uint32n){ for(;n>0;n--) *s++=UART0_GetByte();}/***********************************************************************************函數(shù)名稱:UART0_SendByte()**函數(shù)功能:向串口發(fā)送字節(jié)數(shù)據(jù)**入口參數(shù):dat 要發(fā)送的數(shù)據(jù)**出口參數(shù):無(wú)**********************************************************************/voidUART0_SendByte(uint8dat){ U0THR=dat; //寫(xiě)入數(shù)據(jù)while((U0LSR&0x40)==0); //等待數(shù)據(jù)發(fā)送完畢}/***********************************************************************************函數(shù)名稱:UART0_SendStr()**函數(shù)功能:向串口發(fā)送一字符串**入口參數(shù):str 要發(fā)送的字符串的指針**出口參數(shù):無(wú)**********************************************************************/voidUART0_SendStr(uint8const*str){ while(1){if(*str==‘\0’) break; //遇到完畢符,退出UART0_SendByte(*str++); //發(fā)送數(shù)據(jù)}}/*****************************************************************************名稱:main()*功能:從串口UART0接收字符串"HelloEasyARM2132!〞,并發(fā)送回上位機(jī)顯示*說(shuō)明:需要PC串口顯示終端軟件,如EasyARM.exe。****************************************************************************/intmain(void){uint8snd[32];PINSEL0=0x00000005; //設(shè)置I/O連接到UART0UART0_Init(); //串口初始化UART0_GetStr(snd,18); //從串口接收字符串DelayNS(10); UART0_SendStr(snd); //向串口發(fā)送字符串DelayNS(10); while(1);return(0);}〔4〕問(wèn)題分析與解決方法代碼運(yùn)行后,PC機(jī)沒(méi)有顯示出來(lái)字符串,檢查后發(fā)現(xiàn)USB接口的接觸不良,接觸不良的原因是焊接的時(shí)候沒(méi)有貼牢靠就焊接上去了,解焊后重新焊接了USB口,問(wèn)題解決。5.綜合實(shí)驗(yàn):交通燈我負(fù)責(zé)的是蜂鳴器函數(shù),中斷效勞程序,GPIO初始化函數(shù),鍵盤(pán)掃描模塊。最終效果圖如下:蜂鳴器函數(shù)模塊:定義一個(gè)BEEP引腳P0.8作為蜂鳴器的輸入口,P0.8給低電平,蜂鳴器響uint32BEEP=18;P0.8控制蜂鳴器,低電平有效voidsay(){蜂鳴器函數(shù)IO0CLR=BEEP;DelayNS(10);IO0SET=BEEP;}中斷效勞程序模塊:通過(guò)定時(shí)器產(chǎn)生1秒的時(shí)鐘頻率,然后在中斷效勞程序中調(diào)用display函數(shù),display函數(shù),display傳入的參數(shù)就是數(shù)碼管要顯示的數(shù)字,然后每秒調(diào)用一次display函數(shù),實(shí)現(xiàn)倒計(jì)時(shí)。voidTimeInit()//中斷效勞程序初始化函數(shù){IRQEnable();IRQ中斷使能定時(shí)器0初始化模塊T0TC=0;定時(shí)器設(shè)置為0T0PR=0;時(shí)鐘不分頻T0MCR=0x03;設(shè)置T0MR0匹配后復(fù)位T0TC,并產(chǎn)生中斷標(biāo)志T0MR0=Fpclk;1秒鐘定時(shí)T0TCR=0x01;啟動(dòng)定時(shí)器設(shè)置定時(shí)器0中斷IRQVICIntSelect=0x00;所有中斷通道設(shè)置為IRQ中斷VICVecttl0=0x200x04;設(shè)置定時(shí)器0中斷通道分配最高優(yōu)先級(jí)VICVectAddr0=(uint32)IRQ_Timer0;設(shè)置中斷效勞程序地址VICIntEnable=10x04;使能定時(shí)器0中斷}void__irqIRQ_Timer0(void)中斷效勞程序{display(num);調(diào)用數(shù)碼管顯示函數(shù)T0IR=0x01;去除中斷標(biāo)志VICVectAddr=0x00;通知VIC中斷處理完畢}GPIO初始化函數(shù):PINSEL0和PINSEL1選擇GPIO功能,然后設(shè)置數(shù)碼管,LED燈,蜂鳴器引腳做輸出功能。voidGPIOInit(){PINSEL0=0x00;設(shè)置功能選擇GPIOPINSEL1=0x00;設(shè)置功能選擇GPIOIO0DIR=(SEG7|LEDS3|BEEP);設(shè)置數(shù)碼管,lED燈,蜂鳴器引腳為輸出}鍵盤(pán)掃描模塊:將鍵盤(pán)掃描模塊寫(xiě)成函數(shù)放入while循環(huán)中,循環(huán)判斷按鍵是否按下,掃描函數(shù)帶有消抖操作,防止重復(fù)檢測(cè)。Flag標(biāo)志,決定了現(xiàn)在燈的狀態(tài),flag=0是正常倒計(jì)時(shí)模式,flag=1是緊急模式綠燈常亮,flag=2是緊急模式紅燈常亮。voidkeyscan(){
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 開(kāi)學(xué)典禮觀后感范文15篇
- 愚人節(jié)主題方案(資料11篇)
- 感恩父母孝順父母的演講稿6篇
- 產(chǎn)品營(yíng)銷策劃實(shí)施方案
- 初級(jí)會(huì)計(jì)實(shí)務(wù)-《初級(jí)會(huì)計(jì)實(shí)務(wù)》預(yù)測(cè)試卷162
- 個(gè)人車輛出租給公司進(jìn)行項(xiàng)目運(yùn)輸協(xié)議(2025版)3篇
- 二零二五版房地產(chǎn)售后服務(wù)代理銷售合同2篇
- 2025版跨境電商平臺(tái)實(shí)習(xí)生試用期勞動(dòng)合同規(guī)范3篇
- 二零二五版施工混凝土分包合同施工環(huán)境保護(hù)協(xié)議3篇
- 部編版一年級(jí)語(yǔ)文下冊(cè)識(shí)字5《動(dòng)物兒歌》精美課件
- 江西省部分學(xué)校2024-2025學(xué)年高三上學(xué)期1月期末英語(yǔ)試題(含解析無(wú)聽(tīng)力音頻有聽(tīng)力原文)
- 農(nóng)民工工資表格
- 【寒假預(yù)習(xí)】專題04 閱讀理解 20篇 集訓(xùn)-2025年人教版(PEP)六年級(jí)英語(yǔ)下冊(cè)寒假提前學(xué)(含答案)
- 2024年智能監(jiān)獄安防監(jiān)控工程合同3篇
- 2024年度窯爐施工協(xié)議詳例細(xì)則版B版
- 幼兒園籃球課培訓(xùn)
- 基底節(jié)腦出血護(hù)理查房
- 工程公司總經(jīng)理年終總結(jié)
- 2024年海南省高考地理試卷(含答案)
- 【企業(yè)盈利能力探析的國(guó)內(nèi)外文獻(xiàn)綜述2400字】
- 三年級(jí)上冊(cè)數(shù)學(xué)口算題1000道帶答案
評(píng)論
0/150
提交評(píng)論