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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

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

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

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

3、计算机串口直接通信,定位后即可输出载体的经纬度信息、时间信息、速度信息等。(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.dHDOP水平精度因子h.h海拔高度M单位米g.gWGS-84

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

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

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.50,3609.4075,N,12029.3426

7、,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,071739.50,A,3609.4075,N,12029.34

8、28,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,20,54,099,23,27,10,309,25*7D$G

9、PGSV,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,31,04,30,244,24,08,12,207,27,09,06,

10、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_InitTypeDef GPIO_InitStructure;USART_InitTypeD

11、ef 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 = GPIO_Speed_50MHz; /IO口速度 GPI

12、O_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /IO口复用推挽输出 GPIO_Init(GPIOA, &GPIO_InitStructure); /初始化串口1输出IO口 / 定义 USART1 Rx (PA.10)为悬空输入 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; /IO口的第十脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;/IO口悬空输入 GPIO_Init(GPIOA, &GPIO_InitStructure); /初始化串口1输入IO

13、口 /串口参数配置 USART_InitStructure.USART_BaudRate = 4800; /设置波特率为115200 USART_InitStructure.USART_WordLength = USART_WordLength_8b; /设置数据位为8位 USART_InitStructure.USART_StopBits = USART_StopBits_1; /设置停止位为1位 USART_InitStructure.USART_Parity = USART_Parity_No; /无奇偶校验 USART_InitStructure.USART_HardwareFlowC

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

15、.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);int main(void) delay_init(72); GUI_Init(); GUI_SetBkColor(GUI_BLUE); GUI_Clear()

16、; 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 haiba

17、6; /海拔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; /0:结束模式,1:命令模式,2:数据模式u

18、nsigned char buf_full; /1:整句接收完成,相应数据有效。0:缓存数据无效。unsigned char cmd5; /命令类型存储数组unsigned char USART_END;unsigned char newflag = 0;/经纬度转换用/double d;double f;unsigned char d_d;double D_D;unsigned char time_8; /时区转换void gps_deal(void) u8 tmp = 0; if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) /如果是

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

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

21、= 2; mode = 2; seg_count = 0; 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数据接收。GPGGA switch(seg_count) case 2: /纬度处理 if(byte_count 11) WDbyte_count = tmp; WDbyte_count+1

22、 = 0; /解决输出位数过多 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; use_satbyte_count+1 = 0; break; ca

23、se 9: /高度处理 if(byte_count 6) highbyte_count = tmp; break; case 11: /海拔处理 if(byte_count 6) haibabyte_count = tmp; break; break; case 2: /类型2数据接收。GPGSV switch(seg_count) case 3: /天空中的卫星总数 if(byte_count 2) total_satbyte_count = tmp; total_satbyte_count+1 = 0; break; break; case 3: /类型3数据接收。GPRMC switch

24、(seg_count) case 1: if(byte_count 10) /时间处理 timebyte_count = tmp; break; case 2: /定位判断 if(byte_count 1) lock = tmp; break; case 7: /速度处理 if(byte_count 5) speed2byte_count = tmp; / spd_wei=byte_count; break; case 8: /方位角处理 if(byte_count 23) time_8 = time_8 - 24 ; time0 = (time_8 / 10) + 0x30; time1 =

25、 (time_8 - (time_8 / 10) * 10) / 1) + 0x30;/经纬度转换double JWD_AREA(char *jwd) d = atof(jwd) / 100.0; /将JD转换为double d_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_Font8x16);

26、GUI_DispStringAt(status,20,20); GUI_DispCharAt(lock,140,20); TIME_AREA(); GUI_DispStringAt(time,20,40); GUI_DispStringAt(time,140,40); 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); /纬度转换 G

27、UI_DispFloat(D_D,10) ; GUI_DispCharAt(WD_a,120,80); GUI_DispStringAt(use_sat,20,100); GUI_DispStringAt(use_sat,140,100); GUI_DispStringAt(total_sat,20,120); GUI_DispStringAt(total_sat,140,120); GUI_DispStringAt(Elevation,20,140); GUI_DispStringAt(high,140,140); GUI_DispStringAt(high,20,160); GUI_DispStringAt(haiba,140,160); GUI_DispStringAt(Speed,20,180); GUI_DispStringAt(speed2,140,180); GUI_DispStringAt(Direction,20,200); GUI_DispStringAt(angle,140,200); GUI_DispStringAt(OUC AUTOMATION GPS,40,280);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1