版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
..XX郵電大學(xué)〔計(jì)算機(jī)學(xué)院〕嵌入式系統(tǒng)板級電路裝配課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告專業(yè)名稱:計(jì)算機(jī)科學(xué)與技術(shù)班級:計(jì)科學(xué)號:XXXXXXXXX:XXX指導(dǎo)教師:XXX實(shí)驗(yàn)日期:2017年12月11日—12月22日第一周:開發(fā)板硬件裝配開發(fā)板硬件構(gòu)造開發(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í)器,看門狗定時(shí)器,帶有備用電池備份的實(shí)時(shí)時(shí)鐘,欠壓檢測電路通用I/O引腳。CPU時(shí)鐘高達(dá)60MHz,片晶體振蕩器和片PLL。板子總體分了電源電路,晶振電路,復(fù)位電路,LED電路,按鍵電路,串口電路,JTAG調(diào)試電路等幾局部,如下列圖所示圖1EasyARM2132開發(fā)板底板元件布局圖硬件原理組成及分析開發(fā)板完整電路圖如下列圖所示圖2EasyARM2132開發(fā)板完整電路圖電源電路:LPC2132電源電路局部采用了一個(gè)DC接口的POWER1供電口和一個(gè)5V的USB供電口,部采用了一個(gè)1N5819二極管來穩(wěn)流,采用SPX1117M3-3.3低壓差穩(wěn)壓器,如右圖所示。電路另一邊有一個(gè)紅色的發(fā)光二極管,當(dāng)電源接通后,二極管會點(diǎn)亮。復(fù)位電路復(fù)位電路采用一顆CAT1025芯片,CAT1025是基于微控制器系統(tǒng)的存儲器和電源監(jiān)控的完全解決方案。它們利用低功耗CMOS技術(shù)將2K位的串行EEPOM和用于掉電保護(hù)的系統(tǒng)電源監(jiān)控電路集成在一塊芯片。存儲器采用400KHz的I2C總線接口。CAT1025包含1個(gè)準(zhǔn)確的Vcc監(jiān)控測電路和2個(gè)開漏輸出:RESET和!RESET。當(dāng)Vcc低于復(fù)位門檻電壓時(shí),!RESET引腳將變?yōu)楦唠娖剑琑ESET將變?yōu)榈碗娖?。CAT1025還包含一個(gè)寫保護(hù)輸入〔WP〕。如果WP連接高電平,那么寫操作被制止。nRST連接到芯片LPC2132的復(fù)位引腳,當(dāng)復(fù)位按鍵RST1按下時(shí),CAT1025的復(fù)位引腳輸出有效信號,使芯片LPC2132復(fù)位。系統(tǒng)時(shí)鐘電路LPC2132微控制器可使用外部晶振或外部時(shí)鐘源,片外晶振頻率圍:1~30MHz,如下列圖中Y1-11.0592MHz,部鎖相環(huán)電路PLL可調(diào)整系統(tǒng)時(shí)鐘,通過片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信號的定義以及與LPC2132的連接如下列圖:按鍵及顯示電路LPC2132開發(fā)板具有4個(gè)按鍵、4個(gè)LED燈。4個(gè)LED燈一邊已經(jīng)與DP3V3連接,另一邊經(jīng)過1個(gè)470R的電阻后與JP1跳線相連,當(dāng)JP12連通的時(shí)候,LED1的一側(cè)與芯片的P0.17口就會連通,P0.17口輸出低電平,LED1就會點(diǎn)亮,如果P0.17輸出高電平,LED1就會熄滅。4個(gè)按鍵中復(fù)位鍵已經(jīng)在前面介紹了,剩下三個(gè)按鍵KEY1、KEY2、KEY3一邊接地,另一邊接了4K7的電阻然后與正極相連,還接了JP2跳線組,如果JP2的12連通,那么P0.16就和KEY1連通,當(dāng)按鍵按下的時(shí)候,P0.16輸出低電平,當(dāng)按鍵沒有按下的時(shí)候P0.16輸出高電平,因?yàn)榘存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的晶振。開發(fā)板硬件安裝調(diào)試過程焊接最小系統(tǒng)首先焊接電源模塊,復(fù)位電路模塊,晶振模塊,構(gòu)成最小系統(tǒng),然后對最小系統(tǒng)進(jìn)展測試。測試方法:將電源線和開發(fā)板的電源模塊連接,觀察電源指示燈是否點(diǎn)亮,如果點(diǎn)亮,使用萬用表測量U1點(diǎn)電壓,數(shù)值圍為:3.29V~3.31V,標(biāo)準(zhǔn)值為3.30V,說明電源電路模塊正常。然后用示波器觀察晶振引腳的波形,查看晶振是否正常。焊接外接電路板。在洞洞板上面焊接一個(gè)LED燈,然后引出接口,一個(gè)為正,一個(gè)為負(fù),然后將正負(fù)極分別與排針焊接在一起;將蜂鳴器的正負(fù)極分別于排針焊接;將按鍵的兩邊與排針焊接在一起。測試方法:將LED正負(fù)極分別與開發(fā)板的DP3.3V和GND連接,可以觀察到LED燈點(diǎn)亮。蜂鳴器的正負(fù)極與開發(fā)板的DP3.3V和GND連接,可以聽到蜂鳴器發(fā)聲。將開發(fā)板正極和蜂鳴器正極相連,蜂鳴器負(fù)極與開關(guān)一邊相連,然后開關(guān)另一邊接低電平,按下按鍵后蜂鳴器會發(fā)出聲音,證明開關(guān)電路完好。焊接LED燈焊接LED電路,將LED1-LED7焊接在開發(fā)板上面,然后焊接R4-R7四個(gè)電阻,這是二極管的分壓電阻。測試方法:給開發(fā)板通電,然后依次給JP1的1、3、5、7接低電平,會發(fā)現(xiàn)LED1-LED4依次點(diǎn)亮,如果有不亮的,說明焊接有誤,檢查二極管的正負(fù)是否正確,用萬用表檢測是否有短路。焊接開關(guān)將KEY1、KEY2、KEY3焊接到開發(fā)板上面,然后將3個(gè)4K7的電阻焊接到R1、R2、R3三個(gè)位置,最后在JP2上面焊接一組排針。測試方法:給開發(fā)板供電,用萬用表檢測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焊接到開發(fā)板對應(yīng)位置,要注意焊接的時(shí)候容易將周圍引腳連接在一起,必須非常小心的操作。測試方法:給開發(fā)板供電,然后USB口與電腦連接,電腦的設(shè)備管理器可以檢測到串口輸入,如下列圖:焊接JTAG模塊JTAG模塊很簡單,只需要將JTAG后面的引腳依次焊接即可。檢測方法:開發(fā)板供電后,用JTAG線連接開發(fā)板的電腦,然后翻開H-JTAGServer,點(diǎn)擊搜索可以檢測到芯片。如下列圖:在H-Flasher窗口的"FlashSelection〞項(xiàng)選擇仿真的器件型號LPC2132,在H-Flasher窗口的"Programming〞項(xiàng)窗,點(diǎn)擊<Check>按鈕,H-JTAG將檢測到的器件類型顯示于本窗口。遇到問題分析及硬件調(diào)試體會遇到的問題焊接好LED燈模塊后,測試LED燈的時(shí)候發(fā)現(xiàn)LED3不亮,用萬用表檢測后發(fā)現(xiàn)是LED3的引腳虛焊,重新焊接后問題解決。2、硬件調(diào)試體會焊接過程中需要足夠的耐心,不能看到別的同學(xué)進(jìn)度比自己快就急躁,急于求成做出來的產(chǎn)品只能是差的甚至是壞的,我們應(yīng)該從焊接中總結(jié)經(jīng)歷,提高自己的焊接能力,掌握焊接技巧,焊接出最好,最完美的電路板。第二周:軟件編程與調(diào)試一、調(diào)試環(huán)境搭建啟動ADS1.2IDE集成開發(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,翻開該文件??稍谥鞔翱诓藛雾?xiàng)選擇擇Edit->Perferences,設(shè)置字體和字號。在main.S文件編輯窗的"addtheusercodehere.添加用戶代碼〞行下建立用戶匯編程序代碼。選擇Project->Make〔或快捷鍵<F7>〕,編譯整個(gè)工程。假設(shè)編譯成功,那么Erros&Warnings對話框會報(bào)告編譯錯(cuò)誤為0,此時(shí)即可對工程進(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)處;通過斷點(diǎn)調(diào)試可以觀察ARM存放器和存儲單元的數(shù)值變化,具體操作方法在后面的實(shí)驗(yàn)中會作詳細(xì)介紹。二、完成實(shí)驗(yàn)容本人主要負(fù)責(zé)容:GPIO輸入輸出根底實(shí)驗(yàn),交通燈綜合實(shí)驗(yàn)中的蜂鳴器、中斷效勞程序、GPIO初始化模塊以及鍵盤掃描局部編寫。1、GPIO輸入輸出實(shí)驗(yàn)〔1〕實(shí)驗(yàn)?zāi)康恼莆誏PC2132工程模板的使用。掌握EasyJTAG仿真器的安裝和使用。能夠在EasyARM教學(xué)實(shí)驗(yàn)開發(fā)平臺上運(yùn)行第一個(gè)程序。熟悉LPC2000系列ARM7微控制器的GPIO控制。〔2〕實(shí)驗(yàn)原理LPC2132系列的ARM7微控制器的所有GPIO口,均為雙向I/O口。引腳可以根據(jù)需要配置為I/O口或其它功能,和GPIO相關(guān)的存放器一共有6個(gè)見下表:通過編程控制BEEP〔P0.7〕輸出低電平,從而實(shí)現(xiàn)蜂鳴器持續(xù)發(fā)聲?!?〕實(shí)驗(yàn)過程啟動ADS1.2IDE集成開發(fā)環(huán)境,選擇ARMExecutableImageforlpc2132工程模板建立一個(gè)工程BeepCon_C。在user組里編寫主程序代碼main.c。選用DebugInRam生成目標(biāo),然后編譯工程。將EasyARM教學(xué)實(shí)驗(yàn)開發(fā)平臺上的P0.7管腳與Beep跳線短接選擇Project->Debug,啟動AXD進(jìn)展JTAG仿真調(diào)試。全速運(yùn)行程序,程序?qū)趍ain.c的主函數(shù)中停頓〔因?yàn)閙ain函數(shù)起始處默認(rèn)設(shè)置有斷點(diǎn)〕。單擊ContextVariable圖標(biāo)按鈕〔或者選擇ProcessorViews->Variables〕翻開變量觀察窗口,通過此窗口可以觀察局部變量和全局變量。選擇SystemViews->DebuggerInternals即可翻開LPC2000系列ARM7微控制器的片外存放器窗口??梢詥尾竭\(yùn)行程序,可以設(shè)置/取消斷點(diǎn);或者全速運(yùn)行程序,停頓程序運(yùn)行,觀察變量的值,判斷蜂鳴器控制是否正確?!?〕問題分析與解決方法GPIO功能選擇之后沒有進(jìn)展IO0DIR方向選擇,導(dǎo)致P0.7口依然為輸入口,無法輸出低電平信號,故而蜂鳴器沒有發(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)中已定義了符號常量Fpclk=11059200;〔3〕實(shí)驗(yàn)過程啟動ADS1.2,使用ARMExecutableImageforlpc2132工程模板建立一個(gè)工程TimeOut_C。在user組中的main.c中編寫主程序代碼。選用DebugInExram生成目標(biāo),然后編譯連接工程。選擇【Project】->【Debug】,啟動AXD進(jìn)展JTAG仿真調(diào)試。將LPC2132開發(fā)板上的P0.7接入蜂鳴器全速運(yùn)行程序,蜂鳴器會響一秒,停一秒,然后再響一秒……依次循環(huán)。代碼如下:#include"config.h"#defineBEEP1<<7 /*P0.7控制BEEP,低電平蜂鳴*//*******************************************************************************************函數(shù)名稱:IRQ_Timer0()**函數(shù)功能:定時(shí)器0中斷效勞程序,取反LED2控制口。**入口參數(shù):無**出口參數(shù):無*******************************************************************************************/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)試說明:需要將跳線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; /*啟動定時(shí)器*/ /*設(shè)置定時(shí)器0中斷IRQ*/ VICIntSelect=0x00; /*所有中斷通道設(shè)置為IRQ中斷*/ VICVecttl0=0x20|0x04; /*設(shè)置定時(shí)器0中斷通道分配最高優(yōu)先級*/ VICVectAddr0=(uint32)IRQ_Timer0; /*設(shè)置中斷效勞程序地址*/ VICIntEnable=1<<0x04; /*使能定時(shí)器0中斷*/ while(1);return0;}〔4〕問題分析與解決方法下板后蜂鳴器不發(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)過程跳線LED1、Key1和Beep分別連接到P1.18、P0.16和P0.7管腳;使用KEY1模擬外中斷;啟動ADS1.2,使用ARMExecutableImageforlpc2132工程模板建立一個(gè)工程TimeEINT_C。在user組中的main.c中編寫主程序代碼;使用系統(tǒng)宏IRQEnable(),使能IRQ中斷。裝載并使能外中斷;選用DebugInExram生成目標(biāo),然后編譯連接工程。選擇【Project】->【Debug】,啟動AXD進(jìn)展JTAG仿真調(diào)試。全速運(yùn)行程序,LED閃爍;每一次按鍵Key,蜂鳴器就會轉(zhuǎn)換靜音或鳴響狀態(tài)。代碼如下:#include"config.h"#defineBEEPCON1<<7 //P0.7引腳控制Beep,低電平蜂鳴#defineLED11<<18 //P1.18引腳控制LED1,低電燈亮/*****************************************************************************名稱:DelayNS()*功能:長軟件延時(shí)*入口參數(shù):dly---延時(shí)參數(shù),值越大,延時(shí)越久*出口參數(shù):無****************************************************************************/voidDelayNS(uint32dly){uint32i;for(;dly>0;dly--){for(i=0;i<5000;i++);}}/*****************************************************************************名稱:IRQ_EINT0()*功能:外中斷效勞程序,取反BEEPCON控制口。*入口參數(shù):無*出口參數(shù):無****************************************************************************/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)。*說明:****************************************************************************/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〕問題分析與解決方法LED閃爍正常,但是按鍵后蜂鳴器沒有任何反響,通過一步步排查,最終發(fā)現(xiàn),引腳定義到了KEY3,但是按鍵卻按下了KEY1,更改引腳定義后,問題解決。4、UART串口通信〔1〕實(shí)驗(yàn)?zāi)康耐ㄟ^實(shí)驗(yàn),掌握UART查詢1方式程序的設(shè)計(jì)。〔2〕實(shí)驗(yàn)原理通過串口0接收上位機(jī)發(fā)送的字符串,如"HelloEasyARM2132!〞,然后返回上位機(jī)顯示?!?〕實(shí)驗(yàn)過程=1\*GB3①啟動ADS1.2,使用ARMExecutableImageforlpc2132工程模板建立一個(gè)工程DataRet_C。=2\*GB3②在user組中的main.c中編寫主程序代碼,在工程中的config.h文件中參加#include<stdio.h>。=3\*GB3③選用DebugInRam生成目標(biāo),然后編譯連接工程。=4\*GB3④將EasyARM2132開發(fā)板上的JP6跳線分別選擇TxD0和RxD0端時(shí),方可進(jìn)展UART0通信實(shí)驗(yàn)。=5\*GB3⑤使用串口延長線把LPC2132教學(xué)實(shí)驗(yàn)開發(fā)平臺的CZ2(UART0)與PC機(jī)的1連接。PC機(jī)運(yùn)行EasyARM軟件,設(shè)置串口為1,波特率為115200,然后選擇【設(shè)置】->【發(fā)送數(shù)據(jù)】,在彈出的發(fā)送數(shù)據(jù)窗口中點(diǎn)擊"高級〞即可翻開接收窗口。=6\*GB3⑥選擇【Project】->【Debug】,啟動AXD進(jìn)展JTAG仿真調(diào)試。=7\*GB3⑦全速運(yùn)行程序,在PC機(jī)上的EasyARM軟件發(fā)送如"HelloEasyARM2132!〞字樣的字符串,EasyARM2132開發(fā)板接收到數(shù)據(jù)后,并將接收到的數(shù)據(jù)回發(fā)給PC機(jī)。代碼如下:#include"config.h〞#defineUART_BPS 115200 //串口通信波特率/*****************************************************************************名稱:DelayNS()*功能:長軟件延時(shí)*入口參數(shù):dly 延時(shí)參數(shù),值越大,延時(shí)越久*出口參數(shù):無****************************************************************************/voidDelayNS(uint32dly){uint32i;for(;dly>0;dly--)for(i=0;i<5000;i++);}/***********************************************************************************函數(shù)名稱:UART0_Init()**函數(shù)功能:串口初始化,設(shè)置為8位數(shù)據(jù)位,1位停頓位,無奇偶校驗(yàn),波特率為115200**入口參數(shù):無**出口參數(shù):無*********************************************************************************/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ù):無**出口參數(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ù):無**********************************************************************/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ù):無**********************************************************************/voidUART0_SendByte(uint8dat){ U0THR=dat; //寫入數(shù)據(jù)while((U0LSR&0x40)==0); //等待數(shù)據(jù)發(fā)送完畢}/***********************************************************************************函數(shù)名稱:UART0_SendStr()**函數(shù)功能:向串口發(fā)送一字符串**入口參數(shù):str 要發(fā)送的字符串的指針**出口參數(shù):無**********************************************************************/voidUART0_SendStr(uint8const*str){ while(1){if(*str==‘\0’) break; //遇到完畢符,退出UART0_SendByte(*str++); //發(fā)送數(shù)據(jù)}}/*****************************************************************************名稱:main()*功能:從串口UART0接收字符串"HelloEasyARM2132!〞,并發(fā)送回上位機(jī)顯示*說明:需要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〕問題分析與解決方法代碼運(yùn)行后,PC機(jī)沒有顯示出來字符串,檢查后發(fā)現(xiàn)USB接口的接觸不良,接觸不良的原因是焊接的時(shí)候沒有貼牢靠就焊接上去了,解焊后重新焊接了USB口,問題解決。5.綜合實(shí)驗(yàn):交通燈我負(fù)責(zé)的是蜂鳴器函數(shù),中斷效勞程序,GPIO初始化函數(shù),鍵盤掃描模塊。最終效果圖如下:蜂鳴器函數(shù)模塊:定義一個(gè)BEEP引腳P0.8作為蜂鳴器的輸入口,P0.8給低電平,蜂鳴器響uint32BEEP=18;P0.8控制蜂鳴器,低電平有效voidsay(){蜂鳴器函數(shù)IO0CLR=BEEP;DelayNS(10);IO0SET=BEEP;}中斷效勞程序模塊:通過定時(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;啟動定時(shí)器設(shè)置定時(shí)器0中斷IRQVICIntSelect=0x00;所有中斷通道設(shè)置為IRQ中斷VICVecttl0=0x200x04;設(shè)置定時(shí)器0中斷通道分配最高優(yōu)先級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燈,蜂鳴器引腳為輸出}鍵盤掃描模塊:將鍵盤掃描模塊寫成函數(shù)放入while循環(huán)中,循環(huán)判斷按鍵是否按下,掃描函數(shù)帶有消抖操作,防止重復(fù)檢測。Flag標(biāo)志,決定了現(xiàn)在燈的狀態(tài),flag=0是正常倒計(jì)時(shí)模式,flag=1是緊急模式綠燈常亮,flag=2是緊急模式紅燈常亮。voidkeyscan(){
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版指標(biāo)房屋銷售協(xié)議條款版
- 二手房交易中介協(xié)議合同范本(2024版)
- 2025年度銷售業(yè)務(wù)員兼職崗位員工激勵(lì)與績效改進(jìn)合同2篇
- 二零二五年度別墅景觀綠化養(yǎng)護(hù)合同3篇
- 二零二五版國際會展中心物業(yè)全面服務(wù)與管理協(xié)議3篇
- 專業(yè)廣告代理服務(wù)協(xié)議(2024版)版A版
- 2024項(xiàng)目合作中間人傭金協(xié)議書
- 二零二五年度雞苗運(yùn)輸時(shí)間優(yōu)化及效率提升合同3篇
- 二零二五版?zhèn)€人汽車銷售代理合同模板3篇
- 二零二五年度二手汽車租賃與環(huán)保節(jié)能服務(wù)合同3篇
- 沖壓模具設(shè)計(jì)-模具設(shè)計(jì)課件
- 高處作業(yè)安全培訓(xùn)課件-
- 職中英語期末考試質(zhì)量分析
- 中國的世界遺產(chǎn)智慧樹知到答案章節(jié)測試2023年遼寧科技大學(xué)
- 急性腹瀉與慢性腹瀉修改版
- 先天性肌性斜頸的康復(fù)
- 《國際市場營銷》案例
- GB/T 37518-2019代理報(bào)關(guān)服務(wù)規(guī)范
- GB/T 156-2017標(biāo)準(zhǔn)電壓
- PPT溝通的藝術(shù)課件
- 內(nèi)科學(xué):巨幼細(xì)胞性貧血課件
評論
0/150
提交評論