打印

串口接收GPRS数据的问题

[复制链接]
3653|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huigoushang|  楼主 | 2012-2-25 13:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在遇到一个问题,我通过430串口1接收计算机发送的指令然后通过串口3发送到SIM900A, 反馈的数据也同样由串口3转发到串口1,现在出现的问题是我如何判断串口3接收SIM900A反馈的数据已经完成?接收“\r\n”来判断接收完成显然不行,因为如果碰到多行反馈的话会出现多次的“\r\n”,我现在用的是比较不靠谱的法子,就是一开始判断数据长度,再延时50ms在判断一次,如果两个长度相等也不等于0表示数据接收完成,这种方法虽然现在没出现问题,但终归不靠谱,撇开效率问题不讲,光这个延时就不一定可靠。。。
虽然转发没有什么问题,问题是出在我想判断接收的数据是否是我需要的数据,如果不是就丢弃,是的话再转发,现在的状况是接收一行就直接把一行转发了,我都无法判断是否是我要的数据。

相关帖子

沙发
huigoushang|  楼主 | 2012-2-25 13:54 | 只看该作者
哪位前辈做过GPRS的,麻烦告之一声,非常感谢

使用特权

评论回复
板凳
hbb.email| | 2012-2-29 12:23 | 只看该作者
你做的这个,在GPRS接收时,是叫串口消抖。如下:

Glast_r为GPRS收到的长度,
_pRecBuf0为串口中断的时_pRecBuf0++
每次收到GPRS数据时,先消抖,再进行转发操作。
if(_pRecBuf0>0)
{
  RecVary0();
  …………
  ……
  ……
}
void RecVary0()
{
while(1)
  {
   Glast_r = _pRecBuf0; Delay_ms(20);  
   if(Glast_r == _pRecBuf0) break;   
  }                                 
}
其中这个Delay_ms(20);  通过波特率是多少,来算,9600bit/s=9.6bit/ms 约等于1Byte/ms,你就可以大致算一下,20ms能收到几个字节,一般以10个以上的字节为准。
这个时间需要你自己测试来改,
以Delay_ms(10),
Delay_ms(20),
Delay_ms(30),
三种情况来测试稳定性,找到最稳定的就定下来,我的是20ms

使用特权

评论回复
地板
wen86sv| | 2012-5-19 15:04 | 只看该作者
sim900 回复:"OK"  900A没用过

使用特权

评论回复
5
balabalaa| | 2012-5-19 19:35 | 只看该作者
没做过GPRS的来学习。

使用特权

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

本版积分规则

168

主题

1677

帖子

1

粉丝