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