0

我正在尝试在 keil IDE 上使用 STM32F103 与 Wifi 模块(esp8266)通信。如示意图中所述:我想让我的 stm32 通过 usart1(Tx1)向 esp8266 发送 AT 命令,并获取 esp 响应(Rx1),然后使用 usart2(Tx2)在计算机串行监视器上显示 esp 响应。

在配置了 usart1 和 usart2,并编写了发送接收数据的函数之后,我只得到了命令的 ECHO,而不是应该是 "OK" 的响应enter code here。当我发送“AT\r\n”时,我在串行监视器上只接收到 AT。我将分享我写的代码,以及逻辑分析仪上的痕迹。如果有任何建议,我将不胜感激。

 int len=0;
char buff[256];

int main(void){
    
     __disable_irq();
    
    
    systick_init();
  UART1_Init();
    UART2_Init();

  Delayms(100);
    
printMsg1("AT\r\n");
    
    Delayms(100);
    
    NVIC_EnableIRQ(USART1_IRQn);
    
    __enable_irq();
    
while(1){}

}


void USART1_IRQHandler(){

if (USART1->SR & USART_SR_RXNE) // if received data (RXNE event flag is set) is ready to be read -->RXNE
            {
    
             buff[len] = USART1->DR;
                            
                Delayms(100);
                
                printMsg2(buff);

    }
                
}

void printMsg1(char *msg, ...)  // Sending AT command to ESP  ( Stm32-> ESP8266)
{

 va_list args;
 va_start(args,msg); 
 vsprintf(buff,msg,args);
 
 for(int i=0;i<strlen(buff);i++)
 {


   USART1->DR = (buff[i]&0xFF);
     while(!(USART1->SR & USART_SR_TXE)); //wait for TXE, 1 = data transferred
   
  }
}

void printMsg2(char *msg, ...)  // Sending ESP response to Serial Monitor ( STM32-> PC)
{

 va_list args;
 va_start(args,msg); 
 vsprintf(buff,msg,args);
 
 for(int i=0;i<strlen(buff);i++)
 {
   USART2->DR = buff[i];
   while(!(USART2->SR & USART_SR_TXE)); //wait for TXE, 1 = data transferred
  }
}

串口监视器

逻辑分析仪

伪代码

4

0 回答 0