四十二,esp8266代码讲解

ESP8266与单片机通讯其实就是串口,只是很具有代表性,单独详细的说明一下,这样就算时间长了自己忘记了,看看笔记还能回想起来.

1,目标:通过WiFi控制LED和蜂鸣器.

2,实现

2.1配置cube内容

初始化串口,LED,蜂鸣器,按键

2.2 新建工程

然后一顿复制粘贴,注意配置的时候串口3要把中断打开,不然调了两小时都是只能发送不能接收………………555

3,代码

分为3大块

主函数,串口发送,串口接收

3.1串口接收

.h

.c

注释,

UART_HandleTypeDef huart3;是CUBE直接生成在main里的,打开几个串口就生成几个这种函数,用于配置串口,但是在别的文件里调用需要加extern—–extern UART_HandleTypeDef huart3;//声明USART3的HAL库结构体,extern定义的变量其他文件可以使用

先判断中断源

然后判断接收数据

1,使用HAL直接的接收函数,接收一个字节的串口3的数据赋值给当前接收数据的变量USART3_NewData

2,相当于先判断一个接收协议的首字节(0X0A)需要先对应的上.esp8266发送的数据自动会在头添加一个回车,所以把这个回车当起始位就行.

如果收到回车(0X0A)且接收标志最高位不等于1[(0x800->1000 0000), !(非零)=0, !(零)=1], 这样只有USART3_RX_STA的0的时候才满足条件.

进入if后把标志位USART3_RX_STA设置为0x400(100 0000 0000),然后把接收缓存清0.

3,第2步把标志位把标志位设置为0X400,这样就满足条件进入了第3步且这个接收条件一直保持满足,可以一直接收.2和3同级别不是嵌套.

先把当前接收的一个字节保存到接收缓存数组里,然后数组的元素加1继续保存,与上3fff(11 1111 1111 1111)限制接收内容保存在bit13~0.后两位其他作用bit15:接收完成标志,bit14:接收到0x0d.

判断接收的数组里前6位是+IPD,1:,第7位等于0,说明没有接收到7位数据.然后不等于0的时候为真,说明接收到就数据,并把第7位的最高位置1,然后把缓存第7位赋值给标志位

加0X8000是把接收标志的最高位置1, 如果主函数检测到标志的最高位置1了,就进行判断,当条件满足会执行相应的功能,执行完毕会把标志位清0,准备下次接收

注意:USART3_RX_STA = USART3_RX_BUF[7]+0x8000这样就不能满足USART3_RX_STA&0x4000啦,把第7次接收的数据加0X8000赋值给USART3_RX_STA会造成这个接收标志的第14位不再是0x4000,就不能满足继续数组保存数据的条件了.这样局可以等待下一次标记了.

3.2串口发送

.h

.c

WiFi发送命令的函数就是常用的串口发送的printf函数,但是 串口号不同,需要修改为串口3.

HAL_UART_Transmit(&huart3,(uint8_t *)buff,i,0xffff);其余都一样.

Tcp函数就是在wifi命令的基础上加上一个 计算数据长度的函数,然后固定发送数据的命令AT+CIPSEND=加上长度.