需求描述
测试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代码:
cs
int fputc(int ch, FILE *file)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 1000);
return ch;
}
3》Interface文件下的esp32.h文件:
cs
#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文件:
cs
#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文件:
添加
cs
#include "esp32.h"
int main(void)大括号下添加
cs
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));
效果图: