基于ARM嵌入式的GPS定位设计【实用文档】doc.doc
基于ARM嵌入式的GPS定位设计【实用文档】doc文档可直接使用可编辑,欢迎下载学院电子信息工程专业“专业课程设计"报告题目名称:基于AM嵌入式的GP定位设计班 级:同组 人:指导教师:1设计任务本次设计主要是实现在GPS的定位信息提取,其中包括经度、纬度、时间、日期等,采用意法半导体的CORTEX-M3内核的SM3213BT6为核心板,液晶采用采用oia550。总体来说实现了耗电少,功能齐全,简单易用的特点。2设计背景及方案S全球定位系统最早是由美国军方建立用以进行军事活动的侦查的,能够在全球范围内,提供实时、连续、全天候的导航定位及授时服务,共分为三个部分,空间部分,地面部分,和接收终端部分.GPS系统共由24颗卫星组成,分布在6个轨道上面,每个轨道上有4颗,轨道倾角为5度,不论在什么地方,只要能够收到4颗以上的卫星,就可以实现实时定位.3系统硬件简述(1) 最小核心系统最小系统是由STM32F103RT6微处理器构成,核心是由32位的ARM-CORT-M3,最高时钟可以达到72MHZ,有单周期的乘法和除法运算,内部有28k的ash,2的SRA,2./6V的IO供电,上电、断电复位,可编程电压监测,内嵌8M的C振荡晶振,内部40K振荡器,内嵌L的C时钟,内嵌使用32K晶振的RTC振荡器。具有低功耗的睡眠、待机、停机模式,VBT为后备寄存器提供电源.具有串行SD和JTA调试模式。7个D通道支持定时器、AD、SP、I、USART。一个12位的模数转换器,(1通道)转换范围为0。3。6,温度传感器。个丰富的IO端口,兼容5V电平,所有的IO口可以映射到16个外部中断。个定时器,(3个16位的定时器,每个定时器具有4个输入输出捕捉/WM脉冲调制/脉冲计数的通道,2个看门狗定时器,个2位的系统定时器,自动递减功能)。2个IC,2个PI,3个SAR通信接口.(2L液晶Noi50是Philp产的单芯片LD驱动控制低功耗的显示液晶,其显示为A 4*84 串行最高4Mbis/S,COMS电平兼容,逻辑电平为3.03V低功耗适用于电池供电,使用温度范围为-25度到7度。其中引脚如下:Pn1;CC Pin2:GNDPi3: E Pin:RESPin5:GND in: SDINPin7:SCLK Pin:LED背光图6为水平写入的地址表,用以往RM中写入字符。()C3370PS终端接受模块C370是韩国产的全自动PS接受模块,具有SIR第三代的结构组成,其内核是有ARM7DI C,4的Flash内存,自带有微型天线,2通道,CA码,L1的频率。定位精度 0 3DRMS, ;冷启动约为6s,热启动少于1,协议时NMA0813 ,9600的波特率。NMA的输出格式有六种G、GLL、GSA、GSV、RMC、VGT,其中我们解析的一种是RC格式的。一条PRMC包含13个字段,语句标识符,世间时间,定位状态,纬度,纬度方位,经度,经度方位,地面速度,地面航向,日期,磁偏角,校检,结束标记,具体格式如下:GPRMC,0504。00,,2459。899,N,1242.868,,037,130.03,008,,A66<> UTC时间,hms(时分秒)格式 <2定位状态,=有效定位,=无效定位3 纬度mm。(度分)格式(前面的0也将被传输) 4>纬度半球N(北半球)或S(南半球)5经度ddm。mmmm(度分)格式(前面的0也将被传输)<6>经度半球E(东经)或W(西经) <7 地面速率(00099.9节,前面的0也将被传输)<> 地面航向(00.059.9度,以真北为参考基准,前面的0也将被传输) UTC日期,dmmyy(日月年)格式 10 磁偏角(00。0180.度,前面的0也将被传输)<1磁偏角方向,(东)或W(西)上图为C3-30引脚图,具体我们只用到了VC,T,RX,GND,OT,硬件整体连接图硬件流程图由于PS和CU的电平兼容,所以在硬件连接中,GS接受终端的TX接CU的R,R接,另外通过RS22电平转换后可以直接进行上位机软件的接受工作,最后把解析的数据显示在ka5510上面。4软件流程图及程序(1)流程图软件流程图(2)程序u8 G_parse(cha bu) n d,m,m; u8 i; car *ord,leu+1; ttu gcount0,sgid=0,atount=0; /解析GV用到的变量 /各通道采用的卫星编号 u8uedsatcont=0; if(uf0!= $) rur ; / =spli(let,ATRS,&et); / i(chek(word,lft) != 1) / rtur 0; /; / lft=wrd; word=pl(lt,EMICLON,&lef); /开始解析 if(!trcmp(wd,PRM")) /相等时,返回0值,进入函数解析GPRMC格式 /时间 orspi(left,EMICOLON,let); if(word != NULL) if(sncmp(lastime,word,20)) /比较不大于20个字符的两个字符串 返回>/<0/=0; sscnf(word,”2d%2。%",&gpshh,psm,&ps.ss,&ps。ms); /取出指定格式的字符 rncpy(stme,word,20); / 拷贝20个字符从wrd到lsttm中,返回aste; /定位状态 wdst(left,EMIOO,lef); if(wr != NL) if(rd0 'A') gps。svalid=1; ese gsivald; /纬度 wordpit(left,SCOLN,left); i(or != NUL) scanf(word,”2d2d.%4d”,d,m,m); ps.latitue(float)+(lat)m/6.0+(floa)mm/0000。0; /南北半球标志 r=splt(let,EMICLON,&et); if(o ! NULL) if(od =') / gps。lau-gp.titude; ps.latNS ='S; else gps。latNS= N; 经度 wor=split(lef,SEL,left); if(wor != N) int d,,mm; ssca(wrd,”3d.d,d,m,mm); gs.lgitude (loat)+(loat)m/60。(float)m60000。0; /东西半球标志 word=split(let,SEMICLON,lt); if(w != NULL) if(word0 =') s.lgtEW = W; / ps。ngitud=logitude; lse gps.ltE= '; /对地运动速度 wor=split(lef,MICLON,&eft); if(wod != NULL) gp.sped=m_atf(wod)*1.852; /对地运动方向 wod=sli(left,SEMCLN,&e); i(rd != NULL) gps。dietion=y_aof(word); /u日期 wod=spit(lef,EMICOLON,&eft); f(ord ! NLL) sscnf(word,%2d2d%2",&gs。DD,&gpsMM,&gps。YY); 5调试过程由于GP的数据回收过程是一直有效,所以在配置串口中断的过程中要注意数据的回收处理,然后才能解析。最先开始的时候必须到野外看看P模块的性能测试。调试的时候,一定要先把串口配置好,这样在调试的过程中可以边从MCU中从串口读取GS发回的数据,看看串口配置的是否正确.几次试验,最后测的经纬度范围在gole地球上显示的效果精度m,十分的满意。6总结 通过这次GPS接受的调试,认识的了P工作过程,理解了基本的原理,还需解决的问题包括GPS的阶段操作,MCU的分时工作,和电源的低功耗设计等等。1-1 什么是嵌入式系统?嵌入式系统和普通计算机系统的区别是什么?举例说明。答:问题一:嵌入式系统是以应用为中心,以计算机为基础,其软硬件可裁剪配置,对功能、可靠性、成本、体积、功耗有严格约束的一种专用计算机系统。问题二:比较项目嵌入式系统普通计算机系统引导代码BootLoader引导,针对不同电路进行移植主板的BIOS引导OSWindowsCE、VxWorks、Linux等,需要移植Windows、Linux,不移植驱动程序每个设备都必须针对电路板进行开发OS中含有大多数,直接下载协议栈移植OS或者第三方供应商提供开发环境借助服务器进行交叉编译在本机可开发调试仿真器需要不需要1-2 简述嵌入式系统的构成答:硬件微处理器嵌入式系统的控制核心外围电路嵌入式系统的内存、I/O端口、复位电路、电源等外设USB、LCD、键盘等软件设备驱动接口负责嵌入式系统与外设的信息交互实时操作系统包括与硬件相关的底层软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等可编程应用接口为编制应用程序提供各种编程接口库应用软件1-3答:R13:也记作SP,在ARM指令集中虽然没有强制,但是通常用于堆栈指针SP;在Thumb指令集中强制其作为堆栈指针。R14:也记作程序连接寄存器LR(Link Register),用于保存子程序调用或异常中断处理返回时程序的返回地址。R15:也记作程序计数器PC,用于标示下一条将要执行的指令地址。CPSR:程序状态寄存器,包含条件标识位、中断标识位、当前处理器模式等状态和控制位。SPSR:备份的程序状态寄存器。在异常中断处理过程中,用于保存被中断处理程序的执行现场和处理器状态。1-4答:(1)复位异常中断:当系统上电、复位、软件复位时产生该类型中断。(2)未定义指令异常中断:当ARM处理器或系统中的协处理器认为当前指令未定义时,产生该中断。通常利用该中断模拟浮点向量运算。(3)软件中断:可用于用户模式下特权操作的调用,既可以是系统功能,也可以是用户自定义的功能。(4)指令预取中止异常中断:如果处理器预取的指令地址不存在,或者该地址不允许当前指令访问,产生该类型的中断。(5)数据访问中止异常中断:如果数据访问的目标地址不存在,或者该地址不允许当前指令访问,则产生该中断。(6)外部中断:当处理器的外部中断请求引脚有效,而且CPSR的I控制位被清除时,产生该类型的中断(7)快速外部中断:当处理器的快速中断请求引脚有效,而且CPSR的F控制位被清除时,产生该中断。1-5答:(1)ADRR0, TABLE(2) ADRR1, DATALDRR0, R1(3)LDRR0, =DATA(4)TABLEEQU 800MOVR0, #TABLE(5)TABLESPACE201-6答:R0=DATA1这组数据在存储器中所存放的起始地址,由编译器分配;R1=0x0C0D0E0F; R2=0xF;R3=0x8 ;0x8 =R11-7答:AREASWITCH, CODE, READONLYENTRYANDR2, R0, 0x3;R2ß R0的低两位MOVR2, R2, LSL #30;将低两位移动到高两位BICR0, R0, 0x3;将R0的低两位清0ANDR3, R1, 0xC0000000;R3ßR1的高两位MOVR3, R3, LSR #30;将高两位移动到低两位BICR1, R1, 0xC0000000;将R1的高两位清0ORRR0, R0,R3;R1的高两位写入到R0的低两位ORRR1, R1, R2;R0的低两位写入到R1的高两位END1-8答:/ main.cInclude “stdio.h”externintsum(int num, int n);main()intarray10=20, 30, 23, 5,15,64,6,15,72,73 ;intHE=sum(array, 10);printf(“The sum of array is %d”, HE);/huibian.sAREAASM, CODE, READONLYEXPORT sumsumMOVR2, #0LOOPLDRR3, R0, #4ADDR2, R2, R3SUBR1, R1, 1CMPR1, 0BNELOOPMOVR0, R2MOVPC, LREND1-9答:(1)要求很强的实时性,支持快速而明确的上下文切换(2)具有高度的可裁剪性,支持动态链接,能够通过装卸某些模块来达到系统所需要的功能(3)具有快速有效的中断和异常处理能力(4)具有优化的浮点支持(5)能够进行动态的内存管理2-1 略。2-2 略2-3略2-4按照要求完成以下操作。(1)创建文件夹test。 mkdir test(2)进入test目录。 cd test(3)在test目录下用Vi编辑一个新文件test.c,其内容如下:#include <stdio.h>intmain() int a,i=0; a=0; while(i<20)a=a+3;printf("the value of a=d n",a);sleep(1);i=i+1; return 0; vi test.c(4)保存退出test.c。(5)按照下面的要求编译test.c。使用gcc -o test.o test.c编译,生成test.o。使用gcc -g -o gtest.o test.c编译,生成gtest.o。比较gtest.o 与 test.o的大小,哪个大?为什么?gtest.o 比 test.o 大,因为前者加入了一些调试信息。(6)执行gtest.o与test.o。2-5使用GDB调试上面的程序gtest.o。(1)进入GDB调试环境,读入调试程序。 gdb gtest.o(2)列出源文件内容。list(3)在程序a=0;处设置一个断点。 breakpoint (4)在程序printf("the value of a=%d n",a);处设置一个断点。(5)执行该程序。 run (6)查看变量a的值。 print a(7)查看变量a的类型。(8)执行下一个源程序行,从而执行其整体中的一个函数。(9)从断点开始继续执行到下一个断点。(10)查看变量a的值,看看a是否有变化?(11)不停地执行continue,直到程序结束。(12)退出GDB。2-6根据要求编写Makefile文件。五个文件分别是main.c、display1.h、display1.c、display2.h、display2.c,具体的代码如下:#include "stdio.h"int main(int argc,char *argv) display1 ("hello"); display2("hello");display1.hvoid display1 (char *print_str);display2.hvoid display2 (char *print_str);display1.c#include "display1.h"void display1(char *print_str)printf("This is display1 print sn",print_str);display2.c#include "display2.h"void display2 (char *print_str) printf("This is display2 print sn",print_str);(1)如果上述文件在同一个目录,请编写Makefile文件。(2)如果按照下面的目录结构存放文件,请编写Makefile文件。|-bin存放生成的可执行文件|-obj存放.o文件|-include存放display1.h和display2.h文件|-src存放main.c、display1.c、display2.c和Makefile(3)如果按照下面的目录结构存放文件,请编写Makefile文件。|-bin存放生成的可执行文件|-obj存放.o文件|-include存放display1.h和display2.h文件|-src存放main.c和Makefile|-src/display1存放display1.c和Makefile|-src/display2存放display2.c和Makefilesrc下面的makefileSRC_DIR=.INC_DIR=./includeOBJ_DIR=./objBIN_DIR=./bininclude $(SRC_DIR)/test/makefileinclude $(SRC_DIR)/test1/makefiledisplay1下面的makefileall:$(OBJ_DIR)/display1.o $(OBJ_DIR)/display1.ogcc -o $(BIN_DIR)/display1 $display2下面的makefile$(OBJ_DIR)/display2.o:$(SRC_DIR)/display2/display.cgcc -c $< -o $3-1答:1.建立宿主机开发环境,包括操作系统及编译器等2配置宿主机相关服务及软件,如minicom、网络等3建立引导加载程序BootLoader4移植内核kernel5建立根文件系统root6建立应用程序的Flash磁盘分区7开发应用程序8烧写内核、根文件系统和应用程序9发布产品3-2 答:Stage1:(1)硬件设备初始化。(2)为加载BootLoader的Stage2准备RAM空间。(3)复制BootLoader的Stage2到RAM空间中。(4)设置好堆栈。堆栈指针的设置是为执行C语言代码做好准备。Stage2:(1)初始化本阶段要使用到的硬件设备。(2)检测系统内存映射(Memory Map)。(3)将内核映像和根文件系统映像从Flash存储器上读到RAM空间中。(4)为内核设置启动参数。(5)调用内核。3-3 答:1. 数据结构file_operations2.设备注册:驱动程序模块通过函数register_chrdev来完成内核的注册。3.设备卸载:驱动程序模块通过函数unregister_chrdev来完成内核的卸载。4打开/释放设备:驱动程序通过函数open来完成设备的打开。驱动程序通过函数release来完成设备的释放5读写设备:read函数将数据从内核复制到应用程序空间,write函数则将数据从应用程序空间复制到内核。6读写以外的I/O操作:驱动程序模块通过ioctl函数来完成读写以外的I/O操作,如锁设备等3-4 答:(1)register_chrdev(0,”demo”,&demo_fops);(2)mknod /dev/demo c 220 0(3)insmod demo.o4-1参见exam4-14-2参见exam4-24-3参见exam4-35-1 略5-2 略5-3C:Qt>sqlite3 exam.dbSQLite version 3.5.4Enter ".help" for instructionsEnter SQL statements terminated with a ""sqlite> create table book(ID Integer primarykey,Name varchar(20),Type varchar(10),Count Integer);sqlite> insert into book values(1,'SQLite3','Database',10);sqlite> insert into book values(2,'Qt4','GUI',20);sqlite> select * from book;1|SQLite3|Database|102|Qt4|GUI|20sqlite>5-4#include<stdio.h>#include<sqlite3.h>int main()sqlite3 *db=NULL;int rc;char *Errormsg;int nrow;int ncol;char *Result;int i=0;rc=sqlite3_open("exam.db",&db);if(rc)fprintf(stderr,"can't open database:%sn", sqlite3_errmsg(db);sqlite3_close(db);return 1;elseprintf("open database successly!n");char *sql="create table book(ID Integer primary key,Name varchar(20),Type varchar(10),Count Integer)"sqlite3_exec(db,sql,0,0,&Errormsg);sql="insert into book values(1,'SQLite3','Database',10)"sqlite3_exec(db,sql,0,0,&Errormsg);sql="insert into book values(2,'Qt4','GUI',20);"sqlite3_exec(db,sql,0,0,&Errormsg);sql="select * from book"sqlite3_get_table(db,sql,&Result,&nrow,&ncol,&Errormsg);printf("row=%d column=%dn",nrow,ncol);printf("the result is:n");for( i=0;i<(nrow+1)*ncol;i+)printf("Result%d=%sn",i,Resulti);sqlite3_free(Errormsg);sqlite3_free_table(Result);sqlite3_close(db);return 0;5-5参见案例6-1略6-2略6-3参见exam6-3。6-4参见案例湖南文理学院芙蓉学院课程设计报告课程名称:嵌入式系统课程设计 专业班级:通信工程101班学生姓名:王海波指导教师: 邵湘怡 完成时间:06年 月 22日 报告成绩:评阅意见: 评阅教师 日期 湖南文理学院制目录基于嵌入式系统u盘开发的设计1一、设计题目1二、设计内容及要求1设计内容122设计要求三、设计作用与目的2四、系统设计方案2.1系统总体设计2.2简要阐述系统工作原理3五、系统硬件设计3。1硬件电路5.2基本程序结构4.2.1.USB 设备端的固件分以下几个层次:.2。在调试的时候,从现象上来看,分成以下几个阶段性的步骤55。23。检查USB器件工作与否65。.4。提供描述符5.3硬件设计6六、系统软件设计76.USB协议6。2 BUL_ONLY和UF协议86.3FAT3216.4软件系统模块12七、仿真调试分析1八、嵌入式系统学习心得1九、参考文献1基于嵌入式系统盘开发的设计一、设计题目基于嵌入式系统盘开发的设计二、设计内容及要求21设计内容随着USB技术和闪存技术的飞速发展,移动存储设备的速度和容量日新月异,但在工业控制的上位机和下位机之间,数据传输依然采用传统的串并口技术,特别对一些前端的便携式采集系统,需要采集后临时存储,再拿回来传给作为上位机的C机进行数据处理,给人们带来很多不变,为此,本文提出了一种方法利用U盘的便捷特性开发一种基于嵌入式的UB读写器,方便地将采集数据以文件方式写入U盘,PC机不需要任何特殊驱动便可以完成对数据的处理回放。利用本方法可以彻底解决下位机与C机之间的数据传输难的问题。2.2设计要求据U盘结构特点,设计了一种基于嵌入式系统U盘的系统结构,可以将U盘集成到无线数据卡上,或者手机上,以实现数据存储的功能。在进行USB 开发过程中,比较难的是对设备端的程序(称为固件,irmwa )进行调试。由于 协议有严格的时间要求,这就使得程序必须在有效时间内对某些请求或状态进行处理,否则,USB将无法正常工作.因此,在调试过程中,较多借助LE1,ED2显示输出的一些信息来辅助调试,定位问题所在。比如,在某个函数中加入LED,LD2显示语句,程序运行时看有否相应的LED1,LED显示输出,借此来判断此函数是否得到了执行.调试工作基本分二步进行:首先对外部设备(单片机部分)借助PC 调试软件(从网上下载Bu Hound)将设备端的USB 协议(主要有描述符请求、端口配置、地址设置以及基本数据交换)调通.然后,用调试好的US 设备接口来嵌入文件系统功能。三、设计作用与目的根据 盘结构特点,设计了一种基于嵌入式系统 盘的系统结构,可以将U 盘集成到无线数据卡上,或者手机上,以实现数据存储的功能四、系统设计方案4。1系统总体设计图1 US读写器结构图42简要阐述系统工作原理SB读写器结构框图如图所示,主要由MS30F149和SL81HS构成,MP3支持串口输入和14位的并口输入,。7用作中断唤醒位,2.6用作标准位区分数据和命令,通过P口向SL8发送控制信号,用作普通的双向总线接口与SL11进行数据交换,.1支持中断唤醒接收L81的中断请求. 五、系统硬件设计.1硬件电路下图分别为DIUSBD12的引脚定义,其中,下列几个方面在制作电路板时应该注意。图2PDISBD2引脚图a)GN接地,VDD 接正(3。3V 或5V ),如果芯片工作在。3 ,则Vot3.与DD 都接3V ;如果芯片工作在 ,则这时Vut。3 会输出3.3V 的电压,用于提供给D +作参考电压,因为此参考电压必须为33 。对于U盘来说,由于SB 接供的是5 电压,因此应该按后一种接法接。即GND 接USB 接口中的ND ,VDD接US 接口中的VD ,D D-分别接UB 接口中的对应位。b)XTAL1 和XTAL2 按传统接法.)PIUSBD2与MCAT9C55D的连接方法见下表表 DISB2与MCU A-8955D的连接方法PDIUSBD2引脚MCU T89C55引脚DATA<0 DA<P0。0P.7(DA7)ALEALE/RGCS_N1.6RSET_P1.7IT_NP32(INT)SUPENP.W_NP36()D_NP(RD)0接GDd)DMAR DMAC_NEOTNG_N CLKOUT引脚悬空,可作为扩充功能使用。e)MCAT55WD P1。和1。3接个低电平有效显示灯LED和LD2.5.2基本程序结构5.2。1.SB 设备端的固件分以下几个层次:表2固件层次固件模块功能Mic进行各种初始化操作、寄存器设置、中断设置intr.中断服务程序,负责将不同类型的中断转向不同的地方us_p12硬件抽象层,所有的上层模块都必须通过此模块与USB芯片打交道ub_prcl。c设备枚举需要的设备描述符,配置描述符,接口描述符,端口描述符都由此模块来执行提供endpoi2_ukolyC所有assStrg 协议CBW,CSW,DATA的处理及LASH的读写都由此模块来处理5.2在调试的时候,从现象上来看,分成以下几个阶段性的步骤1、US 芯片正常工作,可以实现软连接,此时PC 机上会出现“未知设备类型”的USB设备;2、向主机提供普通USB 设备提供描述符,提供正确的VID 和PID 后,P 能够识别设备,但要求提供设备的驱动程序;3、安装驱动程序后,使用周立功单片机公司提供的UsbDeb.xe简单调试端点1和,确保其均可传输数据,验证硬件及固件的正确性;4、按Mastorae不得ul-ly 模式提供描述符,P机上设备类型变成MstorageDevice;5、响应了Bulk-Ony 的Inquiry 命令,可以出现盘符了,但尚无法访问磁盘;6、提供了其他所有的UFI命令(CS子集),开始读取磁盘0扇区(BP