需求描述
测试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文件:
添加
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));
复制代码 结果图:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |