4.基于stm32f103发送AT指令操作esp8266

硬件:esp8266 01s;

95e8dd850ccf48cda2228c040f23a073.jpg

 USB转TTL模块;

1edbce57c73c431eb28a8e3cce95c002.jpeg

 stm32f103c8t6;

a6674cf5ed034e16822be0f46b40c977.jpg

 软件:STM32CubeMX(可以到官网下载)、Keil5(可以到哔哩哔哩下载)、串口助手(文章1有下载链接)。

/*----------------------------------------------------------*/
/*函数名:连接WIFI网络函数                                   */
/*参  数:最长等待时间time,AT指令cmd,esp8266响应response   */
/*返回值:0成功,1失败                                       */
/*----------------------------------------------------------*/
char esp8266_AT(uint8_t time,char *cmd,char *response)
{
	memset(Usart3type.DMARecBuffer,0,Usart3_DMARecBuffer_Size);//清空DMA接受缓存区
	Usart3type.DMARecLen = 0;
	Usart3_printf("%s\r\n",cmd);
	HAL_Delay(2000);
	while(time--)
	{
		HAL_Delay(10);
		if(strstr((const char*)Usart3type.RecBuffer,response))
			break;
	}
	if(Usart3type.RecFlag)
	{
		printf("%d\r\n",Usart3type.RecLen);
		printf("%s\r\n",Usart3type.RecBuffer);
		memset(Usart3type.RecBuffer,0,Usart3_RecBuffer_Size);
		Usart3type.RecLen = 0;
		Usart3type.RecFlag = 0;
	}
	if(time>1)
	{
		printf("成功\r\n");
		return 0;//成功
	}    
  else
    return 1;//失败
}

 在usart.h添加

#include "stdio.h"
#include "stdarg.h"

 在usart.c添加

/*-------------------------------------------------*/
/*函数名:串口3 printf函数                           */
/*参  数:char* fmt,...  格式化输出字符串和参数     */
/*返回值:无                                         */
/*-------------------------------------------------*/
void Usart3_printf(char *format,...)
{
	char TxStringBuff[100];
	uint8_t length=0;
	va_list arg;
	va_start(arg,format);
	vsprintf(TxStringBuff,format,arg);
	va_end(arg);
	
	length=strlen((const char*)TxStringBuff);
	HAL_UART_Transmit(&huart3, (uint8_t *)TxStringBuff, length, HAL_MAX_DELAY);
}
printf("1.准备配置WiFi模式\r\n");//1
	if(esp8266_AT(100,"AT+CWMODE=3\r\n","OK"))
	{
		printf("配置WIFI模式失败!\r\n");
		esp8266_Init_flag = 1;
	}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我明白了。以下是基于STM32F103C8T6与ESP8266通过USART2串口连接,STM32F103C8T6发送AT指令ESP8266连接服务器或发送数据程序和服务器ESP8266发送数据给STM32F103C8T6的参考代码: STM32F103C8T6发送AT指令ESP8266连接服务器或发送数据程序: ```c #include "stm32f10x.h" void USART2_Config(void) { GPIO_InitTypeDef GPIO_InitStruct; USART_InitTypeDef USART_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStruct); USART_InitStruct.USART_BaudRate = 9600; USART_InitStruct.USART_WordLength = USART_WordLength_8b; USART_InitStruct.USART_StopBits = USART_StopBits_1; USART_InitStruct.USART_Parity = USART_Parity_No; USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; USART_Init(USART2, &USART_InitStruct); USART_Cmd(USART2, ENABLE); } char USART2_receive_char(){ while (USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == RESET); return USART_ReceiveData(USART2); } void USART2_send_char(char c){ while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET); USART_SendData(USART2, c); } void USART2_send_string(char *str){ int i = 0; while (str[i]){ USART2_send_char(str[i]); i++; } } int main(void) { USART2_Config(); // 配置USART2串口 USART2_send_string("AT+CWJAP=\"SSID\",\"PASSWORD\"\r\n"); // 连接WiFi delay_ms(2000); // 延时2秒 USART2_send_string("AT+CIPSTART=\"TCP\",\"IP\",PORT\r\n"); // 连接服务器 delay_ms(2000); // 延时2秒 USART2_send_string("AT+CIPSEND=6\r\n"); // 发送数据前设置数据长度为6 USART2_send_string("Hello\r\n"); // 发送数据 delay_ms(2000); // 延时2秒 while(1); } ``` ESP8266发送数据给STM32F103C8T6程序: ```c #include "stm32f10x.h" void USART2_Config(void) { GPIO_InitTypeDef GPIO_InitStruct; USART_InitTypeDef USART_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStruct); USART_InitStruct.USART_BaudRate = 9600; USART_InitStruct.USART_WordLength = USART_WordLength_8b; USART_InitStruct.USART_StopBits = USART_StopBits_1; USART_InitStruct.USART_Parity = USART_Parity_No; USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; USART_Init(USART2, &USART_InitStruct); USART_Cmd(USART2, ENABLE); } char USART2_receive_char(){ while (USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == RESET); return USART_ReceiveData(USART2); } void USART2_send_char(char c){ while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET); USART_SendData(USART2, c); } void USART2_send_string(char *str){ int i = 0; while (str[i]){ USART2_send_char(str[i]); i++; } } int main(void) { USART2_Config(); // 配置USART2串口 while(1) { if (USART_GetFlagStatus(USART2, USART_FLAG_RXNE) != RESET) // 接收到数据 { char receive_data = USART_ReceiveData(USART2); if (receive_data == '\n') // 数据接收完毕 { USART2_send_string("Received data: "); // 回复数据接收成功 USART2_send_string(received_data); USART2_send_string("\r\n"); received_data = ""; // 清空接收到的数据 } else { received_data += receive_data; // 继续接收数据 } } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值