串口接收gps多组数据并解析

   最近做一个关于交通灯的项目,利用stm32串口接收gps数据并解析显示。刚开始用的原子的例程解析一条数据没啥问题,但同时解析多条数据就不行了,可能我说的不太清楚,直接上例子!

   因为用到的一般都是GNRMC,所以就设置了gps模块每次只发送这一条数据:

   $GNRMC,062709.200,A,3239.136368,N,11043.907211,E,0.46,101.58,190118,,,A*7E

 但是问题来了,现在我用别的设备发送数据,每次发送多条(条数还不确定),如:

 $GNRMC,062709.800,A,3239.136303,N,11043.907298,E,0.46,102.00,190118,,,A*76
 $GNRMC,062710.000,A,3239.136282,N,11043.907325,E,0.46,102.13,190118,,,A*7B

 可能是2条!

$GNRMC,062709.800,A,3239.136303,N,11043.907298,E,0.46,102.00,190118,,,A*76
$GNRMC,062710.000,A,3239.136282,N,11043.907325,E,0.46,102.13,190118,,,A*7B
$GNRMC,062710.200,A,3239.136255,N,11043.907350,E,0.46,101.92,190118,,,A*7B
$GNRMC,062710.400,A,3239.136234,N,11043.907378,E,0.46,101.31,190118,,,A*79
可能是4条,或者更多!!!

这样原子的gps例程解析就不正确了!原子用到的 strstr   函数总是返回的第一个相同字符地址指针,每次buf无论接收多少组数据,解析出来的都是第一组数据。

为了节约时间,最大限度的少改代码,通过修改strstr函数!!!

p1=(u8*)strstr((const char *)buf,"$GNRMC");这个指针永远指向buf的首地址,

修改位为:p1=(u8*)strstr(p1,"$GNRMC");执行过一次后每次p1都要加1,这样扫描到第二个“$GNRMC”并返回指针给p1!!

串口接收gps多组数据并解析_第1张图片

后续还有啥问题再补上!!!





你可能感兴趣的:(嵌入式,字符串)