https://blog.csdn.net/m0_48012049/article/details/107967387
https://baike.baidu.com/item/NMEA#5(推荐)
GN、GP、BD 分别代表双模模式、GPS 模式、北斗模式
例如:
1 , $GNGGA,084852.000,2236.9453,N,11408.4790,E,1,05,3.1,89.7,M,0.0,M,,*48 // xxGGA(GPS 定位信息)
双模模式下,UTC时间: 08 : 48 : 52,北纬(N):2236.9453,东经(E):11408.4790 ;
0->未定位,1->无差分,2->有差分,3->PPS ;
卫星数量:0~12
水平精度衰减因子:0.5~99.9 ;
海平面高度:-999.9~9999.9 ;
。。。
2 , $GNGLL,2236.9453,N,11408.4790,E,084852.000,A,A*4C //地理定位信息
3 , $GPGSA,A,3,10,18,31,,,,,,,,,,6.3,3.1,5.4*3E //当前卫星信息
$BDGSA,A,3,06,07,,,,,,,,,,,6.3,3.1,5.4*24
4 , $GPGSV,3,1,09,10,78,325,24,12,36,064,,14,26,307,,18,67,146,27*71 //可见卫星信息
$GPGSV,3,2,09,21,15,188,,24,13,043,,25,55,119,,31,36,247,30*7F
$GPGSV,3,3,09,32,42,334,*43
$BDGSV,1,1,02,06,68,055,27,07,82,211,31*6A
5, $GNRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*<13><CR><LF>
<1> UTC(Coordinated Universal Time)时间,hhmmss(时分秒)格式
<2> 定位状态,A=有效定位,V=无效定位
<3> Latitude,纬度ddmm.mmmm(度分)格式(前导位数不足则补0)
<4> 纬度半球N(北半球)或S(南半球)
<5> Longitude,经度dddmm.mmmm(度分)格式(前导位数不足则补0)
<6> 经度半球E(东经)或W(西经)
<7> 地面速率(000.0~999.9节,Knot,前导位数不足则补0)
<8> 地面航向(000.0~359.9度,以真北为参考基准,前导位数不足则补0)
<9> UTC日期,ddmmyy(日月年)格式
<10> Magnetic Variation,磁偏角(000.0~180.0度,前导位数不足则补0)
<11> Declination,磁偏角方向,E(东)或W(西)
<12> Mode Indicator,模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)
<13> 校验和
6 , $GNVTG,,,,,,,,,M*2D //(地面速度信息)
7 , $GPTXT,01,01,01,ANTENNA OK*35 //天线状态输出,Ok 代表天线已经检测到,open 代表天线断开
//==============================================================================================================
(一),冷启动是指在一个陌生的环境下启动GPS 直到GPS 和周围卫星联系并且计算出坐标的启动过程。以下几种情况开机均属冷启动:
1、初次使用时;
2、电池耗尽导致星历信息丢失时;
3、关机状态下将接收机移动1000 公里以上距离。
(二),温启动是指距离上次定位时间超过2 个小时的启动,搜星定位时间介于冷启动和热启动之间。如果您前一日使用过GPS 定位,那么次日的第一次启动就属于温启
动,启动后会显示上次的位置信息。因为上次关机前的经纬度和高度已知,但由于关机时间过长,星历发生了变化,以前的卫星接受不到了,参数中的若干颗卫
星已经和GPS 接收机失去了联系,需要继续搜星补充位置信息,所以搜星的时间要长于热启动,短于冷启动。
(三),热启动是指在上次关机的地方没有过多移动启动GPS,但距离上次定位时间必须小于2小时。
//==============================================================================================================
指令合集:
波特率=4800bps:$PCAS01,0*1C
波特率=9600bps:$PCAS01,1*1D
波特率=19200bps:$PCAS01,2*1E
波特率=38400bps:$PCAS01,3*1F
波特率=57600bps:$PCAS01,4*18
波特率=115200bps:$PCAS01,5*19
重新上电会丢失配置,此时可以使用$PCAS00*01对配置进行保存
//=============================================================================================================
/*测试信息:
$GNGGA,084852.000,2236.9453,N,11408.4790,E,1,05,3.1,89.7,M,0.0,M,,*48 $GNGLL,2236.9453,N,11408.4790,E,084852.000,A,A*4C $GPGSA,A,3,10,18,31,,,,,,,,,,6.3,3.1,5.4*3E $BDGSA,A,3,06,07,,,,,,,,,,,6.3,3.1,5.4*24 $GPGSV,3,1,09,10,78,325,24,12,36,064,,14,26,307,,18,67,146,27*71 $GPGSV,3,2,09,21,15,188,,24,13,043,,25,55,119,,31,36,247,30*7F $GPGSV,3,3,09,32,42,334,*43 $BDGSV,1,1,02,06,68,055,27,07,82,211,31*6A $GNRMC,084852.000,A,2236.9453,N,11408.4790,E,0.53,292.44,141216,,,A*75 $GNVTG,292.44,T,,M,0.53,N,0.98,K,A*2D $GNZDA,084852.000,14,12,2016,00,00*48 $GPTXT,01,01,01,ANTENNA OK*35
*/
(一),添加GPS头文件;
(二),nmea_msg cs_str01; //定义结构体
(三),打印输出
NMEA_GNGGA_Analysis(&cs_str01,(uint8_t*)ReceiveBuff);
NMEA_GNRMC_Analysis(&cs_str01,(uint8_t*)ReceiveBuff);
printf("日期:%d-%d-%d\n",cs_str01.utc.year,cs_str01.utc.month,cs_str01.utc.date);
printf("时间:%d-%d-%d\n",cs_str01.utc.hour,cs_str01.utc.min,cs_str01.utc.sec);
printf("纬度:%f 经度:%f\n",cs_str01.latitude/100000.0f,cs_str01.longitude/100000.0f);
printf("%d-%d-%.1f\n",cs_str01.gpssta,cs_str01.posslnum,cs_str01.altitude/10.0f);
注意:冷启动,先显示时间,最后出现经纬度。如果搜星太少,则只有时间
//=============================================================================================================