使用 stm32F103 通过 usart 向 esp8266 发送 AT 命令

时间:2021-05-30 20:30:46

标签: c esp8266 at-command keil stm32f1

我正在尝试在 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
  }
}

Serial monitor

Logic Analyzer

Pseudo-Code

0 个答案:

没有答案