OpenEdv-开源电子网

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

sim900a GPRS接收数据总是丢失最后一位

[复制链接]

9

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2016-2-29
在线时间
25 小时
发表于 2016-4-14 11:08:50 | 显示全部楼层 |阅读模式
1金钱
if(strstr(Uart2_Buf,"+IPD")!=NULL)                   //èô»o′æ×Ö·û′®ÖDo¬óD^SISR
        {       
                Heartbeat=0;        //Çå3yDÄìøÖ¡¼ÆêyÆ÷
                Heart_beat=0;
                Delay_nMs(100);
                //UART1_SendString("êÕμ½DÂDÅÏ¢£o\r\n");
                //strncpy((char *)USART2_RX_BUF,(const char *)Uart2_Buf+12,18);
                //UART1_SendString(Uart2_Buf);
                //UART1_SendString((char *)USART2_RX_BUF);
                mid((char*)USART2_RX_BUF,(char*)Uart2_Buf,19,12);
                UART1_SendString((char *)USART2_RX_BUF);
                USART_SendData(USART1 ,0x0d);               
                while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
                USART_SendData(USART1 ,0x0a);
                while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);        
                CLR_Buf2();
                Heart_beat=1;//·¢Ëíó|′eêy¾Y£¬¸æËß·tÎñÆ÷êÕμ½êy¾Y               
        }
har *mid(char *dst,char *src,int n,int m)
{
        char *p=src;
        char *q=dst;
        int len=strlen(src);
        if(n>len)n=len-m;
        if(m<0)m=0;
        if(m>len)return NULL;
        p+=m;
        while(n--)*(q++)=*(p++);
        *(q++)='\0';
        return dst;
}
比如:服务器发送87112047870853257收到数据是8711204787085325,会将最后一位丢失。
若发送:871120478708532517,则会收到87112047870853251,总是会丢一位。
mid为字符串截取函数,因为服务器发给sim900a  的数据带有:+IPD,31:87112047870853257。但是我想去掉+IPD,31:这些字符,但是总是丢一位,就是不知道怎么回事。
望大神提点。


最佳答案

查看完整内容[请看2#楼]

已经搞定,是 USART_SendData(USART1 ,0x0d); while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET); USART_SendData(USART1 ,0x0a); while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET); CLR_Buf2();的问题
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2016-2-29
在线时间
25 小时
 楼主| 发表于 2016-4-14 11:08:51 | 显示全部楼层
已经搞定,是 USART_SendData(USART1 ,0x0d);               
                while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
                USART_SendData(USART1 ,0x0a);
                while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);         
                CLR_Buf2();的问题
回复

使用道具 举报

58

主题

6291

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11406
金钱
11406
注册时间
2014-4-1
在线时间
1282 小时
发表于 2016-4-14 11:18:35 | 显示全部楼层

没仔细看。
感觉是数据管理有漏洞。


回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 08:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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