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