ESP8266 Developer Zone The Official ESP8266 Forum 2015-07-21T11:19:53+08:00 https://bbs.espressif.com:443/feed.php?f=7&t=780 2015-07-21T11:19:53+08:00 2015-07-21T11:19:53+08:00 https://bbs.espressif.com:443/viewtopic.php?t=780&p=2761#p2761 <![CDATA[求助:ESP8266与STM32串口传输数据出现数据丢失。]]> 小弟初学STM32不久,做的是wifi模块与STM32的通讯及数据处理,现在我有组数据,数据的HEX码如下:01 03 05 00 00 00 00 7F 7A 00 00 2C E5由于接收或者打印函数的原因,串口只能打印:01 03 05 但我想调用数据7F 7A 应该如何修改这些函数或者有什么其他方法呢?谢谢大神指点 :P
接收函数:

Code:

char * ESP8266_ReceiveString ( FunctionalState enumEnUnvarnishTx )
{
   char * pRecStr = 0;
   
   strEsp8266_Fram_Record .InfBit .FramLength = 0;        
   strEsp8266_Fram_Record .InfBit .FramFinishFlag = 0;      
   while ( ! strEsp8266_Fram_Record .InfBit .FramFinishFlag );
   strEsp8266_Fram_Record .Data_RX_BUF [ strEsp8266_Fram_Record .InfBit .FramLength ] = '\0';     
   if ( enumEnUnvarnishTx )
   {
      if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, ">" ) )
         pRecStr = strEsp8266_Fram_Record .Data_RX_BUF;
   }
   else
   {
      if ( strstr ( strEsp8266_Fram_Record .Data_RX_BUF, "+IPD" ) )
         pRecStr = strEsp8266_Fram_Record .Data_RX_BUF;     
   }
   return pRecStr;
}

串口打印函数:

Code:

void USART2_printf( USART_TypeDef* USARTx, char *Data, ... )
{
   int n;
   const char *s;
  int d;   
  char buf;
   int i;
   
  va_list ap;
  va_start(ap, Data);
   
   n=sizeof(Data);

   for (i=0;i<n;i++)     // ÅжÏÊÇ·ñµ½´ï×Ö·û´®½áÊø·û 
   {                                     
      if ( *Data == 0x5c )  //'\'
      {                            
         switch ( *++Data )
         {
            case 'r':                               //»Ø³µ·û
               USART_SendData(USARTx, 0x0d);
               Data ++;
              i++;
               continue;

            case 'n':                               //»»Ðзû
               USART_SendData(USARTx, 0x0a);   
               Data ++;
              i++;
               continue;
            
            default:
               Data ++;
              i++;
              continue;
         }         
      }
      else if ( *Data == '%')
      {                             //
         switch ( *++Data )
         {            
            case 's':                               
               s = va_arg(ap, const char *);
          for ( ; *s; s++)
               {
                  USART_SendData(USARTx,*s);
                  while( USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET );
          }
               Data++;
               i++;
          continue;

       case 'd':                              
          d = va_arg(ap, int);
          itoa(d, buf, 10);
          for (s = buf; *s; s++)
               {
                  USART_SendData(USARTx,*s);
                  while( USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET );
          }
               Data++;
               i++;
          continue;
             default:
                  Data++;
                i++;
                continue;
         }      
      }  /*end of else if */
       USART_SendData(USARTx, *Data++);
      while( USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET );
   }
}

Statistics: Posted by chenran1991 — Tue Jul 21, 2015 11:19 am


]]>