ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:75.45KB ,
资源ID:12843118      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-12843118.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于STM32开发板的GPS定位模块设计.docx)为本站会员(b****8)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

基于STM32开发板的GPS定位模块设计.docx

1、基于STM32开发板的GPS定位模块设计生产实习设计报告设计题目:基于GPS模块的定位装置生产组长:王海昕设计组长:孙振邦小组成员:王洪振、唐政亮、帖小龙、宋劲草、宋晓林苏刚、孙晓龙、史俊、赵若曦实习日期:2012年8月27日-9月15日一、 概述本设计基于STM32F10开发板,结合iTrax03-02 型GPS接收机, 实现GPS模块与STM32的通信;通过GPS模块实现定位,STM32对GPS 模块传入的数据进行读取和处理,将得到定位信息在 OLED显示。该定位装置还有如下附加功能:SD卡数据存储功能,定位状态 显示(卫星颗数等);可通过RS232串口传输坐标和时间至PC机,并 通过上位

2、机软件实现路径计算和网络地图定位。二、 总体设计1.总体系统结构2.功能实现.经纬度测定,海拔高度测定.速度计算与方向指示.SD卡定时存储信息 .上位机制作及路径计算3.人员分工孙振邦、王海昕完成源程序的编写,以及代码的修改、编译、下载、 调试等工作;宋劲草、宋晓林、苏刚负责 GPS数据编码转换编程;王洪振、帖小龙、唐政亮负责串口数据传输、 SD卡定时存储设置;史俊、赵若曦、孙晓龙负责上位机界面设计和各项功能的验证。三、关键模块设计.GP模块iTrax03-02 型GPS接收机是根据芬兰FASTRA公司的GPS模块 进行了电平转换、通信接口等电路设计后生产的一款 GPS(OEM接收机产品。该产

3、品通过底板上9pin排线与计算机串口直接通信,定 位后即可输出载体的经纬度信息、时间信息、速度信息等。(2) GPS定位数据格式解析数据形式:$GPGGA,hhmmss.dd,xxmm.dddd,yyymm.dddd,v,ss,d.d,h.h,M,g.g, M,a.a,xxxx*hh名称说明$GPGGAGGA消息协议头hhmmss.ddUTC时间xxmm.dddd纬度信息,度、分格式纬度半球N (北半球)或S (南半球)yyymm.dddd经度信息,度、分格式纬度半球E (东经)或E (西经)V判断是否已疋位,疋位为1,未疋位为0ss使用的解算卫星的数量一般 0-12颗d.dHDO水平精度因子

4、h.h海拔高度M单位米g.gWGS-846表面与水平面的差值M单位米a.a空xxxx空hh校验及固定包尾.OLE显示模块OLED使用的控制器为SSD1305可通过写入不同的命令字来设置 对比度、显示开关、电荷泵、页地址等。OLE被配置为使用I2C的方式。I2C的地址二进制位为0111100X16进制为0x78(写地址),0x79(读地址)。OLE的 Reset平时应该拉高, 在初始化的时候,应该有一个从低电平到高电平的跳变。使用的MC端口为PB6 CLK I2CPB7 SDA I2CPE6 RESET (低有效)(3)距离计算功能 公式、原理什么的(4)串行通信模块RS232勺电平转换芯片为M

5、AX232CE外部接口为DB9有两个LE指旨示灯,TXD用来显示接受到数据,RX用来显示正在发送数据。对外接口 为DB接 口,定义为:2RXD,3TXD,5GND因此,基板可以通过串口线 直接连接到PCM,和PC机进行通信。使用的MC端口为:PD5 UART2_TX(Remap)PD6 UART2_RX(remap)四、测试结果1开机上电后在数据有效的情况下进入定位信息显示模式;2. 进入定位信息显示模式后,OLEL显示出当前位置经度、纬度、海拔高度、移动速度、移动方向、卫星显示颗数3.设定中断时间后,数据会自动存储至 SD卡;4.通过RS23串口与PCS讯后可以通过上位机软件打开该位置的谷歌

6、 地图显示,并且计算路径长度。附录定位测试数据保存数据如下 : $GPGSV,3,1,10,01,35,047,32,04,30,244,24,08,12,207,27,09,06,318,12*71 $GPGSV,3,2,10,11,20,063,36,17,54,320,39,20,54,099,23,27,10,309,26*7F $GPGSV,3,3,10,28,78,225,29,32,34,062,26*75$GPRMC,071738.50,A,3609.4075,N,12029.3426,E,0.00,302.3,090912,5.8,W,A *15$GPGGA,071738.5

7、0,3609.4075,N,12029.3426,E,1,05,2.0,115.0,M,5.5,M,*50 $PFST,FOM,6*63$GPGSA,A,3,01,08,11,17,28,2.9,2.0,2.1*3D $GPGSV,3,1,10,01,35,047,32,04,30,244,24,08,12,207,27,09,06,318,12*71 $GPGSV,3,2,10,11,20,063,36,17,54,320,39,20,54,099,23,27,10,309,26*7F$GPGSV,3,3,10,28,78,225,29,32,34,062,26*75$GPRMC,07173

8、9.50,A,3609.4075,N,12029.3428,E,0.00,302.3,090912,5.8,W,A *1A$GPGGA,071739.50,3609.4075,N,12029.3428,E,1,07,2.0,115.0,M,5.5,M,*5D $PFST,FOM,24*53$GPGSA,A,3,01,04,08,11,17,27,28,2.9,2.0,2.1*3C $GPGSV,3,1,10,01,35,047,31,04,30,244,24,08,12,207,27,09,06,318,12*72 $GPGSV,3,2,10,11,20,063,36,17,54,320,38

9、,20,54,099,23,27,10,309,25*7D$GPGSV,3,3,10,28,78,225,27,32,34,062,26*7B$GPRMC,071740.50,A,3609.4074,N,12029.3429,E,0.00,302.3,090912,5.8,W,A *14$GPGGA,071740.50,3609.4074,N,12029.3429,E,1,07,1.8,115.0,M,5.5,M,*58 $PFST,FOM,20*57$GPGSA,A,3,01,04,08,11,17,27,28,2.7,1.8,2.0*38 $GPGSV,3,1,10,01,35,047,3

10、1,04,30,244,24,08,12,207,27,09,06,318,12*72 $GPGSV,3,2,10,11,20,063,36,17,54,320,38,20,54,099,23,27,10,308,25*7C$GPGSV,3,3,10,28,78,225,27,32,34,062,26*7B$GPRMC,071741.50,A,3609.4074,N,12029.3431,E,0.00,302.3,090912,5.8,W,A *1C附录二关键程序代码Main.c:#include includes.h#include led.h#include GPIO_InitTypeDe

11、f GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;void USART1_Init(void)RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_USART1, ENABLE);/ 定义 UART1 TX (PA.09) 脚为复用推挽输出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; /IO GPIO_InitStructure.GPIO_Speed =

12、 GPIO_Speed_50MHz; /IO GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /IO GPIO_Init(GPIOA, &GPIO_InitStructure); / / 定义 USART1 Rx (PA.10) 为悬空输入 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; /IO口的第九脚口速度口复用推挽输出初始化串口 1输出10 口口的第十脚GPI0_InitStructure.GPI0_Mode = GPI0_Mode_IN_FL0ATING;/I0口悬空输入GPI0_Init(GPI0A

13、, &GPI0_InitStructure); /初始化串口 1输入10 口/ 串口参数配置USART_InitStructure.USART_BaudRate = 4800; 115200/ 设置波特率为USART_InitStructure.USART_WordLength 位= USART_WordLength_8b; /设置数据位为 8设置停止位为 1无奇偶校验USART_InitStructure.USART_StopBits = USART_StopBits_1; / 位USART_InitStructure.USART_Parity = USART_Parity_No; /USA

14、RT_InitStructure.USART_HardwareFlowControl =USART_HardwareFlowControl_None; / 没有硬件流控USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; / 发送与接收/ 完成串口 COM的时钟配置、GPIO配置,根据上述参数初始化并使能USART_Init(USART1, &USART_InitStructure);USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); / 使能串口 1接收中断USART_Cmd(

15、USART1, ENABLE);NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;数据模式0:缓存数据无效。NVIC_Init(&NVIC_InitStructure);int main(void)delay_init(72);GUI_Init

16、();GUI_SetBkColor(GUI_BLUE);GUI_Clear();USART1_Init(); while(1)gps_display();GPS.c:#include includes.h/GPS 数据存储数组 / unsigned char JD11;unsigned char JD_a;unsigned char WD10;unsigned char WD_a;unsigned char time10;unsigned char speed6 = 0; / unsigned char speed26 = 0;unsigned char high6;unsigned char

17、 haiba6;unsigned char angle6;unsigned char use_sat3;unsigned char total_sat3; / unsigned char lock;/ 串口中断需要的变量 unsigned char seg_count; unsigned char dot_count; unsigned char byte_count; unsigned char cmd_number;unsigned char mode;unsigned char buf_full;unsigned char cmd5; unsigned char USART_END;un

18、signed char newflag = 0;/ 经度/ 经度方向/ 纬度/ 纬度方向/ 时间速度/ 速度/ 高度/ 海拔/ 方位角/ 使用的卫星数 天空中总卫星数/ 定位状态/ 逗号计数器/ 小数点计数器/ 位数计数器/ 命令类型/0 :结束模式, 1:命令模式, 2:/1 :整句接收完成, 相应数据有效。 / 命令类型存储数组/ 经纬度转换用 / double d; double f;unsigned char d_d; double D_D;unsigned char time_8; / 时区转换 void gps_deal(void)u8 tmp = 0; if(USART_GetI

19、TStatus(USART1,USART_IT_RXNE) != RESET) / 如果是接收 中断tmp = USART_ReceiveData(USART1);switch(tmp)case $:cmd_number = 0; / 命 令 类 型清空mode = 1; / 接 收 命 令模式byte_count = 0; / 接 收 位数清空break; case ,:seg_count+; / 逗 号 计 数加 1byte_count = 0; break;case *: switch(cmd_number) case 1:newflag |= 0x01; /GGA break;case

20、 2:newflag |= 0x02; /GSV break;case 3:newflag |= 0x04; /RMC break; mode = 0;break;default:if(mode = 1)/ 命令种类判断 cmdbyte_count = tmp;/ 接收字符放入类型缓存 if(byte_count = 4)/ 如果类型数据接收完毕, 型if(cmd0 = G)if(cmd1 = P)if(cmd2G)if(cmd3= G)if(cmd4 = A)cmd_number = 1;mode = 2;seg_count = 0;byte_count = 0;elseif(cmd3 =

21、S)if(cmd4 = V)判断类cmd_number = 2;seg_count = 0;WDbyte_count= tmp;byte_count = 0;else if(cmd2 = R) if(cmd3 = M)if(cmd4 = C)cmd_number = 3;mode = 2;seg_count = 0;byte_count = 0;else if(mode = 2) / 接收数据处理 switch (cmd_number) case 1: / 类 型1数据接收。 GPGGAswitch(seg_count)case 2:/ 纬度处理WDbyte_count+1 = 0; / 解决

22、输出位数过多break;case 3:/ 纬度方向处理if(byte_count 1)WD_a = tmp;break;case 4:/ 经度处理if(byte_count 11)JDbyte_count= tmp;JDbyte_count+1 = 0;break;case 5:/ 经度方向处理if(byte_count 1)JD_a = tmp;break;case 7:/ 定位使用的卫星数if(byte_count 2)use_satbyte_count = tmp;if(byte_countuse_satbyte_count+1 = 0;10)break;case 9:/时间处理/ 高度

23、处理 if(byte_count 6)timebyte_count = tmp;break;highbyte_count = tmp;case 2:/定位判断break;if(byte_count 1)case 11:/ 海拔处理lock = tmp;if(byte_count 6)break;haibabyte_count = tmp;case 7:/速度处理break;if(byte_count 5)break;case 2:/类型2数据接收。 GPGSVspeed2byte_count = tmp;switch(seg_count)/spd_wei=byte_count;case 3:/

24、 天空中的卫星总break;数case 8:if(byte_count 2)/方位角处理if(byte_count 5)total_satbyte_count = tmp;1anglebyte_count = tmp;total_satbyte_count+1 = 0;break;break;break;break;case 3:/类byte_count+;/ 接 收 数型3数据接收。 GPRMC位加 1switch(seg_count)break;case 1:if(byte_count 23) time_8 = time_8 - 24 ;time0 = (time_8 / 10) + 0x

25、30; time1 = (time_8 - (time_8 / 10)* 10) / 1) + 0x30;/ 经纬度转换 double JWD_AREA(char *jwd)d = atof(jwd) / 100.0; / 将JD 转换为 doubled_d = d / 1;f = (d - d_d) / 60.0 * 100;D_D = d_d + f;return D_D;void gps_display(void)LED0=!LED0;if(newflag = 0x07) newflag = 0; GUI_SetColor(GUI_GREEN);GUI_SetFont(&GUI_Font

26、8x16);GUI_DispStringAt(Longitude,20,60);JWD_AREA(JD); / 经度转换GUI_DispFloat(D_D,10) ;GUI_DispCharAt(JD_a,120,60);GUI_DispStringAt(Latitude ,20,80);JWD_AREA(WD); / 纬度转换GUI_DispFloat(D_D,10) ;GUI_DispCharAt(WD_a,120,80)GUI_DispStringAt(use_sat,20,100);GUI_DispStringAt(use_sat,140,100)GUI_DispStringAt(to

27、tal_sat,20,120);GUI_DispStringAt(total_sat,140,120);GUI_DispStringAt(status,20,20);GUI_DispCharAt(lock,140,20);GUI_DispStringAt(Elevation,20,140);GUI_DispStringAt(high,140,140);TIME_AREA();GUI_DispStringAt(high,20,160);GUI_DispStringAt(time,20,40);GUI_DispStringAt(haiba,140,160);GUI_DispStringAt(time,140,40);/ printf(” 时间:c%时c%cGUI_DispStringAt(Speed,20,180);分 c%c%c%c%Cr n, timeO, time1.GUI_DispStringAt(speed2,140,180);

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2