U-BLOX GPS 模块及GPRMC指令解析

UBLOX芯片 M8T几个指令总结 每一行,从行头(index=0)开始算,第 6、7 位代表 卫星CN0值,就是右侧图表的 CN0 列,直接把 十六进制换成十进制整数,就可以使用。每一行,从行头(index=0)开始算,第 3、4 位代表 卫星编号,就是右侧图表的 SV 列,直接把 十六进制换成十进制整数,就可以使用。第33位 代表 卫星数量,在 示例中 显示为 0A ,直接把 十六进制换成十进制整数,就可以使用;每一行,从行头(index=0)开始算,第 0、1 位代表 卫星类型,03 代表 北斗,参照左侧的图表。 阅读详情

本文转自 iYouth博文

http://www.cnblogs.com/pingwen/p/5225461.html

【正文部分】

受朋友所托,调试一款GPS模块,该模块是UBLOX的NEO-6M GPS模组。想到用这款GPS的人较多,自己日后也有可能在用到这个模块,就写下这份笔记。


1. 介绍

基本信息如下:

1, 模块采用U-BLOX NEO-6M模组,体积小巧,性能优异。

2, 模块增加放大电路,有利于无缘陶瓷天线快速搜星。

3, 模块可通过串口进行各种参数设置,并可保存在EEPROM,使用方便。

4, 模块自带SMA接口,可以连接各种有源天线,适应能力强。

5, 模块兼容3.3V/5V电平,方便连接各种单片机系统。

6, 模块自带可充电后备电池,可以掉电保持星历数据。

看到这里,就可以知道,这个模块是高度集成的,有点类似于西门子华为等公司的GPRS模块,基本上就是一个小的系统,用户只需要用AT命令通过串口通信就可以完成所有工作。那么这款模块的使用,其实就是字符串的解析工作了。


2. 通信协议

GPS模块采用NMEA 0183协议,NMEA 0183是美国国家海洋电子协会(National Marine Electronics Association)为海用电子设备制定的标准格式。目前业已成了GPS导航设备统一的RTCM(Radio Technical Commission for Maritime services)标准协议。

NMEA-0183协议采用ASCII码来传递GPS定位信息,我们称之为帧。

帧格式形如:$aaccc,ddd,ddd,„,ddd*hh(CR)(LF)

1、“$”:帧命令起始位

2、aaccc:地址域,前两位为识别符(aa),后三位为语句名(ccc)

3、ddd„ddd:数据

4、“*”:校验和前缀(也可以作为语句数据结束的标志)

5、hh:校验和,$与*之间所有字符ASCII码的校验和(各字节做异或运算,得到

校验和后,再转换16进制格式的ASCII字符)

6、(CR)(LF):帧结束,回车和换行符

在一般的项目中,最常用的指令是第4个,即GPRMC(推荐定位信息,Recommended Minimum Specific GPS/Transit Data),$GPRMC语句的基本格式如下:

$GPRMC,(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)*hh(CR)(LF)

(1) UTC时间,hhmmss(时分秒)

(2) 定位状态,A=有效定位,V=无效定位

(3) 纬度ddmm.mmmmm(度分)

(4) 纬度半球N(北半球)或S(南半球)

(5) 经度dddmm.mmmmm(度分)

(6) 经度半球E(东经)或W(西经)

(7) 地面速率(000.0~999.9节)

(8) 地面航向(000.0~359.9度,以真北方为参考基准)

(9) UTC日期,ddmmyy(日月年)

(10)磁偏角(000.0~180.0度,前导位数不足则补0)

(11) 磁偏角方向,E(东)或W(西)

(12) 模式指示(A=自主定位,D=差分,E=估算,N=数据无效)

举例如下:

$GPRMC,023543.00,A,2308.28715,N,11322.09875,E,0.195,,240213,,,A*78

3. PC端显示数据

GPS模块有一个PC配置软件,叫做u-Center,可以对模块进行参数设置,然后保存到EEPROM,其实也可以通过单片机串口通信进行设置,但是PC端设置更加人性化,可以立刻看到结果。


打开GPS模块之后,接上u-Center软件,可以看到如下数据。


$GPGSV,2,2,08,21,15,076,,23,52,270,,26,50,050,,27,52,179,*7D

$GPRMC,132043.00,V,,,,,,,120116,,,N*7F

$GPVTG,,,,,,,,,N*30

$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30

$GPGSV,2,1,08,03,00,230,,07,02,301,,08,24,198,,16,72,000,*7B

$GPGSV,2,2,08,21,15,076,,23,52,270,,26,50,050,,27,52,179,*7D

$GPRMC,132044.00,V,,,,,,,120116,,,N*78

$GPVTG,,,,,,,,,N*30

$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30

$GPGSV,2,1,08,03,00,230,,07,02,301,,08,24,198,,16,72,000,*7B

$GPGSV,2,2,08,21,15,076,,23,52,270,25,26,50,050,,27,52,179,*7A

$GPRMC,132045.00,V,,,,,,,120116,,,N*79

$GPVTG,,,,,,,,,N*30

$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30

$GPGSV,2,1,08,03,00,230,,07,02,301,,08,24,198,,16,72,000,*7B

$GPGSV,2,2,08,21,15,076,,23,52,270,,26,50,050,,27,52,179,*7D

$GPRMC,132046.00,V,,,,,,,120116,,,N*7A

$GPVTG,,,,,,,,,N*30

$GPGSV,2,1,08,03,00,230,,07,02,301,,08,24,198,,16,72,000,*7B

$GPGSV,2,2,08,21,15,076,07,23,52,270,20,26,50,050,,27,52,179,*78

$GPRMC,132049.00,V,,,,,,,120116,,,N*75

$GPRMC,133300.00,V,,,,,,,120116,,,N*7A

$GPRMC,133301.00,V,,,,,,,120116,,,N*7B

$GPRMC,133302.00,V,,,,,,,120116,,,N*78

$GPRMC,133303.00,V,,,,,,,120116,,,N*79

$GPRMC,133304.00,V,,,,,,,120116,,,N*7E

$GPRMC,133305.00,V,,,,,,,120116,,,N*7F

$GPRMC,133306.00,A,3949.63075,N,11616.48616,E,0.513,,120116,,,A*7A

$GPRMC,133307.00,A,3949.63025,N,11616.48614,E,1.053,,120116,,,A*7C

$GPRMC,133308.00,A,3949.63002,N,11616.48641,E,1.101,,120116,,,A*70

…………


4. PC端软件配置

     GPS有7种指令数据输出,如果我们只需要当前经纬度的话,可以屏蔽其他的数据。如果不屏蔽的话,MCU处理的时候,会不停的收到不需要的指令,降低MCU效率。

使用软件配置,[Config]-->[Configuration], 可以选择显示哪些项目,这里只保留GPRMC指令信息输出,然后保存。界面显示如下:


5. 数据解析

     相对于MCU的处理速度,GPS定位数据更新几乎可以认为是缓慢变化的信号,每秒都会输出推荐位置信息,但是即使丢掉几个也不会影响定位准确性。因此可以使用中断循环buffer来接收GPS输出的串口数据,然后在需要的地方读取buffer,对数据实现一次检索,找到一个有用的GPS定位数据。



    因为实际收到的数据有不完整的,或者无效的定位信息,也有串口接收循环buffer造成的覆盖数据,因此上面还校验了数据长度,以及一个标志字符串到另一个字符串直接的长度。上面处理的基本思想是:找到"$GPRMC,"帧头,然后找到代表定位信息有效的字符",A,",最后找到帧尾",A*"。

    实际使用中,发现没有加上校验也可以很有效的工作,但是为了保证数据安全,最后的异或校验还有应该有的。

/*******************************************************************************

* Function Name  :

* Description    : 对GPRMC数据包进行解析,找到经纬度数据

* Input          :  

* Output         :  

* Return         :  

*******************************************************************************/

uint8_t read_gps_data(uint8_t *gps_buf, uint8_t frame_len, uint8_t *weidu, uint8_t *jindu)

{

    uint8_t *weidu_s = NULL;

    uint8_t *weidu_o = NULL;

    uint8_t *jingdu_o = NULL;

    uint8_t rtn =0;

    //GPRMC,133735.00,A,3949.63893,N,11616.48419,E,0.296,,120116,,,A*79

    weidu_s  = strstr(GPS_Frame_Buf, ",A,");

    weidu_o  = strstr(GPS_Frame_Buf, ",N,");

    jingdu_o = strstr(GPS_Frame_Buf, ",E,");

    if((weidu_s == NULL) || (weidu_o == NULL) ||(jingdu_o == NULL) )

    {

        rtn = FALSE;

    }

    else

    {

         memset(weidu_buf,0,sizeof(weidu_buf));

         memset(jindu_buf,0,sizeof(jindu_buf));

         memcpy(weidu_buf, weidu_s+3, (weidu_o-weidu_s-3));

         memcpy(jindu_buf, weidu_o+3, (jingdu_o-weidu_o-3));

         printf("rn---------------------------------------");

         printf("rnGet GPS Frame:rn%srn", GPS_Frame_Buf);

         printf("rn---------------------------------------");

         rtn = TRUE;

    }

   return rtn;

}

6. 总结

     本文总结了GPS模块的基本使用方法,可以得到经度和纬度信息。对于此类的模块产品,主要工作有两大部分:

     1:模块的熟悉,包括配置和指令的使用,一般可以一边读文档一边跑下demo体验效果;

     2:字符串的解析。

     同样的经验可以应用于很多串口模块。

     例如GPRS模块,蓝牙模块,zigbee模块,TCP模块,CAN模块,485模块。

     这几种产品我都使用过,其基本思路是一样的,调试时候可以先用串口助手模拟MCU来发数据,其实大部分模块都有自己的PC端工具,可以很快的看到效果。

     使用模块可以极大地提升项目效率,但是灵活性和成本上会有所牺牲。另外,由于模块的封闭性,一般都要写很多的异常保护处理来保证产品的正常工作。

基于u-blox模块的GPS协议解析 基于u-blox模块的GPS协议解析 引 言: 地面端的接收器根据卫星发送的信号,实时解算出位置,速度,航线等我们需要的信息,u-blox模块就是被广泛应用的接收器,该模块通过串行接口把这些信息中继到其他设备(如计算机,接收机等),为了确保数据的正确传输,NMEA(国家海洋电子协会)将这种协议标准化,保证这些数据以固定格式进行传输。 数据格式 NMEA协议是以ASCII码进行传输的,以下面这条协议来举例说明: $GPRMC,130303.0,A,4717.115,N,00833.912,E, 阅读详情

相关推荐

组合导航GPGGA、GPRMC和RTCM详细解释

GPGGA、GPRMC 和 RTCM 是在卫星导航领域中常用的概念

行知SLAM 2363

推荐定位信息(GPRMC)

 推荐定位信息(GPRMC)  $GPRMC,,,,,,,,,,,,*hh            UTC时间,hhmmss(时分秒)格式            定位状态,A=有效定位,V=无效定位            纬度ddmm.mmmm(度分)格式(前面的0也将被传输)            纬度半球N(北半球)或S(南半球)            经度dddmm.mmmm(度分)格式(前面

站在巨人的肩膀上 2433

GPS模块/数据包解析/ u-blox/NEO-5Q

一、模块简介    瑞士 u-blox 公司的 NEO-5Q 主芯片,此芯片为多功能独立型 GPS 模组,以 ROM 为基础架构,成本低,体积小,并具有众多特性。 采用u-blox最新的 KickStart 微弱信号攫取技术,能确保采用此模组的设备在任何可接收到信号的位置及任何天线尺寸都能够有最佳的初始定位性能并进行快速定位。 二、主要特性 50 个通道卫星接收功能  100 万个以上

研创物联 9943

[整理]GPS数据包解析

GPS数据包解析 GPS 上电后,每隔一定的时间就会返回一定格式的数据,数据格式为:$信息类型,x,x,x,x,x,x,x,x,x,x,x,x,x每行开头的字符都是‘$’,接着是信息类型,后面是数据,以逗号分隔开。一行完整的数据如下:$GPRMC,080655.00,A,4546.40891,N,12639.65641,E,1.045,328.42,170809,,,A*60 信息...

weixin_30425949的博客 2197

NEO-6M GPS模块硬件接口与NMEA/UBX协议深度解析

GPS模块是嵌入式系统实现定位、授时与导航的核心传感器,其底层依赖于标准通信协议与可靠硬件接口设计。NMEA-0183作为通用ASCII文本协议,提供人类可读的经纬度、时间、卫星状态等基础定位数据;而UBX二进制协议则支撑高精度配置,如更新率设定、串口参数修改与语句输出控制。二者协同构成‘读取+写入’完整能力闭环。在STM32等MCU平台上,需兼顾电气匹配(3.3V TTL电平)、抗干扰布局(单点接地、去耦电容)、帧同步机制(空闲超时检测)及校验健壮性(XOR校验丢弃非法帧)。典型应用场景包括车载终端、无人

weixin_36151775的博客 213

机器视觉最全面试题总结

空洞卷积(Atrous Convolution)也叫做膨胀卷积、扩张卷积,最初的提出是为了解决图像分割在用下采样(池化、卷积)增加感受野时带来的特征图缩小,后再上采样回去时造成的精度上的损失。空洞卷积通过引入了一个扩张率的超参数,该参数定义了卷积核处理数据时各值的间距。可以在增加感受野的同时保持特征图的尺寸不变,从而代替下采样和上采样a. 是普通的卷积过程(dilation rate = 1),卷积后的感受野为3b. 是dilation rate = 2的空洞卷积,卷积后的感受野为5。

@bangbang的博客 9206

音诺ai翻译机定位u-blox NEO-6M GPS坐标

音诺AI翻译机集成u-blox NEO-6M GPS模块,实现基于位置的语种自动切换、景点导览和轨迹记录,提升用户体验。

weixin_31776191的博客 673

RTAB-Map实战:用RGB-D相机5步搞定机器人自主建图(附避坑指南)

本文提供了一份详细的RTAB-Map实战指南,通过5个核心步骤,指导用户使用RGB-D相机(如Intel RealSense D435i)快速实现机器人自主建图。内容涵盖环境准备、传感器启动、核心参数配置、实战调优及地图后处理,并重点解析了算法关键参数与常见避坑方案,旨在帮助初学者高效搭建鲁棒的视觉SLAM系统。

g9h0i1的博客 789

GPS-UBLOX M8N+u-center使用

GPRMC是GPS推荐定位信息,GBRMC是北斗推荐定位信息,GNRMC是北斗和GPS推荐定位信息 调试模块可以用u-center软件, 图中标出来的是配置按钮,如果更改完设置要保存到flash才能不丢失,保存如下图 点击图中画圈按钮可以查看发送的二进制数据, 上图更改GPS发送数据格式,选中UART1,就会从这个串口发送GXRMC(一般都用这个) 上图更改波特率,记得改...

杨飞的博客 8810

【智能体评测】BrowserUse:一款超越 Anthropic Computer Use 的开源智能体

本文将全面介绍 BrowserUse 的核心功能、配置与使用方法,以及通过多场景测试评估其性能。

surfirst的博客 4099

一周涨十万星,GitHub 爆火的 REA 逆向工程到底是什么?

REA 这波热度里,我一直没太想明白的是它为什么火在 AI 圈而不是安全圈。同类的 MCP 工具早就在了,技术上也谈不上新,真正变的只有一件事:门槛。门槛一降,参与的人就从"会逆向的工程师"变成了"会打字的任何人"。这大概也是争议的根源。护城河这件事,多数报道的共识是它从"你看不到我的代码"挪到了"你拿不走我的服务能力和业务理解"。这话对不对,现在没人拿得出证据,只能等下一批真实案例。哪天有人拿 REA 把某个还在卖钱的闭源软件啃出可维护的工程,那个答案才算落地。

优快云zhizunbao的博客 1186

GPS Ublox配置

UBLOX常用设置参数 ublox-config.c GPS原始RMC数据解析之DDMM.MMMM 解析GPS RMC语句 如何设置GPS模块只发送GGA和RMC数据

三皮仔 2464

IGV新手必看:5分钟搞定ChIP-seq/DAP-seq/ATAC-seq数据可视化(附常见报错解决方案)

本文为IGV新手提供了一份快速上手的实战指南,详细讲解了如何高效完成ChIP-seq、DAP-seq、ATAC-seq等数据的可视化。内容涵盖软件安装、基因组导入、文件格式转换与优化,并重点剖析了“导入后一片空白”等常见报错的根本原因与解决方案,帮助用户在5分钟内避开雷区,生成可用于发表的IGV专业图谱。

weixin_29198045的博客 539

树莓派连接U-blox NEO-6M GPS模块:从硬件连接到Python数据解析全攻略

串行通信(UART)是嵌入式系统和物联网设备中实现微控制器与外围传感器通信的基础接口协议。其原理是通过TX(发送)和RX(接收)引脚进行异步全双工数据传输,具有结构简单、可靠性高的特点。在物联网和户外数据采集项目中,为传感器数据附加精确的地理位置和时间戳具有重要技术价值,能实现资产追踪、环境监测和分布式节点同步等应用。U-blox NEO-6M作为一款经典的GPS接收模块,通过输出标准的NMEA-0183协议数据,为树莓派等开发平台提供了低成本、高精度的定位与授时解决方案。本文以该模块与树莓派的集成为例,详

weixin_29169899的博客 302

轻量级NAS的隐秘战场:比特米盒CumeBox2与CasaOS的生态融合实践

本文探讨了比特米盒CumeBox2轻量级NAS设备与CasaOS操作系统的生态融合实践。通过硬件选型、系统部署、性能优化和应用场景分析,展示了如何将CumeBox2与CasaOS深度整合,打造经济实用的家庭数据管理中心,特别适合入门级用户和小型办公环境。

rl6adventurer的博客 895

磁带库Scalar i6000界面基本操作步骤

(注:磁带库的前面的门不要打开,日常维护:主要就是简单看下磁带库的状态;绿色代表正常;黄色代表报警但不影响磁带库正常使用;红色代表报警,不能正常使用,及时和厂家联系报修。) 一、磁带库管理页面 1、首先,磁带库前面(具体作用如图) 2、查看状态和管理页面 3、管理页面登陆。用户名:service 密码:xxxxxx 4、磁带机背面 二、电脑连接磁带库进入管理页面 1.用网线把电脑和磁带库的维护接口(磁带库背面)进行连接 2.电脑环境:JAVA。把电脑的IP设置成自...

杀神lwz的博客 5352
上一篇: 非常详细的RTKLIB操作步骤
下一篇: GPSTK日志五 TimeTag
Whoisbug
博客等级 码龄9年 894粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值