WIFI技术学习
直播中

欧建杭

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

请问单片机怎么区分发送指令到esp8266模块后模块返回的数据和主动发来的数据?

请问单片机如何区分发送指令到esp8266模块后模块返回的数据和另一个建立了tcp连接的esp8266模块主动发来的数据?
两个esp8266模块,一个连接到电脑通过串口调试助手设置成tcp server,另一个连接到单片机作为client,现在tcp连接已经建立,client主动向server发送数据也正确,但server主动向client发送的数据,单片机接收不到或者说区分不了发送指令到esp8266模块后模块返回的数据和另一个建立了tcp连接的esp8266模块主动发来的数据,通过调用watch window发现USART2_RX_BUFF最后一次是AT+CIPMODE=1rrnrnOKrn,不是server发送给单片机的数据,说明单片机根本没接收到server的数据。[C] 纯文本查看 复制代码
void atk_8266_init(void){        u8 ipbuf[32]="192.168.4.1";         //IP»o′æ        u8 *p;        u8 res=0;        u16 rlen=0;         p=mymalloc(32);                                                        //éêÇë32×Ö½úÄú′æ        atk_8266_send_cmd("AT+CWMODE=1","OK",50);                //éèÖÃWIFI STAģ꽠       atk_8266_send_cmd("AT+RST","OK",50);                //DHCP·tÎñÆ÷1رÕ(½öAPÄ£ê½óDD§)         //delay_ms(1000);         //Ñóê±4Sμè′yÖØÆô3é1|        //delay_ms(1000);        //delay_ms(1000);        //delay_ms(1000);        //éèÖÃᬽóμ½μÄWIFIíøÂçÃû3Æ/¼óÃü·½ê½/ÃüÂë,Õa¼¸¸ö2ÎêyDèòa¸ù¾YÄú×Ô¼oμÄ·óéÆ÷éèÖýøDDDT¸Ä!!         sprintf((char*)p,"AT+CWJAP="%s","%s"",wifista_ssid,wifista_password);//éèÖÃÎTÏß2Îêy:ssid,ÃüÂë        while(atk_8266_send_cmd(p,"WIFI GOT IP",300));                                        //ᬽóÄ¿±ê·óéÆ÷,2¢Çò»ñμÃIP        atk_8266_send_cmd("AT+CIPMUX=0","OK",50);   //0£oμ¥ᬽó£¬1£o¶àá¬½ó        sprintf((char*)p,"AT+CIPSTART="TCP","%s",%s",ipbuf,(u8*)portnum);    //ÅäÖÃÄ¿±êTCP·tÎñÆ÷        while(atk_8266_send_cmd(p,"OK",200));        atk_8266_send_cmd("AT+CIPMODE=1","OK",200);      //′«êäÄ£ê½Îa£oí¸′«                  //atk_8266_send_cmd("AT+CIPSEND","OK",20);         //¿aê¼í¸′«                //atk_8266_send_cmd("FF00FF","",20);         //¿aê¼í¸′«        if(USART2_RX_STA&0X8000)                //½óêÕμ½ò»′Îêy¾YáË        {                 rlen=USART2_RX_STA&0X7FFF;        //μÃμ½±¾′νóêÕμ½μÄêy¾Y3¤¶è                USART2_RX_BUF[rlen]=0;                //ìí¼ó½áêø·û                 //printf("%s",USART2_RX_BUF);        //·¢Ëíμ½′®¿ú                   UART_PutStr(USART1,(uint8_t*)USART2_RX_BUF);          if(strcmp((char*)USART2_RX_BUF,"AT+CIPMODE=1rrnrnOKrn")==0) LED0=0;          else LED0=1;                USART2_RX_STA=0;  }         }[C] 纯文本查看 复制代码
void USART2_IRQHandler(void){        u8 res;                    if(USART2->SR&(1<<5))//½óêÕμ½êy¾Y        {                         res=USART2->DR;                                          if((USART2_RX_STA&(1<<15))==0)                //»1¿éòÔ½óêÕêy¾Y                {                        tiM4->CNT=0;                                                 //¼ÆêyÆ÷Çå¿Õ                        if(USART2_RX_STA==0)TIM4_Set(1);                 //ê1Äü¶¨ê±Æ÷4μÄÖD¶Ï                         USART2_RX_BUF[USART2_RX_STA++]=res;                //¼Ç¼½óêÕμ½μÄÖμ                         }else                {                        USART2_RX_STA|=1<<15;                                        //Ç¿ÖÆ±ê¼Ç½óêÕíê3é                }         }                                                                                           }

回帖(3)

刘宇

2019-4-30 09:10:35
@发烧友
举报

张飞雄

2019-4-30 09:30:07
顶顶顶
举报

李梓

2019-4-30 09:49:56
帮顶
举报

更多回帖

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