查看: 2546|回复: 2

【F030 Nucleo】6.北斗&GPS双模定位模块数据的解析

[复制链接]
  • TA的每日心情
    奋斗
    2022-9-16 05:52
  • 签到天数: 1368 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2015-8-25 11:10:48 | 显示全部楼层 |阅读模式
    分享到:
        手上的模块不能闲着,能连接的都连接上。
        一般的定位模块都是通过串口连接,输出NM0183格式的数据,只要在MCU中解析就可以了。
        这款北斗&GPS模块也不例外,只比普通的GPS模块多输出个BD开头的数据而已,格式都是一样的。
    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    struct GPS
    {
    char AV; //'A|V'
    char DT[13]; //"150622181500"
    float Lon; //"117.3185"
    float Lat; //"39.0940\0"
    char EWNS[3]; //"E|W & N|S"
    float Speed; //"xxx.xx\0" *1.852
    float Dir; //"xxx.x\0"
    float High; //"\0"
    unsigned char Star; //"0~F"
    unsigned char ANT; //'0'正常;'1'短路;'2'开路
    } gpsData;
    float LonLat(char* ll, int len)
    {
    //printf("%s - %d", ll, len);
    char* s;
    memcpy(s, ll, len);
    //printf("%s", s);
    printf("%f", atof(s));
    return atof(s);
    }
    float Speed(char* speed, int len)
    {
    char* s = memmove(s, speed, len);
    return atof(s);
    }
    void RMC(char* data)
    {
    char* s = NULL;
    int len = 0;
    //Time
    char* p = strstr(data, ",");
    int i = p - data + 1;
    gpsData.DT[6] = data; i++;
    gpsData.DT[7] = data; i++;
    gpsData.DT[8] = data; i++;
    gpsData.DT[9] = data; i++;
    gpsData.DT[10] = data; i++;
    gpsData.DT[11] = data; i++;
    //AV
    p = strstr(data + i, ",");
    i = p - data + 1;
    gpsData.AV = data; i++;
    //Lat
    p = strstr(data + i, ",");
    i = p++ - data + 1;
    s = strstr(p + 1, ",");
    len = s - p;
    gpsData.Lat = LonLat(p, len);
    printf("%f", gpsData.Lat);
    //NS
    p = strstr(data + i, ",");
    i = p++ - data + 1;
    gpsData.EWNS[1] = data; i++;
    //Lon
    p = strstr(data + i, ",");
    i = p++ - data + 1;
    s = strstr(p + 1, ",");
    len = s - p;
    gpsData.Lon = LonLat(p, len);
    //EW
    p = strstr(data + i, ",");
    i = p++ - data + 1;
    gpsData.EWNS[0] = data; i++;
    //Speed
    p = strstr(data + i, ",");
    i = p++ - data + 1;
    s = strstr(p + 1, ",");
    len = s - p;
    gpsData.Speed = Speed(p, len);
    //Dir
    p = strstr(data + i, ",");
    i = p++ - data + 1;
    s = strstr(p + 1, ",");
    len = s - p;
    gpsData.Dir = atof(s);
    //Date
    p = strstr(data + i, ",");
    i = p++ - data + 1;
    memmove(&gpsData.DT[4], data + i, 2); i += 2;
    memmove(&gpsData.DT[2], data + i, 2); i += 2;
    memmove(&gpsData.DT[0], data + i, 2); i += 2;
    printf("%f", gpsData.Lon);
    }
    void GGA(char* data)
    {
    }
    void GSA(char* data)
    {
    }
    void GSV(char* data)
    {
    }
    void TXT(char* data)
    {
    }
    void TD3020C(char* data)
    {
    switch (data[1])
    {
    case 'G': //GNRMC; GNGGA; GPGSA; GPGSV; GNTXT;
    switch (data[2])
    {
    case 'N': //GNRMC; GNGGA; GNTXT;
    switch (data[4])
    {
    case 'M': //GNRMC
    RMC(data);
    break;
    case 'G': //GNGGA
    GGA(data);
    break;
    case 'S': //GPGSA
    GSA(data);
    break;
    }
    break;
    case 'P': //GPGSA; GPGSV;
    switch (data[5])
    {
    case 'A': //GPGSA
    GSA(data);
    break;
    case 'V': //GPGSV
    GSV(data);
    break;
    }
    break;
    }
    break;
    case 'B': //BDGSA; BDGSV;
    switch (data[5])
    {
    case 'A': //BDGSA
    GSA(data);
    break;
    case 'V': //BDGSV
    GSV(data);
    break;
    }
    break;
    }
    }
    int main(void)
    {
    TD3020C(GPSData);
    }

        解析的函数封装到一个文件里了,不过只需要调用一个TD3020C(GPSData);就够了。
        GPSData就是串口获取到的定位模块的数据,解析后的结果保存在struct GPS里。
        可以在程序的任何地方调用。

    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-6-22 23:57
  • 签到天数: 943 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2015-8-25 18:21:25 | 显示全部楼层
    不错 ,北斗 GPS 解析  !
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-9-16 05:52
  • 签到天数: 1368 天

    连续签到: 1 天

    [LV.10]以坛为家III

     楼主| 发表于 2015-8-26 07:15:42 | 显示全部楼层
    franki 发表于 2015-8-25 18:21
    不错 ,北斗 GPS 解析  !

    谢谢         
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-19 02:19 , Processed in 0.129729 second(s), 19 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.