最近看到很多社区论坛大神用ESP8266配合STM32F769 Discovery(STM32官网)做了很多高端的应用,想起我也有一个闲置好久的ESP8266模块,决定重新找出来折腾折腾。高端的应用我不会搞就弄个简单的上手程序给需要的做个参考。
STM32F32769 Discovery上有个ESP8266 串口WIFI模块的扩展接口,如果有模块的话直接装上即可使用,省了不少用杜邦线连接模块到开发板的板麻烦。我找了下丢在一边好久没用的ESP8266 吹吹灰然后插到板子上,看到熟悉的蓝灯闪烁几下灭掉红灯常亮应该问题不大可以继续战斗。
常见的串口WIFI模块在进入数据透传模式之前都会包含很多的AT命令用于设置模块、接收发送数据。如果是第一次接触最好的找个WIFI模块的评估开发板而不是一个单独的WIFI模块.一般的WIFI模块评估板上面都会有一个USB转串口用于测试熟悉各种的AT命令,等彻底了解了各种AT命令以及发送接收数据的设置后再在程序固化WIFI的初始化设置用的AT命令序列。比较幸运是ST官方的Discovery、Nucleo 开发板上都会有一个带虚拟串口的STLink,可以借助这个虚拟串口方便的进行AT命令测试,WIFI模块接收发送数据测试,这样在前期的测试中我们可以借助这个虚拟串口做一个类似中转的作用,不需要在程序中写任何的AT命令就可以测试所的模块的命令和数据收发。
1、虚拟串口中转数据
STM32F32769 Discovery 上的ESP8266扩展接口和MCU的UART5 相连,stlink的虚拟串口和MCU的USART1 相连,由于AT命令的收发都是不定长的数据,我们可以参考上一个帖子中超时中断+DMA的模式来设置USART1\UART5同时打开超时中断和DMA收发。这样做之后我们就可以直接在电脑上同过串口助手借助stlink的虚拟串口进行ESP8266的各种AT命令测试了。
stlink的虚拟串口超时中断的回调函数如下:
- <font size="3" face="Tahoma">void UART_ReceiverTimeOut_Callback(UART_HandleTypeDef *huart)
- {
- uint16_t len;
- uint32_t tmp1 = 0;
- tmp1 = __HAL_UART_GET_FLAG(huart, UART_FLAG_RTOF);
- if((tmp1 != RESET))
- {
- __HAL_UART_CLEAR_IT(huart, UART_CLEAR_RTOF);
- /* set uart state ready*/
- huart->RxState = HAL_UART_STATE_READY;
- /* Disable the rx DMA peripheral */
- __HAL_DMA_DISABLE(huart->hdmarx);
- /*Clear the DMA Stream pending flags.*/
- __HAL_DMA_CLEAR_FLAG(huart->hdmarx, __HAL_DMA_GET_TC_FLAG_INDEX(huart->hdmarx));
- /* get rx data len */
- len = huart->hdmarx->Instance->NDTR;
- U1_Rxlen = RXBUFFLENGTH - len;
- /* Process Unlocked */
- __HAL_UNLOCK(huart->hdmarx);
-
- huart->hdmarx->State = HAL_DMA_STATE_READY;
- HAL_UART_Receive_DMA(huart, U1_RxBuff, RXBUFFLENGTH);
- WIFI_CMD_Received_Sta = ENABLE;
- }
- }
- </font>
复制代码ESP8266超时中断回调函数如下: - <font size="3" face="Tahoma">void WIFI_ReceiverTimeOut_Callback(UART_HandleTypeDef *huart)
- {
- uint16_t len;
- uint32_t tmp1 = 0;
- tmp1 = __HAL_UART_GET_FLAG(huart, UART_FLAG_RTOF);
- if((tmp1 != RESET))
- {
- __HAL_UART_CLEAR_IT(huart, UART_CLEAR_RTOF);
- /* set uart state ready*/
- huart->RxState = HAL_UART_STATE_READY;
- /* Disable the rx DMA peripheral */
- __HAL_DMA_DISABLE(huart->hdmarx);
- /*Clear the DMA Stream pending flags.*/
- __HAL_DMA_CLEAR_FLAG(huart->hdmarx, __HAL_DMA_GET_TC_FLAG_INDEX(huart->hdmarx));
- /* get rx data len */
- len = huart->hdmarx->Instance->NDTR;
- WIFI_Rxlen = RXBUFFLENGTH - len;
- /* Process Unlocked */
- __HAL_UNLOCK(huart->hdmarx);
-
- huart->hdmarx->State = HAL_DMA_STATE_READY;
- HAL_UART_Receive_DMA(huart, WIFI_RxBuff, RXBUFFLENGTH);
- WIFI_CMD_Response_Sta = ENABLE;
- }
- }</font>
复制代码在mian函数中实现stlink虚拟串口的中转: - <font size="3" face="Tahoma">int main(void)
- {
- CPU_CACHE_Enable();
- HAL_Init();
- SystemClock_Config();
- USART1_Init();
- My_ESP8266_Init();
- while (1)
- {
- //发送接收的esp8266模块响应到stlink的虚拟串口
- if(WIFI_CMD_Response_Sta && WIFI_Rxlen)
- {
- HAL_UART_Transmit_DMA(&UartHandle, WIFI_RxBuff, WIFI_Rxlen);
- WIFI_CMD_Response_Sta = DISABLE;
- WIFI_Rxlen = 0;
- }
- //发送接收到的stlink虚拟串口数据esp8266模块
- if(WIFI_CMD_Received_Sta && U1_Rxlen)
- {
- HAL_UART_Transmit_DMA(&WiFiUartHandle,U1_RxBuff,U1_Rxlen);
- WIFI_CMD_Received_Sta = DISABLE;
- U1_Rxlen = 0;
- }
- }
- }</font>
复制代码通过上面的设置我们就可以用串口助手完全控制ESP8266模块了。
2、AT命令测试
我们先用AT命令看下ESP8266的版本信息和复位命令
然后查看下模块的工作模式和连接到路由器后的IP地址
3、TCP测试 除了测试模块的AT指令之外我们测试下TCP传输,设置模块和电脑连接同一个路由,模块发送数据到电脑的TCP Server调试软件,同时TCP Server发送数据到模块,基本的设置AT指令顺序如下: - <font size="3" face="Tahoma">1.设置工作模式:3(STA+AP)
- AT+CWMODE=3
- 2.设置无线路由器的用户名和密码
- AT+CWJAP="ssid","password"
- 3.查询IP,常见的是192.168.x.x局域网IP
- AT+CIFSR
- 4.设置单链接
- AT+CIPMUX=0
- 5.设置透传模式
- AT+CIPMODE=1
- 6.连接电脑上的TCPServer,IP和端口号根据具体情况进行修改即可
- AT+CIPSTART="TCP","192.168.1.102",8080
- 7.启动透传发送
- AT+CIPSEND
- 8.发送透传数据
- </font>
复制代码测试结果如下:
4、UDP测试
设置AT命令如下; - <font size="3" face="Tahoma">1.设置工作模式:3(STA+AP)
- AT+CWMODE=3
- 2.设置无线路由器的用户名和密码(已连接过路由请忽略)
- AT+CWJAP="ssid","password"
- 3.查询IP,常见的是192.168.x.x局域网IP
- AT+CIFSR
- 4.设置单链接
- AT+CIPMUX=0
- 5.设置透传模式
- AT+CIPMODE=1
- 6.连接电脑上的udp,IP和端口号根据具体情况进行修改即可
- AT+CIPSTART="UDP","192.168.1.102",8080,8899,0
- 7.启动透传发送
- AT+CIPSEND
- 8.发送透传数据</font>
复制代码测试结果:
除了上面的工作模式之外还有其他数据传输模块,借助于stlink的虚拟串口进行中转数据我们可以很快的熟悉AT命令和数据收发的设置。
5、ESP8266调试软件
如果感觉输入各种的AT命令麻烦可以使用ESP8266调试软件配合stlink的虚拟串口进行AT命令测试和数据收发测试
测试代码: |