STM32 之串口WIFI应用--基于RTOS的环境
STM32的产品应用
文章目录
- STM32的产品应用
- 1 项目介绍
- 1.1 ATK-ESP8266介绍
- 1.2 ATK-ESP8266 WIFI 模块的原理图
- 1.3 常见指令
- 1.4 数据传输
- 2 STM32接口
- 2.1 原理图说明
- 2.2 硬件初始化
- 2.2.1 初始化寄存器
- 2.2.2 配置中断获取程序
- 2.2.3 发送程序
- 3 WIFI 模组初始化程序
- 3.1 背景知识介绍
- 3.2 配置代码
1 项目介绍
本次项目利用WIFI模块设置成为STA模式,访问特定目标机。把检测到温湿度数据上传到
1.1 ATK-ESP8266介绍
ATK-ESP8266 是 ALIENTEK 推出的一款高性能的 UART-WiFi(串口-无线)模块,ATK-ESP8266 板载正点原子团队自主开发的 ATK-ESP-01 模块,该模块通过 FCC,CE 认证,可直接用于产品出口欧美地区。
ATK-ESP8266 模块采用串口(LVTTL)与 MCU(或其他串口设备)通信,内置 TCP/IP协议栈,能够实现串口与 WIFI 之间的转换。
通过 ATK-ESP8266 模块,传统的串口设备只是需要简单的串口配置,即可通过网络(WIFI)传输自己的数据。
ATK-ESP8266 模块支持 LVTTL 串口,兼容 3.3V 和 5V 单片机系统,可以很方便的与你的产品进行连接。模块支持串口转 WIFI STA、串口转 AP 和 WIFI STA+WIFI AP 的模式,从而快速构建串口-WIFI 数据传输方案,方便你的设备使用互联网传输数据。
ATK-ESP8266 模块非常小巧(29mm*19mm),模块通过 6 个 2.54mm 间距的排针与外部连接,
1.2 ATK-ESP8266 WIFI 模块的原理图
1.3 常见指令
在 AT 模式下可以通过串口的 AT 指令对系统参数做配置。指令格式如下:
AT+=\r\n
根据不同指令,模块将返回不同的返回值。其中\r\n 为回车换行符,用 16 进制表示,
就是 0X0D,0X0A。
例如:“AT+CWMODE?\r\n”查询当前模块的 WIFI 模式。
例如:“AT+CWMODE=3\r\n”设置模块 WIFI 模式为 AP+STA 模式。
1.4 数据传输
数据通过串口直接发送,发送直接需要指令,告知需要发送多少字节。
2 STM32接口
2.1 原理图说明
STM32 连接到 串口模块
W_TX 连接到 RXD_TTL
W_RX 连接到 TXD_TTL
VCC 连接到 VCC
GND 连接到 GND
2.2 硬件初始化
2.2.1 初始化寄存器
与WIFI 模块默认通讯波特率115200,使用是PB10和PB11号口。
void usart3_init(void)
{ NVIC_InitTypeDef NVIC_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE); //使能GPIOB时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);//使能USART3时钟USART_DeInit(USART3); //复位串口3GPIO_PinAFConfig(GPIOB,GPIO_PinSource11,GPIO_AF_USART3); //GPIOB11复用为USART3GPIO_PinAFConfig(GPIOB,GPIO_PinSource10,GPIO_AF_USART3); //GPIOB10复用为USART3 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_10; //GPIOB11和GPIOB10初始化GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHzGPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉GPIO_Init(GPIOB,&GPIO_InitStructure); //初始化GPIOB11,和GPIOB10USART_InitStructure.USART_BaudRate = usart3_baud_rate;//波特率 USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式 USART_Init(USART3, &USART_InitStructure); //初始化串口3USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//开启中断 USART_ITConfig(USART3, USART_IT_IDLE, ENABLE);//开启中断 NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//抢占优先级2NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器USART_Cmd(USART3, ENABLE); //使能串口
// 创建信号量rt_sem_init(&rt_sem_usart3,"wifi_sem",0,RT_IPC_FLAG_FIFO);
}
INIT_BOARD_EXPORT(usart3_init); // 初始化流程
2.2.2 配置中断获取程序
利用接收中断,来采集数据。 利用空闲中断,设置字符串结束标志位。
void USART3_IRQHandler(void)
{ rt_interrupt_enter();if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//接收到数据{ USART3_RX_BUF[USART3_RX_CNT++]=USART_ReceiveData(USART3); // 采集信息 if(USART3_RX_CNT>=USART3_MAX_RECV_LEN)USART3_RX_CNT=0; USART_ClearITPendingBit(USART3, USART_IT_RXNE);}else if(USART_GetITStatus(USART3, USART_IT_IDLE) != RESET){ USART_ReceiveData(USART3); // 清楚标志位USART3_RX_BUF[USART3_RX_CNT]='\0'; // 添加结束符号USART3_RX_CNT=0;rt_sem_release(&rt_sem_usart3); // 释放信号量}rt_interrupt_leave();
}
2.2.3 发送程序
循环发送字符串,利用字符串截至符号控制发送的长度
void usart_send(USART_TypeDef *usart,char *p_str)
{u32 size = rt_strlen(p_str);for(u32 i=0;i<size;i++){USART_SendData(usart, *p_str++);while (USART_GetFlagStatus(usart, USART_FLAG_TC) == RESET){}}
}
3 WIFI 模组初始化程序
3.1 背景知识介绍
串口无线 STA(COM-WIFI STA)模式,模块作为无线 WIFI STA,用于连接到无线网络,实现串口与其他设备之间的无线(WIFI)数据转换互传。该模式下,根据应用场景的不同,可以设置 3 个子模式:TCP 服务器、TCP 客户端,UDP。
接下来看看如何听过 AT 指令配置模块,达到我们所要的功能,这里仅列出必要配置。配置准备:1,模块处于默认设置(即出厂设置);2,准备一个无线路由器,且路由器开启DHCP 服务。
- 配置UDP 模式
- 串口无线 STA 模式,TCP 客户端配置
- 串口无线 STA 模式,TCP 服务器配置。