求人不如求己!
1、通过截取数据分析,每批数据都是以“$GNGGA”帧开始的,以"$GPTXT"结束。而"$GNGGA"中也有时间数据。从这里取时间,就比漂浮的$GNRMC帧靠谱。
2、长时间的输出,1000秒抓数据发现,999个1PPS,只有996个$GNGGA帧,而且,在第0秒获得一个时钟值,在第999秒再抓一个,居然只有996秒步进,说明它在串口输出的确是有严重的滞后,它没有关注串口输出数据的字节数和速率,仅仅是整批整批的送到发送缓冲区了。
3、之前为了节电,On/Off管脚还是连了的。拉低进休眠,拉高重新工作。
于是解决办法就有了:
A. 隔一段时间(1000/4=250秒=4分钟左右)识别到每批数据的最后一帧"$GPTXT"的时候,拉低On/Off使GP02进入休眠状态;
B. 休眠1分钟后,唤醒它。此时,它的发送缓冲区几乎没有残留数据(进休眠再唤醒,原来发送缓冲区没发出来的数据会接续先发),GPS 开始定位和获取卫星时间并通过串口向外发送。
C. 因为刚开始发送数据,还没有出现各批数据跨出2个1PPS周期的情况,"$GNGGA"肯定在两个1PPS信号之间,那么,在下一个1PPS信号到来的时候,赶紧校时吧!