OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4482|回复: 2

GPS模块中GPGSV数据为什么要循环发送四次?

[复制链接]

3

主题

9

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2020-10-13
在线时间
6 小时
发表于 2021-7-10 11:39:54 | 显示全部楼层 |阅读模式
1金钱
void NMEA_GPGSV_Analysis(nmea_msg *gpsx,u8 *buf)
{
        u8 *p,*p1,dx;
        u8 len,i,j,slx=0;
        u8 posx;            
        p=buf;
        p1=(u8*)strstr((const char *)p,"$GPGSV");
        len=p1[7]-'0';                                                                //得到GPGSV的条数,都是用ASCII进行编码
        posx=NMEA_Comma_Pos(p1,3);                                         //得到可见卫星总数
        if(posx!=0XFF)gpsx->svnum=NMEA_Str2num(p1+posx,&dx);
        for(i=0;i<len;i++)
        {         
                p1=(u8*)strstr((const char *)p,"$GPGSV");  
                for(j=0;j<4;j++)
                {          
                        posx=NMEA_Comma_Pos(p1,4+j*4);
                        if(posx!=0XFF)gpsx->slmsg[slx].num=NMEA_Str2num(p1+posx,&dx);        //得到卫星编号
                        else break;
                        posx=NMEA_Comma_Pos(p1,5+j*4);
                        if(posx!=0XFF)gpsx->slmsg[slx].eledeg=NMEA_Str2num(p1+posx,&dx);//得到卫星仰角
                        else break;
                        posx=NMEA_Comma_Pos(p1,6+j*4);
                        if(posx!=0XFF)gpsx->slmsg[slx].azideg=NMEA_Str2num(p1+posx,&dx);//得到卫星方位角
                        else break;
                        posx=NMEA_Comma_Pos(p1,7+j*4);
                        if(posx!=0XFF)gpsx->slmsg[slx].sn=NMEA_Str2num(p1+posx,&dx);        //得到卫星信噪比
                        else break;
                        slx++;          
                }   
                p=p1+1;//切换到下一个GPGSV信息
        }   
}

最佳答案

查看完整内容[请看2#楼]

这是由GPGSV语句的格式决定的,一句语句包含四颗卫星的信息。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2020-10-13
在线时间
6 小时
 楼主| 发表于 2021-7-10 11:39:55 | 显示全部楼层
这是由GPGSV语句的格式决定的,一句语句包含四颗卫星的信息。
回复

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2020-10-13
在线时间
6 小时
 楼主| 发表于 2021-7-10 12:00:25 | 显示全部楼层
void NMEA_GPGSA_Analysis(nmea_msg *gpsx,u8 *buf)
{
        u8 *p1,dx;                         
        u8 posx;
        u8 i;   
        p1=(u8*)strstr((const char *)buf,"$GPGSA");
        posx=NMEA_Comma_Pos(p1,2);                                                                //得到定位类型
        if(posx!=0XFF)gpsx->fixmode=NMEA_Str2num(p1+posx,&dx);       
        for(i=0;i<12;i++)                                                                                //得到定位卫星编号
        {
                posx=NMEA_Comma_Pos(p1,3+i);                                         
                if(posx!=0XFF)gpsx->possl[i]=NMEA_Str2num(p1+posx,&dx);
                else break;
        }                                  
        posx=NMEA_Comma_Pos(p1,15);                                                                //得到PDOP位置精度因子
        if(posx!=0XFF)gpsx->pdop=NMEA_Str2num(p1+posx,&dx);  
        posx=NMEA_Comma_Pos(p1,16);                                                                //得到HDOP位置精度因子
        if(posx!=0XFF)gpsx->hdop=NMEA_Str2num(p1+posx,&dx);  
        posx=NMEA_Comma_Pos(p1,17);                                                                //得到VDOP位置精度因子
        if(posx!=0XFF)gpsx->vdop=NMEA_Str2num(p1+posx,&dx);  
}
//分析GPRMC信息
//gpsx:nmea信息结构体
//buf:接收到的GPS数据缓冲区首地址
还有这个为什么循环12次?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 02:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表