天线|RF射频
直播中

马秀英

7年用户 171经验值
私信 关注
[问答]

服务器给GPRS发送数据时GPRS只能偶尔接收到

在箭头处打个断点无论服务器有木有给GPRS模块发送数据只要程序运行都会进入到这个断点这儿 中断函数不是要服务器给GPRS发送数据的时候才会进入这个接收中断吗?
[C] 纯文本查看 复制代码
if(USART2_RX_STA&0X8000)//接收到一次数据了{ USART2_RX_BUF[USART2_RX_STA&0X7FFF]=0;//添加结束符 printf("%s",USART2_RX_BUF);//发送到串口  if(hbeaterrcnt)//需要检测心跳应答{if(strstr((const char*)USART2_RX_BUF,"SEND OK"))hbeaterrcnt=0;//心跳正常}p2=(u8*)strstr((const char*)USART2_RX_BUF,"+IPD");if(p2)//接收到TCP/UDP数据{p3=(u8*)strstr((const char*)p2,",");p2=(u8*)strstr((const char*)p2,":");p2[0]=0;//加入结束符sprintf((char*)p1,"收到%s字节,内容如下",p3+1);//接收到的字节数LCD_Fill(30+54,115,239,130,WHITE);POINT_COLOR=BRED;Show_Str(30+54,115,156,12,p1,12,0); //显示接收到的数据长度POINT_COLOR=BLUE;LCD_Fill(30,130,210,319,WHITE);Show_Str(30,130,180,190,p2+1,12,0); //显示接收到的数据 }USART2_RX_STA=0;这个是将接收到的数据进行相关处理的那一块[C] 纯文本查看 复制代码
USART2_RX_BUF[USART2_RX_STA&0X7FFF]=0;//添加结束符[C] 纯文本查看 复制代码
[mw_shl_code=c,true]p2=(u8*)strstr((const char*)USART2_RX_BUF,"+IPD");[C] 纯文本查看 复制代码
[mw_shl_code=c,true]p2=(u8*)strstr((const char*)p2,":");这几句代码这样写也不懂为什么要查找RX_BUF里面的+IPD这个字符串和':'这个字符串。
[/mw_shl_code][/mw_shl_code]

回帖(7)

李晓婷

2019-4-18 09:51:58
肯定是收到数据才进入这里的.
不会无缘无故进入的.
举报

任斌

2019-4-18 10:11:01
嗯嗯  我现在知道为什么会自动进入中断了 是因为发送AT指令的时候会返回相关的字符,所以会进入中断。但是我还是不知道为何服务器发给GPRS发送数据的时候 GPRS有时候接收不到呢 ?原子哥 您以前测试这个GPRS程序的时候有出现过这个情况吗?
举报

李涛

2019-4-18 10:22:37
没遇到过.
你用多一个串口,监控下串口线上的数据吧.
举报

张丽

2019-4-18 10:29:07
请问原子哥以下几个问题
1、p2=(u8*)strstr((const char*)USART2_RX_BUF,"+IPD");
这句话的意思查找RX_BUF里面出现的+IPD这个字符的位置是不是这个字符之后的数据就是服务器发送给GPRS接收到的数据了?
2、p3=(u8*)strstr((const char*)p2,",");
这句话的意思是查找p2这个字符串里的“逗号”是不是接收到的数据例如12345应该是1,2,3,4,5这样放在RX_BUF里面的?这儿可以通过“逗号”的个数判断接收到几个字节的数据?
3、p2=(u8*)strstr((const char*)p2,":");
这句话查找p2中的“:”字符,这个“;”是不是接着+IPD:这样的
那么服务器发送过来的12345这几个数据在USART2_RX_BUF里面存储形式是不是这样的+IPD:1,2,3,4,5,
这样我要判断收没收到服务器发送来的数据首先的查找到USART2_RX_BUF里面有木有出现+IPD:这个字符,如果出现了则表示服务器有发送数据给GPRS,接着+IPD:后面的数据就表示是服务器发送过来的?
p2[0]=0;//加入结束符
sprintf((char*)p1,"收到%s字节,内容如下",p3+1);//接收到的字节数
LCD_Fill(30+54,115,239,130,WHITE);
POINT_COLOR=BRED;
Show_Str(30+54,115,156,12,p1,12,0); //显示接收到的数据长度
POINT_COLOR=BLUE;
LCD_Fill(30,130,210,319,WHITE);
Show_Str(30,130,180,190,p2+1,12,0); //显示接收到的数据
举报

更多回帖

发帖
×
20
完善资料,
赚取积分