天线|RF射频
直播中

许晓凌

8年用户 169经验值
私信 关注
[问答]

sim900a GPRS接收数据会将最后一位丢失

if(strstr(Uart2_Buf,"+IPD")!=NULL)                   //èô»o′æ×Ö·û′®ÖDo¬óD^SISR
        {        
                Heartbeat=0;        //Çå3yDÄìøÖ¡¼ÆêyÆ÷
                Heart_beat=0;
                Delay_nMs(100);
                //UART1_SendString("êÕμ½DÂDÅÏ¢£orn");
                //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++)='';
        return dst;
}
比如:服务器发送87112047870853257收到数据是8711204787085325,会将最后一位丢失。
若发送:871120478708532517,则会收到87112047870853251,总是会丢一位。
mid为字符串截取函数,因为服务器发给sim900a  的数据带有:+IPD,31:87112047870853257。但是我想去掉+IPD,31:这些字符,但是总是丢一位,就是不知道怎么回事。
望大神提点。

回帖(2)

卞轮辉

2019-5-28 07:10:31
已经搞定,是 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();的问题
举报

王秀梅

2019-5-28 07:23:42
没仔细看。
感觉是数据管理有漏洞。
举报

更多回帖

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