2020/10/23 GPS的数据格式学习

GPS的数据格式学习

一、在使用GPS的通过串口向电脑发送数据的时候,要注意GPS数据线的连接;
1.1 VCC接VCC;(VCC表示接电源正极)
1.2 GND接GND;(GND表示接地或接电源负极)
1.3 TX接RX;(注:RX表示接受数据)
1.4 RX接TX;(注:TX表示发送数据)

1.5 要注意GPS的供电对数据传输的影响;

二、GPS数据格式解析
2.1 GPS发送数据以行为单位,数据格式如下:“$信息类型,x,x,x,x,x,x,x,x,x,x,x,x,x” 每行以回车和换行结束

2.2 本次只运用GPRMC(推荐定位信息)的数据格式:
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>(校验值)回车换行
2020/10/23 GPS的数据格式学习_第1张图片

$GPRMC,092427.604,V,4002.1531,N,11618.3097,E,0.000,0.00,280814,E,N*08为例,各字段的含义如下:
2020/10/23 GPS的数据格式学习_第2张图片
三、GPS模块与单片机的交互
3.1 GPS模块通过串口向单片机发送GPS数据,并由单片机存储在串口缓冲区中;
3.2 GPS模块发送数据进行简易处理(区分GPS中的有效数据和无效数据),源代码:
(注:此代码只用于学习,若想具体实现得基于具体代码的头文件)

while(1)
	{
     
		//UART3RecvPos表示串口缓冲区大小
        //SystemTimeInTU表示系统时间,每125us加1
		//UART3LastRecvDataTimeIN125US表示
		//_MS(10)表示将10乘以8
		if(UART3RecvPos>5&&USART3_RECV_BUF[UART3RecvPos-1]=='\n')//要判断GPS传输过来的数据是不是一段健康的数据
		{
     
			//if((u16)(USART3_RECV_BUF[5]=='C')&&(u16)(USART3_RECV_BUF[0]=='$')&&(u16)(USART3_RECV_BUF[1]=='G')&&(u16)(USART3_RECV_BUF[2]=='P')&&(u16)(USART3_RECV_BUF[3]=='R')&&(u16)(USART3_RECV_BUF[4]=='M'))
			if(USART3_RECV_BUF[0]=='$'&&(USART3_RECV_BUF[5]=='C'))
			{
     
				
			TotalRecvGPSData++;
			//显示串口接收缓冲区大小
			len=0;
			//sprintf函数用于将函数中间参数的字符串复制到第一个参数的地址空间,且返回值是字符串的长度
			//因为len=0,string+len是字符数组的首地址			
			//“RX:%d“是要被复制到字符数组的字符串
			//UART3RecvPos是表示串口3的接收韩冲区大小的变量
			len+=sprintf(string+len,"RX3:%d",UART3RecvPos);
			
			//0,56分别代表x,y坐标
			//string代表要显示的字符串(数组)
			//FRONT_EN_5X8表示字体格式
			//len表示要显示的字符串长度
			//0代表显示的字符串没有黑底格式,而非0的u8型数字有黑底格式
			LCDPrintStringLen(0,56,string,FRONT_EN_5X8,len,0);
			
			//显示串口接收到的数据(仅显示串口3接收的前20个字节)
			//USART3_RECV_BUF代表串口3的接收缓存数组,数组长度为1000
			//FRONT_EN_5X8表示字体格式
			//25表示字符串长度
			//0代表显示的字符串没有黑底格式,而非0的u8型数字有黑底格式
			LCDPrintStringLen(0,48,USART3_RECV_BUF,FRONT_EN_5X8,40,0);
			
			//打印串口3的接收缓冲区的大小
			len=0;
			len+=sprintf(string1+len,"UART3RecvPos:%d",UART3RecvPos);
			LCDPrintStringLen(0,24,string1,FRONT_EN_5X8,len,0);
			
			
			//GPS数据格式解析
			for(;i<=100;i++)
		  {
     
				 if(USART3_RECV_BUF[i]==',')
				{
     
					  sum++;
				}	
				 if(sum==2&&USART3_RECV_BUF[i+1]=='A')
				{
     
						use++;
						break;
				}
				 else
			  {
     
						nouse++;
						break;
			  }
		  }
			data++;
			//格式化输出	
			len=0;
			len+=sprintf(String3+len,"use:%d/%d  ",use,data);			
			LCDPrintStringLen(0,40,String3,FRONT_EN_5X8,len,0);
			//格式化输出
			len=0;
			len+=sprintf(String2+len,"nouse:%d/%d  ",nouse,data);			
			LCDPrintStringLen(0,32,String2,FRONT_EN_5X8,len,0);
			
			//将串口3的接收缓冲区清0
			UART3RecvPos=0;
			}
			else
			{
     
				//将串口3的接收缓冲区清0
				UART3RecvPos=0;
			}
		}

3.3 我们现在使用的是使能GPS模块,意思是在GPS开机后会有一一段时间GPS模块需要调试,然后GPS才会将卫星发送的数据接收下来,本GPS模块大概在接受325个数据后会调试好,接收正常数据。

你可能感兴趣的:(gps)