OpenEdv-开源电子网

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

读了一周的GPS,终于读出了,分享一下我粗浅的认知,大神勿喷

[复制链接]

24

主题

192

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2016-3-16
在线时间
202 小时
发表于 2016-3-26 21:39:01 | 显示全部楼层 |阅读模式
      玩飞行器,悬空,想要定位,GPS被越来越多的人使用。想要使用GPS模块,就要知道NMEA协议,这是一种数据传送格式。其中包括七种数据格式:这七种格式都大同小异,这里就不一一去赘述了,想要了解直接下载相关的datasheet就好了,值得一提的是:这几种格式有些输出的部分信息是一样的,具体要用什么信息,根据自己的项目去选择吧;初始条件下(刚拿到这个模块、刚将芯片焊接完成),GPS模块是将这七条数据全部都输出的;当然,你有时候并不会想要全部的七条数据,这时,可以用u_blox公司的上位机软件u_center对模块进行相关更改,包括改数据输出、改通信波特率、改数据传输速度,这个在原子哥的教程->GPS实验里有很清楚的描述,我就不丢人现眼了;设置好通信波特率,数据传送速率,输出哪种数据后,就可以开始使用模块了;软件部分:GPS模块使用的是串口通讯、所以,在程序中我们要先对连接模块的串口进行相关的初始化:TXD复用推挽输出、RXD浮空输入,波特率设置成和模块的波特率一致等;初始化完成,我们就要开启串口中断来接收数据,串口进入一次中断接收一次数据,一次接收一个字节(即8位),GPS传送出来的数据是字符型的,即串口每接收一次数据就接收一个字符;这些数据在被接收后,可以定义一个数组去缓存;当接收完一帧之后,我们就要处理得到的数据了,注意:这时候得到的是原始数据,也就是一些字符,我们想要用到这些数据,往往要将其转换为其他类型的数据,比如:整形、实型etc...在我的程序中,我只要$GPRMC这种数据格式传出来的纬度和经度信息,想要在程序中运用这些信息,当然不能用字符的形式、那么就要想点办法了,我想要将经纬度信息转化成float型的数据,那怎么办呢?我们都知道数字的字符是ASCII码,字符‘0’的ASCII码是48,假如我得到的数据是字符‘6’,我想要将这个字符6转化为数字6,那怎么办呢?很简单,我的处理方式如下:int k; char b='6'; k=b-'0';  没错,用字符6对应的ASCII码减去字符0的ASCII码,就得到数字的6了;然后你看你读到的这个字符实在数据的个位、十位还是百位上,乘以一个相应的倍数(如百位:k*=100,千位:k*=1000);然后再将这些数据加起来就是了。 还有值得一提的是,想要找到你对应的数据并不用去数逗号,那样反而麻烦了,NMEA传出来的数据格式都是固定的,你只要找到你想要的数据在你存数据的数组的哪一位上,就可以对这个数据进行处理了。 (比如:$GPRMC的第19位到第28位的数据是纬度信息,你只要从第十八位开始处理纬度信息,叠加到第28位就好了);直接上程序吧,说话好累。

Read_GPS.zip

2.06 KB, 下载次数: 1755

路漫漫其修远兮,戒骄戒躁。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

24

主题

192

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2016-3-16
在线时间
202 小时
 楼主| 发表于 2016-3-26 21:39:52 | 显示全部楼层
大神们见笑了,小弟超级小白。。。
路漫漫其修远兮,戒骄戒躁。
回复 支持 反对

使用道具 举报

1

主题

78

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2015-12-10
在线时间
49 小时
发表于 2016-3-27 00:51:03 | 显示全部楼层
高手,不错!
逆水行舟不进则退
回复 支持 反对

使用道具 举报

24

主题

192

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2016-3-16
在线时间
202 小时
 楼主| 发表于 2016-3-27 12:40:29 | 显示全部楼层

在这个论坛哪里敢称高手,到处都是大神。 你最近也在弄四轴飞行器吗?
路漫漫其修远兮,戒骄戒躁。
回复 支持 反对

使用道具 举报

1

主题

78

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2015-12-10
在线时间
49 小时
发表于 2016-3-27 23:37:23 | 显示全部楼层
EAON 发表于 2016-3-27 12:40
在这个论坛哪里敢称高手,到处都是大神。 你最近也在弄四轴飞行器吗?

没有,还在学习机器小车阶段,只是把6050试了试,离飞行器还远。所以要想你们好好学习。
逆水行舟不进则退
回复 支持 反对

使用道具 举报

5

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-3-30
在线时间
13 小时
发表于 2016-4-1 14:57:23 | 显示全部楼层
有源程序?大神
回复 支持 反对

使用道具 举报

24

主题

192

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2016-3-16
在线时间
202 小时
 楼主| 发表于 2016-4-1 19:59:24 | 显示全部楼层

不是贴在上面的附件里了吗?
路漫漫其修远兮,戒骄戒躁。
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2016-4-1 21:37:48 | 显示全部楼层
Thank you for sharing...
回复 支持 反对

使用道具 举报

24

主题

192

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2016-3-16
在线时间
202 小时
 楼主| 发表于 2016-4-3 10:35:39 | 显示全部楼层
龙之谷 发表于 2016-4-1 21:37
Thank you for sharing...

   感谢元老级大神捧贴!
路漫漫其修远兮,戒骄戒躁。
回复 支持 反对

使用道具 举报

5

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-3-30
在线时间
13 小时
发表于 2016-4-5 11:58:49 | 显示全部楼层
EAON 发表于 2016-4-1 19:59
不是贴在上面的附件里了吗?

我用的是ublox m8030  的不过读不出数据
回复 支持 反对

使用道具 举报

24

主题

192

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2016-3-16
在线时间
202 小时
 楼主| 发表于 2016-4-5 13:21:25 | 显示全部楼层
紫雾之海 发表于 2016-4-5 11:58
我用的是ublox m8030  的不过读不出数据

我这个驱动写的是u_blox-NEO-6M的,具体的要看你的手册写哦。
路漫漫其修远兮,戒骄戒躁。
回复 支持 反对

使用道具 举报

5

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-3-30
在线时间
13 小时
发表于 2016-4-5 14:55:10 | 显示全部楼层
EAON 发表于 2016-4-5 13:21
我这个驱动写的是u_blox-NEO-6M的,具体的要看你的手册写哦。

不一样吗
回复 支持 反对

使用道具 举报

24

主题

192

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2016-3-16
在线时间
202 小时
 楼主| 发表于 2016-4-5 15:20:11 | 显示全部楼层

    可能不一样吧,你那个芯片我也没用过。 TXD和RXD接对了吗? 串口?
路漫漫其修远兮,戒骄戒躁。
回复 支持 反对

使用道具 举报

5

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
77
金钱
77
注册时间
2016-3-30
在线时间
13 小时
发表于 2016-4-5 16:48:05 | 显示全部楼层
EAON 发表于 2016-4-5 15:20
可能不一样吧,你那个芯片我也没用过。 TXD和RXD接对了吗? 串口?

2351659353这是我的qq qq上聊谢谢
回复 支持 反对

使用道具 举报

0

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
152
金钱
152
注册时间
2015-5-12
在线时间
23 小时
发表于 2016-4-30 09:28:19 | 显示全部楼层
谢谢楼主分享!
回复 支持 反对

使用道具 举报

24

主题

192

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2016-3-16
在线时间
202 小时
 楼主| 发表于 2016-5-3 09:55:51 | 显示全部楼层

    分享带来进步,交流发现不足~
路漫漫其修远兮,戒骄戒躁。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2014-7-30
在线时间
2 小时
发表于 2016-5-10 11:20:10 | 显示全部楼层
EAON 发表于 2016-5-3 09:55
分享带来进步,交流发现不足~

谢谢楼主分享,不知楼主用的是什么模块,我用了原子哥的6M模块,多云天气到室外也无法成功定位,不知是何原因,疑惑中。。。
思维改变生活
回复 支持 反对

使用道具 举报

24

主题

192

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2016-3-16
在线时间
202 小时
 楼主| 发表于 2016-5-10 13:09:10 | 显示全部楼层
老师说。。。学习是一条路 发表于 2016-5-10 11:20
谢谢楼主分享,不知楼主用的是什么模块,我用了原子哥的6M模块,多云天气到室外也无法成功定位,不知是何 ...

同6M,GPS是这样,天气影响很大~~ 室内定位不到,需要到开阔地方。
路漫漫其修远兮,戒骄戒躁。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
27
金钱
27
注册时间
2014-7-30
在线时间
2 小时
发表于 2016-5-10 14:31:31 | 显示全部楼层
EAON 发表于 2016-5-10 13:09
同6M,GPS是这样,天气影响很大~~ 室内定位不到,需要到开阔地方。

你有没有使用有源天线?我的陶瓷天线貌似到室外也无法成功定位,客服说是陶瓷天线可能有点问题
思维改变生活
回复 支持 反对

使用道具 举报

24

主题

192

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2016-3-16
在线时间
202 小时
 楼主| 发表于 2016-5-10 16:19:49 | 显示全部楼层
老师说。。。学习是一条路 发表于 2016-5-10 14:31
你有没有使用有源天线?我的陶瓷天线貌似到室外也无法成功定位,客服说是陶瓷天线可能有点问题

无源天线,1-2分钟内可成功定位,室外。
路漫漫其修远兮,戒骄戒躁。
回复 支持 反对

使用道具 举报

2

主题

7

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2016-5-12
在线时间
3 小时
发表于 2016-5-12 20:39:33 | 显示全部楼层
看了GPS数据解析的程序,对我帮助很大,但是还有一个问题 不太明天 $GPRMC纬度信息具体怎么数的啊?
回复 支持 反对

使用道具 举报

24

主题

192

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2016-3-16
在线时间
202 小时
 楼主| 发表于 2016-5-13 13:39:36 | 显示全部楼层
wei158 发表于 2016-5-12 20:39
看了GPS数据解析的程序,对我帮助很大,但是还有一个问题 不太明天 $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

你数数看上面那个例子,纬度数据的起始位是不是对应数组BUF[19],结束位对应BUF[28];其中,整数部分是:BUF[19]至BUF[22]; 小数部分是:BUF[24]到BUF[28];
路漫漫其修远兮,戒骄戒躁。
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2016-7-12
在线时间
1 小时
发表于 2016-7-12 10:32:00 | 显示全部楼层
大神 最近我也在弄同一款的GPS,想进入51处理。可是在串口显示出来是乱码,求大神帮助
回复 支持 反对

使用道具 举报

24

主题

192

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
498
金钱
498
注册时间
2016-3-16
在线时间
202 小时
 楼主| 发表于 2016-7-12 13:04:03 | 显示全部楼层
dhy 发表于 2016-7-12 10:32
大神 最近我也在弄同一款的GPS,想进入51处理。可是在串口显示出来是乱码,求大神帮助

    串口乱码最先怀疑波特率,波特率没问题,再怀疑通讯帧解析的有没问题;你直接这么说没法回答,详细点,问题。
路漫漫其修远兮,戒骄戒躁。
回复 支持 反对

使用道具 举报

5

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2018-4-16
在线时间
23 小时
发表于 2018-4-30 10:47:48 | 显示全部楼层
谢谢打捞的详细解答
回复 支持 反对

使用道具 举报

5

主题

22

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
324
金钱
324
注册时间
2017-4-15
在线时间
73 小时
发表于 2019-4-5 23:10:33 | 显示全部楼层
你好,请问我怎么才能把你程序里的数据读出来显示在串口助手上呢?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 16:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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