物联网项目设计(三)STM32配置ESP8266使用 STA TCP客户端模式初步

本文详细介绍如何使用STM32通过串口与ESP8266进行通讯,配置ESP8266进入STA模式,实现与上层服务器的TCP透传链接。从硬件准备到软件配置,再到具体代码实现,提供了完整步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码地址

https://github.com/FranHawk/STM32_ESP8266_STA.git

概要

本部分内容介绍如何使用STM32配置ESP8266使用STA模式,这个是使用MQTT与上层服务器链接的必要前提,笔者也是第一次使用ESP8266,通过AT指令来配置,查找了很多资料与代码,借鉴了正点原子ESP8266库和例程,在其基础上修改而来,这篇博客也是我边学边写的记录。

准备

硬件准备

  • 带有stm32主控的硬件一套
  • esp8266模块一个
  • 路由器一个

软件准备

  • CubeMx用来配置工程
  • MDK5用于编写调试和下载代码

配置ESP8266的步骤

配置ESP8266的目的是为了进入透传模式从而使用MQTT链接网络,我们需要使用AT指令,使ESP8266进入透传模式,步骤如下
1.AT+CWMODE=1 设置模块为STA模式
2.AT+CWAUTOCONN=0

按顺序要执行指令 执行指令的意义
+++ 退出透传模式
AE0 关闭回显
AT+CWMODE=1 设置模块为STA模式
AT+RST 重启生效
等待三秒 等待三秒
AT+CWAUTOCONN=0 取消自动连接
AT+ CWJAP = <ssid>,< password> 连接路由器
AT+CIPMUX=0 关闭多链接
AT+CIPSTART="TCP","IP号",端口号 连接到服务器
AT+CIPMODE=1 设置为透传模式
AT+CIPSEND 开启透传模式

ESP8266的发送命令函数由正点原子的函数改进而来
STM32与ESP8266通过串口连接,需要配置的模块有

  • TIM2,定时器中断,用来判断接收命令是否超时,如果超时就按照接受命令,中断优先级为1

  • USART1,用于向电脑发送数据,便于调试

  • USART3,用于向ESP发送数据,包括发送和接受,采用中断方式接收,查询方式发送,中断优先级为2

  • 整个发送命令并接收的流程比较复杂,用到了定时器中断来设置发送指令,接收到的回复是否完成,并在定时器中断中将接收指令的回复接受完成的标志位置为1,并且与预期回复进行比较。

  • 这样发送命令并接收的整个流程的好处在于,可以保证发送指令的质量,得到准确的反馈。

  • 就好像你向一个人说,你帮我倒杯水好吗,然后要等待他的回复,如果听到他说:好的。说明他听到了我们的命令,这个时候我们才能放心。

在这里插入图片描述

实际操作部分

CubeMx配置工程

配置工程就像我上面所述的步骤,需要配置相应的外设,两个串口和一个定时器

1.打开CubeMx,选择对应型号的芯片,始终选择外部晶振
在这里插入图片描述
2.查看原理图,选择相应的引脚在这里插入图片描述
在这里插入图片描述
配置UART1,UART3,并设置波特率
在这里插入图片描述
设置定时器2,并开启定时器中断,分频为7200,重装值为500,这样,接收信息的缓冲时间为50ms
在这里插入图片描述
设置中断分组与中断优先级
在这里插入图片描述

配置时钟树,使主频最高为72MHZ
在这里插入图片描述
配置工程并生成代码
在这里插入图片描述

编写ESP8266函数并添加配套函数

首先添加两个uart重定向printf函数和uart接收中断处理函数
void u3_printf(char* fmt,...)  
{
     
	uint8_t i,j; 
	va_list ap; 
	va_start(ap,fmt);
	vsprintf((char*)USART3_TX_BUF,fmt,ap);
	va_end(ap);
	i=strlen((const char*)USART3_TX_BUF);		//此次发送数据的长度
	for(j=0;j<i;j++)							//循环发送数据
	{
   
		while((USART3->SR&0X40)==0);			//循环发送,直到发送完毕   
		USART3->DR=USART3_TX_BUF[j];  
	} 
}

void u1_printf(char* fmt,...)  
{
     
	uint8_t i,j; 
	va_list ap; 
	va_start(ap,fmt);
	vsprintf((char*)USART1_TX_BUF,fmt,ap);
	
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值