




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第2章詳細設計方案2.1課程設計環(huán)境搭建嵌入式開發(fā)環(huán)境一般為Linux環(huán)境,通常的嵌入式系統(tǒng)的軟件開發(fā)采用一種交叉編譯調試的方式。交叉編譯調試環(huán)境建立在宿主機(即一臺PC機)上,對應的開發(fā)板叫做目標板。宿主機和目標板的處理器一般不相同,宿主機為x86處理器,而目標板如凌陽的A8實驗箱為三星S5PV210,其為ARMA8架構的處理器。GNU編譯器提供這樣的功能,在編譯器編譯時可以選擇開發(fā)所需的宿主機和目標機從而建立開發(fā)環(huán)境。所以在進行嵌入式開發(fā)前第一步的工作就是要安裝一臺裝有指定操作系統(tǒng)的PC機作宿主開發(fā)機,對于嵌入式Linux,宿主機上的操作系統(tǒng)一般要求為Linux的各種發(fā)行版,本次課程設計采用Ubuntu10.10,同時安裝gcc交叉編譯器。環(huán)境搭建流程如圖:2.1.1Ubuntu10.10的安裝嵌入式Linux的PC開發(fā)環(huán)境有幾個方案:基于PC機Windows操作系統(tǒng)下Cygwin2.在Windows下安裝虛擬機后,再在虛擬機中安裝Linux操作系統(tǒng)3.直接安裝Linux操作系統(tǒng)以上三種方案各有千秋,方案一容易存在兼容性問題;方案二在PC配置比較低的情況下會比較慢,但是既可以使用Windows上的一些軟件又可以使用到比較好的Linux環(huán)境,熟悉Windows的用戶用此方案比較順手;方案三無法使用Windows上的一些常用軟件,并且不熟悉的人操作起來比較困難。簽于此筆者建議初學者選擇方案二。方案二首先要在Windows上安裝一個虛擬機軟件,常用的虛擬機軟件為Vmware。然后再在Vmware上安裝Ubuntu10.10。在安裝完Ubuntu10.10后還要安裝嵌入式Linux的交叉編譯器和開發(fā)庫以及ARM-Linux的所有源代碼,這些包安裝后的總共需要空間大約為800M。2.1.2通過網線和串口將PC和A8實驗箱進行連接通過操作PC機的超級終端登陸實驗箱的系統(tǒng),通過網線連接是有兩種方案:1.實驗箱的以太網接口與PC的網卡直接相連。2.將實驗箱與路由器相連。當在實驗室通過方案2連接PC機和A8實驗箱時,容易出現ip沖突等問題,所以直接將用網線將實驗箱的以太網接口和PC的網卡直接相連。此時需要將A8實驗箱和PC機設置在同一網段才能正常通信。具體步驟如下:通過超級終端建立連接并登陸到A8實驗箱的系統(tǒng)中(賬號:root,密碼:111111)登陸成功2)對A8實驗箱的IP進行配置,并重啟網絡服務器。(主要用到的Linux語句:ipconfigeth0-i00-m-g和servicenetworkrestart)更改IP并重啟網絡服務器3)更改主機電腦的IP(注意將宿主機和實驗箱IP設置在同一網段)更改宿主機IP2.1.3GPS模塊的連接實驗箱引出了GPS接口J33,直接把GPS模組插接到該接口上,即可實現對GPS模組的控制。其中GPS模組的復位信號由實驗箱GPJ4_0來控制,通信由實驗箱的UART2來完成。按照APM7101的通訊要求,UART通訊波特率為4800或者9600bps。2.1.4軟件設計與實現軟件實現是本設計的重點,使用的是嵌入式C語言編程,采用模塊化的設計思想,根據系統(tǒng)要求和相關的硬件電路。本設計中,程序首先通過GPJ4_0輸出GPS模組開啟所需時序,從而打開GPS模組,接下來即可通過UART2等待從GPS模組中讀取GPS信息,并將這些這些信息進行解析,即可得到所需信息。本設計的程序流程如下圖所示:圖軟件程序流程圖具體的軟件程序流程為:打開Linux下相應的設備掛載點,開啟GPS模塊并進行初始化。本設計中,程序通過GPJ4_0輸出GPS模組開啟所需時序,從而打開GPS模組,接下來可通過UART2等待從GPS模組中讀取GPS信息,并將這些信息進行解析,即可得到所需信息。打開并設置UART2屬性。為了實驗箱能夠正確地與PC進行通信,必須按照制定要求格式對通信串口進行初始化操作。本設計選擇實驗箱主電路板上的UART2串口進行與PC的通信,并設置通信波特率為115200、數據位為8位、無奇偶校驗位、1位停止位和無數據流控制。具體實現過程可以通過向設備中發(fā)送起始信號,設備地址和寫信號,然后發(fā)送內部寄存器的地址和數據,發(fā)送結束后便發(fā)送停止信號。讀取GPS信息并解析。GPS模組返回的信息遵循NMEA協議格式。為了正確無誤地讀取GPS模組中返回的信息,我們必須按照NMEA消息格式對緩沖區(qū)中的消息進行讀取并存儲并通過函數GetComma(intnum,char*str)得到指定序號的逗號位置,以解析各個定義段?;綨MEA指令是一個ASCII字符串,它以‘$‘字符開始、以<CR><LF>序列結束。NMEA標準消息以“GP”開始,接著是三個字符的消息標識碼。消息頭和后面的內容通過逗號進行分隔,消息以校檢碼結束(校檢碼由一個‘*’和兩個16位的校驗字組成。校驗碼字段并不用逗號進行分隔。目前,校驗碼得到的方式是從‘$’到‘*’之間的字符進行逐位計算。)2.2實施方案按照設計原理及設計思路在PC機上編寫程序,保存成.c源代碼文件,并將文件拷貝到Ubuntu系統(tǒng)中。在Ubuntu操作系統(tǒng)中打開一個終端,進入到源程序所在目錄下,在Ubuntu中進行交叉編譯,運行命令行(通過ls查看查看到GPS216文件):arm-linux-gcc-oGPS216GPS.c在PC機,通過ftp協議訪問實驗箱的IP地址,將編譯好的GPS216文件傳輸到實驗箱中。在超級終端中,賦予文件可執(zhí)行權限并運行。(授權語句:chmod+xGPS216)第3章調試及結果分析3.1調試3.1.1軟件測試3.1.2硬件調試3.2結果當根據實驗原理設計并運行后,超級終端可以出現如下實驗結果:參考文獻[1]青島東合信息技術有限公司.無線傳感器網絡技術原理及應用[M].西安:西安電子科技大學出版社,2013[2]凌陽愛普科技有限公司.物聯網多網技術綜合教學開發(fā)平臺實驗指導書[M],2013[3]王小強,歐陽俊,黃寧淋.ZigBee無線傳感器網絡設計與實現[M].北京:化學工業(yè)出版社,2012[4]凌陽愛普科技有限公司.A8實驗箱綜合教學開發(fā)平臺實驗指導書[M],2013[5]王毓銀.數字電路邏輯設計.高等教育出版社,1999[6]梁德厚.數字電路技術及應用.機械工業(yè)出版社,2004[7]楊松華.數字電子技術基礎.西安電子科技大學出版社,2000沈陽航空航天大學課程設計報告附錄(關鍵部分程序清單)#include<stdio.h>#include<stdlib.h>#include<string.h>#include<assert.h>#include<unistd.h>#include<termios.h>#include<fcntl.h>#include<sys/stat.h>#include<sys/time.h>#include<sys/types.h>#include<sys/ioctl.h>typedefstruct{ intyear; intmonth; intday; inthour; intminute; intsecond; chartime_c[10];//ACSII形式的時間}date_time;typedefstruct{ date_timeD; //時間 charstatus; //接收狀態(tài) doublelatitude; //緯度 charlatitude_c[11]; //ASCII形式的緯度 doublelongitude; //經度 charlongitude_c[11];//ASCII形式的經度 charNS; //南北極 charEW; //東西 doublespeed; //速度 charspeed_c[10]; //ASCII形式的速度 doublehigh; //高度}GPS_INFO;intGPS_Read(intfd,char*Data_Buff,intlen);intGetComma(intnum,char*str);voidUTC2BTC(date_time*GPS);doubleGet_Double_Number(char*s);voidGet_Char(char*s);charbuf_t[128];intmain(){ structtermiosoptions,oldoptions; //定義串口屬性結構體變量,其中options用于重新設置串口屬性,oldoptions用于原設置,用于恢復到原來的屬性 GPS_INFOGPS; unsignedintDegree=0; floatCent; charbuf[1024]; intlen=1024; intnByte; intrdadByte; inti=0; intfd; fd=open("/dev/gpJ4",O_RDWR); //openGPJ4 ioctl(fd,0x01,0);//setGPJ4_0output ioctl(fd,0x10,0);//GPJ4_0outputlowlevel usleep(30000); ioctl(fd,0x11,0);//GPJ4_0outputhighlevel fd=open("/dev/s3c2410_serial2",O_RDWR);//openserial2 tcgetattr(fd,&oldoptions);//獲得當前的串口設置信息 tcgetattr(fd,&options); cfsetispeed(&options,B9600);//設置輸入波特率為115200 cfsetospeed(&options,B9600);//設置輸出波特率為115200 options.c_cflag&=~PARENB;//設置串口屬性為:數據位為8位,停止位為1位,無奇偶校驗 options.c_cflag&=~CSTOPB; options.c_cflag|=CSTOPB; options.c_cflag&=~CSIZE; options.c_cflag&=~CS8; options.c_cflag|=CS8; options.c_lflag&=~(ICANON|ECHO|ECHOE|ISIG);//設置串口為Raw模式 options.c_oflag&=~OPOST; tcsetattr(fd,TCSANOW,&options);//將上述設置生效 while(1) { GPS_Read(fd,buf,len); if(GPS_Parse(buf,&GPS)) { if(GPS.status=='A') //如果接收到有效的數據 { printf("時間:%2d:%2d:%2d\n", //顯示時間 GPS.D.hour,GPS.D.minute,GPS.D.second); printf("日期:%d年%02d月%02d日\n", //顯示日期 GPS.D.year,GPS.D.month,GPS.D.day); printf("此時的海拔高度為:%10.4f\n",GPS.high); Degree=GPS.latitude/100; //計算緯度的"度"和"分" Cent=GPS.latitude-(Degree*100); printf("緯度:"); //顯示緯度 if(GPS.NS=='N') printf("北緯(N)%d度%lf分",Degree,Cent); if(GPS.NS=='S') printf("南緯(S)%d度%lf分",Degree,Cent); printf("\n"); Degree=GPS.longitude/100; //計算經度的"度"和"分" Cent=GPS.longitude-(Degree*100); printf("經度:"); //顯示經度 if(GPS.EW=='E') printf("東經(E)%d度%lf分",Degree,Cent); if(GPS.EW=='W') printf("西經(W)%d度%lf分",Degree,Cent); printf("\n\n\n"); } } }}/*******************************************GPS_Read:readMSGfromGPSmodule ********************************************/intGPS_Read(intfd,char*Data_Buff,intlen){ intcount=0; intFlag=0; while(Flag==0) { read(fd,Data_Buff,1); if(*Data_Buff=='\n') { Flag=1; count=0; } Data_Buff++; } return0;}/*********************************************************GPS_Parse:changeMFSfromGPStosturctGPS_INFO**********************************************************/intGPS_Parse(constchar*line,GPS_INFO*GPS){ inttmp; charc; char*buf; buf=(char*)line; c=buf[5]; if(c=='C'){//"GPRMC" GPS->D.hour=(buf[7]-'0')*10+(buf[8]-'0'); GPS->D.minute=(buf[9]-'0')*10+(buf[10]-'0'); GPS->D.second=(buf[11]-'0')*10+(buf[12]-'0'); tmp=GetComma(9,buf); GPS->D.day=(buf[tmp+0]-'0')*10+(buf[tmp+1]-'0'); GPS->D.month=(buf[tmp+2]-'0')*10+(buf[tmp+3]-'0'); GPS->D.year=(buf[tmp+4]-'0')*10+(buf[tmp+5]-'0')+2000; Get_Char(&buf[7]); strcpy(GPS->D.time_c,buf_t); // GPS->status =buf[GetComma(2,buf)]; #defineddd GPS->latitude=Get_Double_Number(&buf[GetComma(3,buf)]); printf("GPS->latitude=%f\n",GPS->latitude); GPS->NS=buf[GetComma(4,buf)]; Get_Char(&buf[GetComma(3,buf)]);strcpy(GPS->latitude_c,buf_t); GPS->longitude=Get_Double_Number(&buf[GetComma(5,buf)]); GPS->EW=buf[GetComma(6,buf)]; Get_Char(&buf[GetComma(5,buf)]); strcpy(GPS->longitude_c,buf_t); UTC2BTC(&GPS->D); return1; }if(c=='A'){//"$GPGGA"GPS->high=Get_Double_Number(&buf[GetComma(9,buf)]);return1;}return0;}/**********************************************************************Get_Double_Number:changestringbeforethefrist','todouble**********************************************************************/doubleGet_Double_Number(char*s){ charbuf[128]; inti; doublerev; i=GetComma(1,s); i=i-1; strncpy(buf,s,i); buf[i]=0; rev=atof(buf); returnrev;}/*******************************************Get_Char:getcharbeforefrist","********************************************/voidGet_Char(char*s){ inti; i=GetComma(1,s); i=i-1; if(i>9)i=9; strncpy(buf_t,s,i); buf_t[i]='\n';}/*******************************************GetComma:getpoistionofnum-th","********************************************/intGetComma(intnum,char*str){ inti,j=0; intlen=strlen(str); for(i=0;i<len;i++) { if(str[i]==',')j++; if(j==num)returni+1; } return0;}/*******************************************UTC2BTC:getBeiJingtime ********************************************/voidUTC2BTC(date_time*GPS){ GPS->second++; if(GPS->second>59){ GPS->second=0; GPS->minute++; if(GPS->minute>59){ GPS->minute=0; GPS->hour++; } }//轉化為北京時間//GPS->hour=GPS->hour+8; if(GPS->hour>23) { GPS->hour-=24; GPS->day+=1; if(GPS->month==2|| GPS->month==4|| GPS->month==6|| GPS->month==9|| GPS->month==11){ if(GPS->day>30){ GPS->day=1; GPS->month++; } } else{ if(GPS->day>31){ GPS->day=1; GPS->month++; } } if(GPS->year%4==0){// if(GPS->day>29&&GPS->month==2){ GPS->day=1; GPS->month++; } } else{ if(GPS->day>28&&GPS->month==2){ GPS->day=1; GPS->month++; } } if(GPS->month>12){ GPS->month-=12; GPS->year++; } }}基于C8051F單片機直流電動機反饋控制系統(tǒng)的設計與研究基于單片機的嵌入式Web服務器的研究MOTOROLA單片機MC68HC(8)05PV8/A內嵌EEPROM的工藝和制程方法及對良率的影響研究基于模糊控制的電阻釬焊單片機溫度控制系統(tǒng)的研制基于MCS-51系列單片機的通用控制模塊的研究基于單片機實現的供暖系統(tǒng)最佳啟停自校正(STR)調節(jié)器單片機控制的二級倒立擺系統(tǒng)的研究基于增強型51系列單片機的TCP/IP協議棧的實現基于單片機的蓄電池自動監(jiān)測系統(tǒng)基于32位嵌入式單片機系統(tǒng)的圖像采集與處理技術的研究基于單片機的作物營養(yǎng)診斷專家系統(tǒng)的研究基于單片機的交流伺服電機運動控制系統(tǒng)研究與開發(fā)基于單片機的泵管內壁硬度測試儀的研制基于單片機的自動找平控制系統(tǒng)研究基于C8051F040單片機的嵌入式系統(tǒng)開發(fā)基于單片機的液壓動力系統(tǒng)狀態(tài)監(jiān)測儀開發(fā)模糊Smith智能控制方法的研究及其單片機實現一種基于單片機的軸快流CO〈,2〉激光器的手持控制面板的研制基于雙單片機沖床數控系統(tǒng)的研究基于CYGNAL單片機的在線間歇式濁度儀的研制基于單片機的噴油泵試驗臺控制器的研制基于單片機的軟起動器的研究和設計基于單片機控制的高速快走絲電火花線切割機床短循環(huán)走絲方式研究基于單片機的機電產品控制系統(tǒng)開發(fā)基于PIC單片機的智能手機充電器基于單片機的實時內核設計及其應用研究基于單片機的遠程抄表系統(tǒng)的設計與研究基于單片機的煙氣二氧化硫濃度檢測儀的研制基于微型光譜儀的單片機系統(tǒng)單片機系統(tǒng)軟件構件開發(fā)的技術研究基于單片機的液體點滴速度自動檢測儀的研制基于單片機系統(tǒng)的多功能溫度測量儀的研制基于PIC單片機的電能采集終端的設計和應用基于單片機的光纖光柵解調儀的研制氣壓式線性摩擦焊機單片機控制系統(tǒng)的研制基于單片機的數字磁通門傳感器基于單片機的旋轉變壓器-數字轉換器的研究基于單片機的光纖Bragg光柵解調系統(tǒng)的研究單片機控制的便攜式多功能乳腺治療儀的研制基于C8051F020單片機的多生理信號檢測儀基于單片機的電機運動控制系統(tǒng)設計Pico專用單片機核的可測性設計研究基于MCS-51單片機的熱量計基于雙單片機的智能遙測微型氣象站MCS-51單片機構建機器人的實踐研究基于單片機的輪軌力檢測基于單片機的GPS定位儀的研究與實現基于單片機的電液伺服控制系統(tǒng)用于單片機系統(tǒng)的MMC卡文件系統(tǒng)研制基于單片機的時控和計數系統(tǒng)性能優(yōu)化的研究基于單片機和CPLD的粗光柵位移測量系統(tǒng)研究單片機控制的后備式方波UPS提升高職學生單片機應用能力的探究基于單片機控制的自動低頻減載裝置研究基于單片機控制的水下焊接電源的研究基于單片機的多通道數據采集系統(tǒng)基于uPSD3234單片機的氚表面污染測量儀的研制基于單片機的紅外測油儀的研究96系列單片機仿真器研究與設計基于單片機的單晶金剛石刀具刃磨設備的數控改造基于單片機的溫度智能控制系統(tǒng)的設計與實現基于MSP430單片機的電梯門機控制器的研制基于單片機的氣體測漏儀的研究基于三菱M16C/6N系列單片機的CAN/USB協議轉換器基于單片機和DSP的變壓器油色譜在線監(jiān)測技術研究基于單片機的膛壁溫度報警系統(tǒng)設計基于AVR單片機的低壓無功補償控制器的設計基于單片機船舶電力推進電機監(jiān)測系統(tǒng)基于單片機網絡的振動信號的采集系統(tǒng)基于單片機的大容量數據存儲技術的應用研究基于單片機的疊圖機研究與教學方法實踐基于單片機嵌入式Web服務器技術的研究及實現基于AT89S52單片機的通用數據采集系統(tǒng)基于單片機的多道脈沖幅度分析儀研究機器人旋轉電弧傳感角焊縫跟蹤單片機控制系統(tǒng)基于單片機的控制系統(tǒng)在PLC虛擬教學實驗中的應用研究基于單片機系統(tǒng)的網絡通信研究與應用基于PIC16F877單片機的莫爾斯碼自動譯碼系統(tǒng)設計與研究基于單片機的模糊控制器在工業(yè)電阻爐上的應用研究基于雙單片機沖床數控系統(tǒng)的研究與開發(fā)基于Cygnal單片機的μC/OS-Ⅱ的研究基于單片機的一體化智能差示掃描量熱儀系統(tǒng)研究基于TCP/IP協議的單片機與Internet互聯的研究與實現變頻調速液壓電梯單片機控制器的研究基于單片機γ-免疫計數器自動換樣功能的研究與實現基于單片機的倒立擺控制系統(tǒng)設計與實現單片機嵌入式以太網防盜報警系統(tǒng)基于51單片機的嵌入式Internet系統(tǒng)的設計與實現單片機監(jiān)測系統(tǒng)在擠壓機上的應用MSP430單片機在智能水表系統(tǒng)上的研究與應用基于單片機的嵌入式系統(tǒng)中TCP/IP協議棧的實現與應用單片機在高樓恒壓供水系統(tǒng)中的應用HYPERLINK"/detail
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 茭白收購合同范本
- 護士留學中介合同范本
- 工資欠條協議合同范本
- 單位院子維修合同范本
- 人車出租合同范本
- 還款合同協議書(2025年版)
- 停薪留職合同樣本二零二五年
- 施工班組承包合同
- 最高額抵押合同范例
- 個體工商戶雇工勞動合同樣書二零二五年
- 2025年AR眼鏡行業(yè)市場規(guī)模及主要企業(yè)市占率分析報告
- 日常小學生防性侵安全教育課件
- 浙江首考2025年1月普通高等學校招生全國統(tǒng)一考試 歷史 含解析
- 市政城市環(huán)境管理
- 2025辦公樓租賃合同書范本
- 16J914-1 公用建筑衛(wèi)生間
- 教學課件:《新時代新征程》
- 信息技術2.0微能力:小學五年級道德與法治上(第四單元) 民族瑰寶-中小學作業(yè)設計大賽獲獎優(yōu)秀作品模板-《義務教育道德與法治課程標準(2022年版)》
- 全球松子分析預測報告
- 英國FBA超重標簽
- 環(huán)境藝術與室內設計專業(yè)室內設計手繪表現技法教學課件(圖文)
評論
0/150
提交評論