需求描述
测试AT指令是否能够正常控制ESP32的wifi,比如重启、读取设备信息等。
思路:
stm32通过串口usart2向ESP32发布命令。ESP32通过串口1返回信息。
配置:
第一步:对ESP32芯片烧录可以读取stm32命令的固件(factory_MINI-1.bin)。
第二步:打开cubeMAX->配置usart1和usart2,在原理图中,STM32通过usart2和ESP32连接。
第三步:新建Interface文件-》新建esp.c和esp.h文件。
cubeMAX配置图:

keil配置:引入esp.c文件,path中添加.h路径
代码书写流程:
1》usart.h文件->引入#include<stdio.h>
2》usart.c文件:重写printf代码:
int fputc(int ch, FILE *file)
{
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 1000);
  return ch;
}3》Interface文件下的esp32.h文件:
#ifndef __ESP32_H__
#define __ESP32_H__
#include "usart.h"
#include "string.h"
void ESP32_Init(void);
//发送命令
void ESP32_SendCmd(uint8_t * cmd,uint16_t cmdLen);
//读取响应
void ESP32_ReadResp(uint8_t buff[],uint16_t *len);
#endif /* __ESP32_H__ */
4》Interface文件下的esp32.c文件:
#include "esp32.h"
//定义全局变量,接收响应缓冲区和长度
uint8_t respBuff[1024];
uint16_t resplen;
void ESP32_Init(void)
{
    //1 初始化串口2
    MX_USART2_UART_Init();
    // 2 发送AT指令 复位ESP32
    uint8_t *cmd = "AT+RST=0\r\n";
    ESP32_SendCmd(cmd,strlen((char *)cmd));
    //3 引入延时,确保重启成功
    HAL_Delay(2000);
}
//发送命令
void ESP32_SendCmd(uint8_t * cmd,uint16_t cmdLen)
{
    // 先清空
    memset(respBuff,0,1024);
    //直接通过串口2发送命令
    HAL_UART_Transmit(&huart2,cmd,cmdLen,1000);
    // 读取响应
    do
    {
        ESP32_ReadResp(respBuff,&resplen);
    }while(strstr((char *)respBuff,"OK") == NULL);
    //将响应打印输出
    printf("%.*s\n",resplen,respBuff);
}
//读取响应
void ESP32_ReadResp(uint8_t buff[],uint16_t *len)
{
    //串口2 接收变长数据
    HAL_UARTEx_ReceiveToIdle(&huart2,buff,1024,len,1000);;
}
5》main.c文件:
添加
#include "esp32.h"int main(void)大括号下添加
  printf("测试AT指令...\n");
  ESP32_Init();
  printf("esp32初始化完成\n");
  uint8_t *cmd = "AT\r\n";
  ESP32_SendCmd(cmd,strlen((char *)cmd));
  cmd = "AT+GMR\r\n";
  ESP32_SendCmd(cmd,strlen((char *)cmd));
效果图:


![[创业之路-225]:《华为闭环战略管理》-4-华为的商业智慧:在价值链中探索取舍之道与企业边界](https://i-blog.csdnimg.cn/direct/7ac721d38ade407b961e933085d81474.png)










![Java [后端] 开发日常记录(1)](https://i-blog.csdnimg.cn/blog_migrate/b8c6a793712d05bde2bd3e323b0a4be0.png)






