查看: 3376|回复: 6

[分享] [mbed]k64f读取串口GPS数据

[复制链接]
  • TA的每日心情
    奋斗
    2018-7-24 14:23
  • 签到天数: 98 天

    连续签到: 1 天

    [LV.6]常住居民II

    14

    主题

    419

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2236
    最后登录
    2024-9-19
    发表于 2016-8-12 17:03:47 | 显示全部楼层 |阅读模式
    本帖最后由 samplecode 于 2016-8-12 17:06 编辑

    [color=rgba(0, 0, 0, 0.6)]使用FRDM-K64F开发板驱动NEO-6M串口GPS模块
    串口连的下边PTC15,PTC15
    GPS gpsAda(PTC15, PTC14, 9600);
    模块靓照

    2.GPGGA语句解析GPGGA,GPS固定数据输出语句($GPGGA),这是一帧GPS定位的主要数据,也是使用最广的数据。
    $GPGGA 语句包括17个字段:语句标识头,世界时间,纬度,纬度半球,经度,经度半球,定位质量指示,使用卫星数量,水平精确度,海拔高度,高度单位,大地水准面高度,高度单位,差分GPS数据期限,差分参考基站标号,校验和结束标记(用回车符和换行符),分别用14个逗号进行分隔。该数据帧的结构及各字段释义如下:
    $GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*xx
    $GPGGA:起始引导符及语句格式说明(本句为GPS定位数据);
    • <1> UTC时间,格式为hhmmss.sss;
    • <2> 纬度,格式为ddmm.mmmm(第一位是零也将传送);
    • <3> 纬度半球,N或S(北纬或南纬)
    • <4> 经度,格式为dddmm.mmmm(第一位零也将传送);
    • <5> 经度半球,E或W(东经或西经)
    • <6> GPS状态, 0初始化, 1单点定位, 2码差分, 3无效PPS, 4固定解, 5浮点解, 6正在估算 7,人工输入固定值, 8模拟模式, 9WAAS查分
    • <7> 使用卫星数量,从00到12(第一个零也将传送)
    • <8> 水平精度因子,0.5到99.9
    • <9> 天线离海平面的高度,-9999.9到9999.9米
    • M 指单位米
    • <10> 大地水准面高度,-9999.9到9999.9米
    • M 指单位米
    • <11> 差分GPS数据期限(RTCM SC-104),最后设立RTCM传送的秒数量,如不是差分定位则为空
    • <12> 差分参考基站标号,从0000到1023(首位0也将传送)。

      • 语句结束标志符
    • xx 从$开始到*之间的所有ASCII码的异或校验和
    • 回车
    • 换行


    3.GPS库
    部分代码
    主程序;main.cpp
    1. /* Example showing how to hook up to different GPS modules (GlobalSat neo-6m)*/
    2. #include "mbed.h"
    3. #include "GPS.h"
    4. //create usb serial
    5. Serial pc(USBTX, USBRX);
    6. //creat gps serial baud is 9600
    7. GPS gpsAda(PTC15, PTC14, 9600);

    8. int main()
    9. {
    10.     while (1) {
    11.         if(gpsAda.sample()){
    12.           pc.printf("%f\t%c\t%f\t%c\t%f\t%f\t%f\n\r",gpsAda.longitude, gpsAda.ns,gpsAda.latitude,gpsAda.ew, gpsAda.alt, gpsAda.geoid, gpsAda.time);
    13.           //print beijing time
    14.                   pc.printf("%d:%d:%d",gpsAda.hour,gpsAda.minute,gpsAda.seconed);
    15.         }
    16.   }

    17. }
    复制代码


    GPS库的sample()方法

    1. int GPS::sample()
    2. {

    3.     int lock;

    4.     while(1) {
    5.                 //调用函数读取一行数据
    6.         getline();
    7.                 //用sscanf()检查是不是GPGGA数据
    8.         // Check if it is a GPGGA msg (matches both locked and non-locked msg)
    9.         if(sscanf(msg, "GPGGA,%f,%f,%c,%f,%c,%d,%d,%f,%f,%c,%f", &time, &latitude, &ns, &longitude, &ew, &lock, &sats, &hdop, &alt, &unit, &geoid) >= 1) {
    10.             //看看有没有找到卫星
    11.                         if(!lock) {
    12.                 time = 0.0;
    13.                 longitude = 0.0;
    14.                 latitude = 0.0;
    15.                 sats = 0;
    16.                 hdop = 0.0;
    17.                 alt = 0.0;
    18.                 geoid = 0.0;
    19.                 return 0;
    20.             } else {
    21.                 //GPGGA format according http://aprs.gids.nl/nmea/#gga
    22.                 // time (float), lat (f), (N/S) (c), long (f), (E/W) (c), fix (d), sats (d),
    23.                 // hdop (float), altitude (float), M, geoid (float), M, , ,
    24.                 //GPGGA,092010.000,5210.9546,N,00008.8913,E,1,07,1.3,9.7,M,47.0,M,,0000*5D
    25.                                 //转换为北京时间,原来的是UTC时间,utc+8就是北京时间,%取余运算
    26.                 //format utc time to beijing time,add 8 time zone
    27.                 time = time + 80000.00f;
    28.                 hour = int(time) / 10000;
    29.                 minute = (int(time) % 10000) / 100;
    30.                 seconed = int(time) % 100;
    31.             
    32.                 return 1;
    33.             }
    34.         }
    35.     }
    36. }
    复制代码

    串口输出结果
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    15311.202148        N        3235.849365        E        52.099998        -9.000000        162005.000000
    16:20:5
    15311.202148        N        3235.849121        E        51.500000        -9.000000        162006.000000
    16:20:6
    15311.202148        N        3235.849121        E        50.299999        -9.000000        162007.000000
    16:20:7
    15311.202148        N        3235.848877        E        49.200001        -9.000000        162008.000000
    16:20:8
    15311.202148        N        3235.848633        E        48.599998        -9.000000        162009.000000
    16:20:9
    15311.203125        N        3235.848633        E        47.900002        -9.000000        162010.000000
    16:20:10


    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-2-13 08:29
  • 签到天数: 20 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    531

    主题

    2048

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    210
    最后登录
    2018-8-14
    发表于 2016-8-12 17:16:33 | 显示全部楼层
    感谢分享
    签到 签到
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2020-1-12 00:23
  • 签到天数: 745 天

    连续签到: 1 天

    [LV.9]以坛为家II

    27

    主题

    1万

    帖子

    26

    金牌会员

    Rank: 6Rank: 6

    积分
    6868
    最后登录
    2020-7-15
    发表于 2016-8-12 19:40:42 | 显示全部楼层
    学习了,赞!
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2017-8-1 11:36
  • 签到天数: 96 天

    连续签到: 1 天

    [LV.6]常住居民II

    2

    主题

    670

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1543
    最后登录
    2017-11-16
    发表于 2016-8-13 12:53:08 | 显示全部楼层
    请问一下K64f两旁的接插件能拔下来吗?里面有插针吗?
    签到。。。。。。。。。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2020-10-28 18:00
  • 签到天数: 24 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    24

    主题

    526

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3299
    最后登录
    2021-10-14
    发表于 2016-8-13 14:13:46 | 显示全部楼层
    黑灰灰 发表于 2016-8-13 12:53
    请问一下K64f两旁的接插件能拔下来吗?里面有插针吗?

    试了,貌似是不可以拔下来的
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    318

    帖子

    0

    高级会员

    Rank: 4

    积分
    880
    最后登录
    2018-2-27
    发表于 2016-8-13 21:38:31 | 显示全部楼层
    开发板是领的吗                     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-14 16:49
  • 签到天数: 296 天

    连续签到: 1 天

    [LV.8]以坛为家I

    241

    主题

    2239

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    4473
    最后登录
    2020-4-14
    发表于 2016-8-13 22:39:56 | 显示全部楼层
    谢谢资料共享,学习了
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-18 06:10 , Processed in 0.094050 second(s), 24 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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