教你如何通過MCU配置S2E為TCP Client的工作模式

串口轉以太網, 博客, 物聯網
在上兩篇文章中分別講述了通過MCU配置S2E為UDP、TCP Server的工作模式”,相信小夥伴們已經對S2E的基本功能了解了一些,現在就讓我們再接再厲、更上一層樓吧: 首先我們先了解一下MCU與S2E的接線方式: 1、接線方式: 2、例程說明: 打開“通過MCU配置S2E為TCP Client例程”,主程序中第一部分TIM3_Init();是設定一個幀中斷的時間定時器,這是因為該例程MCU的串口是通過幀中斷來接收AT命令配置S2E後返回的數據的。 第二部分USARTX_Init();初始化MCU用到的串口,這裡用USART1_Config();是printf功能,用於查看調試信息。USART2_Config();用於配置S2E,需要注意的是該串口的配置參數需要同S2E的串口配置參數一致,否則配置失敗。 第三部分主循環中的TCP_Client_Mode();用於配置S2E為TCP Client模式。S2E的AT命令列表詳見各個S2E型號的用戶手冊AT命令章節介紹。配置成功,串口打印“TCP Client Config Success!”,配置失敗串口打印“TCP Client Config Fail!”。 /**************************************************** 函數名:TCP_Client_Mode 形參:無 返回值:無 函數功能:通過串口發送AT命令配置S2E模塊 ****************************************************/ volatile uint8_t SendFlag = 0; void TCP_Client_Mode(void) { uint8_t RecvFlag = 1; char *state; switch (SendFlag) { case 0: { Usart_Send(USART2, "AT\r\n"); //終端檢測命令 while (RecvFlag) { if (RX2_Point & FRAME_LEN) { //如果接收到數據 state = strstr((char*) RecvBuff, "OK"); //判斷回復的數據中是否有“OK” if (state != NULL) { //有 RX2_Point = 0; //接收緩衝區指針置零 RecvFlag = 0; //接收標緻位置零 SendFlag = 1; //發送標誌位置零 printf("Recv:%s\r\n", RecvBuff); memset(RecvBuff, 0, RECV_LEN); //接收緩存清零 } else { //無 SendFlag = 100; //配置失敗 RecvFlag = 0; } } } } break; case 1: { Usart_Send(USART2, "AT+ECHO=0\r\n"); //開啟(1)/關閉(0)回顯命令 RecvFlag = 1; while (RecvFlag) { if (RX2_Point & FRAME_LEN) { state = strstr((char*) RecvBuff, "OK"); if (state != NULL) { RX2_Point = 0;…
Read More

教你如何通過MCU配置S2E為TCP Server的工作模式

串口轉以太網, 博客, 物聯網
在上一篇文章中講了“如何通過MCU配置S2E為UDP模式”,相信小夥伴們已經了解了S2E的基本功能,在這一篇中,我們再接再厲,繼續學習一下“如何通過MCU配置S2E為TCP Server的工作模式”,無論是配置UDP模式還是配置TCP模式,都是通過串口轉以太網的方式實現的: 1、接線方式 2、例程說明 打開“通過MCU配置S2E為TCP Server例程”,主程序中第一部分TIM3_Init();是設定一個幀中斷的時間定時器,這是因為該例程MCU的串口是通過幀中斷來接收AT命令配置S2E後返回的數據的。 第二部分USARTX_Init();初始化MCU用到的串口,這裡用USART1_Config();是printf功能,用於查看調試信息。USART2_Config();用於配置S2E,需要注意的是該串口的配置參數需要同S2E的串口配置參數一致,否則配置失敗。 第三部分主循環中的TCP_Server_Mode();用於配置S2E為TCP Server模式。S2E的AT命令列表詳見各個S2E型號的用戶手冊AT命令章節介紹。配置成功,串口打印“TCP Server Config Success!”,配置失敗串口打印“TCP Server Config Fail!”。 /**************************************************** 函數名: TCP_Server_Mode 形參: 無 返回值: 無 函數功能: 通過串口發送AT命令配置S2E模塊 ****************************************************/ volatile uint8_t SendFlag = 0; void TCP_Server_Mode(void) { uint8_t RecvFlag = 1; char * state; switch (SendFlag) { case 0: { Usart_Send(USART2, "AT\r\n"); //終端檢測命令 while (RecvFlag) { if (RX2_Point & amp; FRAME_LEN) { //如果接收到數據 state = strstr((char * ) RecvBuff, "OK"); //判斷回復的數據中是否有“OK” if (state != NULL) { //有 RX2_Point = 0; //接收緩衝區指針置零 RecvFlag = 0; //接收標緻位置零 SendFlag = 1; //發送標誌位置零 printf("Recv:%s\r\n", RecvBuff); memset(RecvBuff, 0, RECV_LEN); //接收緩存清零 } else { //無 SendFlag = 100; //配置失敗 RecvFlag = 0; } } } } break; case 1: { Usart_Send(USART2, "AT+ECHO=0\r\n"); //開啟(1)/關閉(0)回顯命令 RecvFlag = 1; while (RecvFlag) { if (RX2_Point & amp; FRAME_LEN) { //如果接收到數據 state = strstr((char *…
Read More

教你如何通過MCU將S2E配置為UDP的工作模式

串口轉以太網, 博客, 物聯網
W5500S2E-S1是一款工業級串口轉以太網模塊,支持TCP Server,TCP Client和UDP三種工作模式,串口波特率最高可達1.152Mbps,並提供配套的上位機配置軟件,也可通過網頁或AT命令等方式輕鬆配置。 W5500S2E-S1模塊集成了全硬件TCP / IP協議棧以太網接口芯片W5500,網絡通信更加快速,穩定,安全。用戶只需根據手冊中推薦的參考設計原理圖,即可快速完成硬件電路的設計,降低開發難度,節省開發時間。 今天我們就實際的來了解一下W5500S2E-S1基於UDP工作模式的具體操作流程是什麼樣的,下面我們就來看看吧: 具體操作流程 (1),接線方式: (2)、例程說明: 打開“通過MCU配置S2E為UDP例程”,主程序中第一部分TIM3_Init();是設定一個幀中斷的時間定時器,這是因為該例程MCU的串口是通過幀中斷來接收AT命令配置S2E後返回的數據的。 第二部分USARTX_Init();初始化MCU用到的串口,這裡用USART1_Config();是printf功能,用於查看調試信息。USART2_Config();用於配置S2E,需要注意的是該串口的配置參數需要同S2E的串口配置參數一致,否則配置失敗。 第二部分USARTX_Init();初始化MCU用到的串口,這裡用USART1_Config();是printf功能,用於查看調試信息。USART2_Config();用於配置S2E,需要注意的是該串口的配置參數需要同S2E的串口配置參數一致,否則配置失敗。 /**************************************************** 函數名: UDP_Mode 形參: 無 返回值: 無 函數功能: 配置S2E為UDP模式 ****************************************************/ volatile uint8_t SendFlag = 0; void UDP_Mode(void) { uint8_t RecvFlag = 1; char *state; switch (SendFlag) { case 0: { Usart_Send(USART2, "AT\r\n"); //終端檢測命令 while (RecvFlag) { if (RX2_Point & FRAME_LEN) //如果接收到數據 { state = strstr((char*) RecvBuff, "OK"); if (state != NULL) { RX2_Point = 0; //接收標誌位置零 RecvFlag = 0; //狀態標誌位置零 SendFlag = 1; printf("Recv:%s\r\n", RecvBuff); memset(RecvBuff, 0, RECV_LEN); } else { SendFlag = 100; RecvFlag = 0; } } } } break; case 1: { Usart_Send(USART2, "AT+ECHO=0\r\n"); //開啟(1)/關閉(0)回顯命令 RecvFlag = 1; while (RecvFlag) { if (RX2_Point & FRAME_LEN) //如果接收到數據 { state = strstr((char*) RecvBuff, "OK"); if (state != NULL) { RX2_Point = 0; RecvFlag = 0; SendFlag…
Read More