一、在使用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>(校验值)回车换行
$GPRMC,092427.604,V,4002.1531,N,11618.3097,E,0.000,0.00,280814,E,N*08为例,各字段的含义如下:
三、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个数据后会调试好,接收正常数据。