打印
[Kinetis]

KL25串口接收字符串会丢包怎么办?

[复制链接]
1769|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
774729254|  楼主 | 2013-12-7 20:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在做一个gps模块发送数据,通过KL25串口接收,在lcd上显示,我发现使用字符串接收函数时,字符串会丢包,我的gps是一秒发送一串数据,格式如下
$GPRMC,023557.00,V,,,,,,,051213,,,N*7F
$GPVTG,,,,,,,,,N*30
$GPGGA,023557.00,,,,,0,00,99.99,,,,,,*60
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
$GPGSV,2,1,06,02,32,284,,04,62,338,,05,11,218,,10,65,206,*71
$GPGLL,,,,,023557.00,V,N*4C

是速度太快,数据量太大处理不过来吗?

相关帖子

沙发
ar_m_cu| | 2013-12-7 20:43 | 只看该作者
那要看你消耗数据的速度是不是快于生产数据的速度了

使用特权

评论回复
板凳
ar_m_cu| | 2013-12-7 20:45 | 只看该作者
其实GPS那点数据对串口来说,处理起来还是很easy的

使用特权

评论回复
地板
774729254|  楼主 | 2013-12-9 12:39 | 只看该作者
ar_m_cu 发表于 2013-12-7 20:43
那要看你消耗数据的速度是不是快于生产数据的速度了

我的gps波特率是9600,串口也是9600,就丢包了

使用特权

评论回复
5
ar_m_cu| | 2013-12-9 12:55 | 只看该作者
774729254 发表于 2013-12-9 12:39
我的gps波特率是9600,串口也是9600,就丢包了

我的意思是,你把数据从缓冲区读出来写到LCD的速度是不是够快,另外你缓冲区开了多大?

使用特权

评论回复
6
774729254|  楼主 | 2013-12-9 15:16 | 只看该作者
ar_m_cu 发表于 2013-12-9 12:55
我的意思是,你把数据从缓冲区读出来写到LCD的速度是不是够快,另外你缓冲区开了多大? ...

   uint_8 buff[200]=" ";缓存,应为我不需要接受所有的数据,只要PGRMC为帧头的数据,而这个帧头的一串数据是在第一行,所以我定义了200

使用特权

评论回复
7
ar_m_cu| | 2013-12-9 15:24 | 只看该作者
774729254 发表于 2013-12-9 15:16
uint_8 buff[200]=" ";缓存,应为我不需要接受所有的数据,只要PGRMC为帧头的数据,而这个帧头的一串 ...

那你把数据从串口数据寄存器搬到缓冲区是怎么实现的?这块有没有问题

使用特权

评论回复
8
FSL_TICS_Robin| | 2013-12-9 15:51 | 只看该作者
你丢包的表现是什么,是漏收了一秒的包头吗?

使用特权

评论回复
9
774729254|  楼主 | 2013-12-9 15:56 | 只看该作者
ar_m_cu 发表于 2013-12-9 15:24
那你把数据从串口数据寄存器搬到缓冲区是怎么实现的?这块有没有问题

我是通过串口接收字符串的函数实现的

使用特权

评论回复
10
774729254|  楼主 | 2013-12-9 16:00 | 只看该作者
FSL_TICS_Robin 发表于 2013-12-9 15:51
你丢包的表现是什么,是漏收了一秒的包头吗?

这样的数据:
$GPRMC,023557.00,V,,,,,,,051213,,,N*7F
$GPVTG,,,,,,,,,N*30
$GPGGA,023557.00,,,,,0,00,99.99,,,,,,*60
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30
$GPGSV,2,1,06,02,32,284,,04,62,338,,05,11,218,,10,65,206,*71
$GPGLL,,,,,023557.00,V,N*4C
收到的:  
206,*71
$GPGLL,,,,,023557.00,V,N*4C
变成这样了

使用特权

评论回复
11
ar_m_cu| | 2013-12-9 16:00 | 只看该作者
774729254 发表于 2013-12-9 15:56
我是通过串口接收字符串的函数实现的

你还是把你的代码贴出来让大家看看吧,这样猜也猜不出结果啊

使用特权

评论回复
12
774729254|  楼主 | 2013-12-9 16:02 | 只看该作者
774729254 发表于 2013-12-9 16:00
这样的数据:
$GPRMC,023557.00,V,,,,,,,051213,,,N*7F
$GPVTG,,,,,,,,,N*30

我是通过串口调试工具看的,使用字节接收的函数时就是好的,使用字符串接收的函数时就出问题了,但是字符串的函数不也是调用字节接收的函数实现的吗,不知道哪里出问题了

使用特权

评论回复
13
FSL_TICS_Robin| | 2013-12-9 16:18 | 只看该作者
你收了一段本不该接收的数据。
每次串口进来的数据,你不进行判断吗?
我觉得只有在判断到$之后PGRMC紧跟着进来,才置1某个标志,在该标志置1情况下才将数据逐次存入数组,当收完这个包头的数据后,清零该标志。

使用特权

评论回复
14
774729254|  楼主 | 2013-12-9 19:34 | 只看该作者
FSL_TICS_Robin 发表于 2013-12-9 16:18
你收了一段本不该接收的数据。
每次串口进来的数据,你不进行判断吗?
我觉得只有在判断到$之后PGRMC紧跟着 ...

哈哈!我调出来了,谢谢!
问题出在我设置的缓存区太小了,gps一次性发送的数据很多,大于200,所以他接收的时候就收不到了,我设置了500,就好了

使用特权

评论回复
15
FSL_TICS_Robin| | 2013-12-10 09:30 | 只看该作者
774729254 发表于 2013-12-9 19:34
哈哈!我调出来了,谢谢!
问题出在我设置的缓存区太小了,gps一次性发送的数据很多,大于200,所以他接 ...

恭喜
总算是一步步上正轨了
以后有啥问题欢迎再次开帖讨论

使用特权

评论回复
16
motodefy| | 2013-12-10 10:35 | 只看该作者
发送过来的太多了··导致前面的被覆盖只剩下最后的信息了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

58

主题

299

帖子

1

粉丝