教你如何通過MCU將S2E配置為UDP的工作模式
W5500S2E-S1是一款工業級串列埠轉乙太網模組,支援TCP Server、TCP Client和UDP三種工作模式,串列埠波特率最高可達1.152Mbps,並提供配套的上位機配置軟體,也可通過網頁或AT命令等方式輕鬆配置。
W5500S2E-S1模組整合了全硬體TCP/IP 協議棧乙太網介面晶片W5500,網路通訊更加快速、穩定、安全。使用者只需根據手冊中推薦的參考設計原理圖,即可快速完成硬體電路的設計,降低開發難度,節省開發時間。
今天我們就實際的來接觸一下W5500S2E-S1基於UDP工作模式的具體操作流程是什麼樣的,下面我們就來看看吧:
1、 具體操作流程
(1)、接線方式:
(2)、例程說明:
開啟“通過MCU配置S2E為UDP例程”,主程式中第一部分TIM3_Init();是設定一個幀中斷的時間定時器,這是因為該例程MCU的串列埠是通過幀中斷來接收AT命令配置S2E後返回的資料的。
第二部分USARTX_Init();初始化MCU用到的串列埠,這裡用USART1_Config();是printf功能,用於檢視除錯資訊。USART2_Config();用於配置S2E,需要注意的是該串列埠的配置引數需要同S2E的串列埠配置引數一致,否則配置失敗。
第三部分主迴圈中的UDP_Mode();用於配置S2E為UDP模式。S2E的AT命令列表詳見各個S2E型號的使用者手冊AT命令章節介紹。配置成功,串列埠列印“UDP Config Success!”,配置失敗串列埠列印“UDP Config Fail!”。
01 /****************************************************
02 函式名: UDP_Mode
03 形參: 無
04 返回值: 無
05 函式功能: 配置S2E為UDP模式
06 ****************************************************/
07 volatile uint8_t SendFlag=0;
08
09 void UDP_Mode(void)
10 {
11 uint8_t RecvFlag=1;
12 char *state;
13
14 switch(SendFlag)
15 {
16 case 0:
17 {
18 Usart_Send(USART2,"AT\r\n");
19 //終端檢測命令
20 while(RecvFlag)
21 {
22 if(RX2_Point & FRAME_LEN)
23 //如果接收到資料
24 {
25 state=strstr((char *)RecvBuff,"OK");
26 if(state!=NULL)
27 {
28 RX2_Point=0;
29 //接收標誌位置零
30 RecvFlag=0;
31 //狀態標誌位置零
32 SendFlag=1;
33 printf("Recv:%s\r\n",RecvBuff);
34 memset(RecvBuff,0,RECV_LEN);
35 }
36 else{
37 SendFlag=100;
38 RecvFlag=0;
39 }
40 }
41 }
42 }break;
43 case 1:
44 {
45 Usart_Send(USART2,"AT+ECHO=0\r\n");
46 //開啟(1)/關閉(0)回顯命令
47 RecvFlag=1;
48 while(RecvFlag)
49 {
50 if(RX2_Point & FRAME_LEN)//如果接收到資料
51 {
52 state=strstr((char *)RecvBuff,"OK");
53 if(state!=NULL)
54 {
55 RX2_Point=0;
56 RecvFlag=0;
57 SendFlag=2;
58 printf("Recv:%s\r\n",RecvBuff);
59 memset(RecvBuff,0,RECV_LEN);
60 }
61 else{
62 SendFlag=100;
63 RecvFlag=0;
64 }
65 }
66 }
67 }break;
68 case 2:
69 {
70 Usart_Send(USART2,"AT+C1_OP=2\r\n");
71 //配置為UDP模式命令
72 RecvFlag=1;
73 while(RecvFlag)
74 {
75 if(RX2_Point & FRAME_LEN)//如果接收到資料
76 {
77 state=strstr((char *)RecvBuff,"OK");
78 if(state!=NULL)
79 {
80 RX2_Point=0;
81 RecvFlag=0;
82 SendFlag=3; //狀態標誌位置零
83 printf("Recv:%s\r\n",RecvBuff);
84 memset(RecvBuff,0,RECV_LEN);
85 }
86 else{
87 SendFlag=100;
88 RecvFlag=0;
89 }
90 }
91 }
92 }break;
93 case 3:
94 {
95 Usart_Send(USART2,"AT+IP_MODE=1\r\n");
96 //配置為DHCP模式
97 RecvFlag=1;
98 while(RecvFlag)
99 {
100 if(RX2_Point & FRAME_LEN)//如果接收到資料
101 {
102 state=strstr((char *)RecvBuff,"OK");
103 if(state!=NULL)
104 {
105 RX2_Point=0;
106 RecvFlag=0;
107 SendFlag=4; //狀態標誌位置零
108 printf("Recv:%s\r\n",RecvBuff);
109 memset(RecvBuff,0,RECV_LEN);
110 }
111 else{
112 SendFlag=100;
113 RecvFlag=0;
114 }
115 }
116 }
117 }break;
118 case 4:
119 {
120 Usart_Send(USART2,"AT+C1_PORT=5000\r\n");
121 //配置本地埠號
122 RecvFlag=1;
123 while(RecvFlag)
124 {
125 if(RX2_Point & FRAME_LEN)//如果接收到資料
126 {
127 state=strstr((char *)RecvBuff,"OK");
128 if(state!=NULL)
129 {
130 RX2_Point=0;
131 RecvFlag=0;
132 SendFlag=5; //狀態標誌位置零
133 printf("Recv:%s\r\n",RecvBuff);
134 memset(RecvBuff,0,RECV_LEN);
135 }
136 else{
137 SendFlag=100;
138 RecvFlag=0;
139 }
140 }
141 }
142 }break;
143 case 5:
144 {
145 Usart_Send(USART2,"AT+C1_CLI_IP1=192.168.1.100\r\n");
146 //配置遠端主機IP地址
147 RecvFlag=1;
148 while(RecvFlag)
149 {
150 if(RX2_Point & FRAME_LEN)//如果接收到資料
151 {
152 state=strstr((char *)RecvBuff,"OK");
153 if(state!=NULL)
154 {
155 RX2_Point=0;
156 RecvFlag=0;
157 SendFlag=6; //狀態標誌位置零
158 printf("Recv:%s\r\n",RecvBuff);
159 memset(RecvBuff,0,RECV_LEN);
160 }
161 else{
162 SendFlag=100;
163 RecvFlag=0;
164 }
165 }
166 }
167 }break;
168 case 6:
169 {
170 Usart_Send(USART2,"AT+C1_CLI_PP1=5000\r\n");
171 //配置本地遠端埠號
172 RecvFlag=1;
173 while(RecvFlag)
174 {
175 if(RX2_Point & FRAME_LEN)//如果接收到資料
176 {
177 state=strstr((char *)RecvBuff,"OK");
178 if(state!=NULL)
179 {
180 RX2_Point=0;
181 RecvFlag=0;
182 SendFlag=7; //狀態標誌位置零
183 printf("Recv:%s\r\n",RecvBuff);
184 memset(RecvBuff,0,RECV_LEN);
185 }
186 else{
187 SendFlag=100;
188 RecvFlag=0;
189 }
190 }
191 }
192 }break;
193 case 7:
194 {
195 Usart_Send(USART2,"AT+START_MODE=0\r\n");
196 //配置啟動模式(0--AT模式,1--資料模式)
197 RecvFlag=1;
198 while(RecvFlag)
199 {
200 if(RX2_Point & FRAME_LEN)//如果接收到資料
201 {
202 state=strstr((char *)RecvBuff,"OK");
203 if(state!=NULL)
204 {
205 RX2_Point=0;
206 RecvFlag=0;
207 SendFlag=8; //狀態標誌位置零
208 printf("Recv:%s\r\n",RecvBuff);
209 memset(RecvBuff,0,RECV_LEN);
210 }
211 else{
212 SendFlag=100;
213 RecvFlag=0;
214 }
215 }
216 }
217 }break;
218 case 8:
219 {
220 Usart_Send(USART2,"AT+EXIT\r\n");
221 //儲存配置並進入資料模式
222 RecvFlag=1;
223 while(RecvFlag)
224 {
225 if(RX2_Point & FRAME_LEN)//如果接收到資料
226 {
227 state=strstr((char *)RecvBuff,"OK");
228 if(state!=NULL)
229 {
230 RX2_Point=0;
231 RecvFlag=0;
232 SendFlag=99; //狀態標誌位置零
233 printf("Recv:%s\r\n",RecvBuff);
234 memset(RecvBuff,0,RECV_LEN);
235 }
236 else{
237 SendFlag=100;
238 RecvFlag=0;
239 }
240 }
241 }
242 }break;
243 case 99:
244 {
245 printf("UDP Config Success!\r\n");
246 Config_OK=1;
247 }
248 default:
249 RecvFlag=100;break;
250 case 100:
251 {
252 printf("UDP Config Fail!\r\n");
253 Config_OK=1;
254 }break;
255 }
256 }
在下一篇“教你如何通過MCU將S2E配置為TCP Server的工作模式”中,我將繼續與大家分享WIZnet W5500S2E-S1功能的實現,請大家拭目以待。
WIZnet官方網站:http://www.iwiznet.cn/
更多物聯網應用,關注WIZnet官方微訊號:
相關文章
- 教你如何通過MCU配置S2E為TCP Server的工作模式TCPServer模式
- 工作筆記——CPLD與MCU通過SPI通訊筆記
- TCP和UDP是如何工作的TCPUDP
- C# 通過socket實現UDP 通訊C#UDP
- MCU的SPI通訊介面
- 理解TCP/IP、UDP - 通過nodejs的net模組TCPUDPNodeJS
- 如何通過自學找到一份開發的工作?
- 終於將SAP系統完全配置通過了
- 使用UDP如何進行網路通訊UDP
- 通過裝飾器模式為 RoundedBitmapDrawable 加邊框模式
- 通過nginx進行udp報文負載均衡NginxUDP負載
- 通過 Socket 實現 UDP 程式設計 入門UDP程式設計
- 通過反射將物件轉化為檔案,同時反向將檔案還原為物件(適用配置檔案讀寫)反射物件
- 為何大多數MCU微控制器工作電壓為5V?
- 【實戰】通過 JS 將 HTML 匯出為 PDF 文件JSHTML
- 邦芒職場:教你職場工作的正確溝通方式
- Linux中的UDP通訊LinuxUDP
- udp網路通訊UDP
- Python - UDP通訊PythonUDP
- ACE中UDP通訊UDP
- UDP雙向通訊UDP
- 通過BetterTouchTool提升你的工作效率
- Android透過接收UDP訊息改寫程式配置AndroidUDP
- 如何將樹莓派配置為列印伺服器樹莓派伺服器
- 通過MVC模式將Web檢視和邏輯程式碼分離MVC模式Web
- 如何通過配置高效環境實現PHP優化PHP優化
- Windows 11中如何將游標更改為暗模式的方法教程Windows模式
- 如何透過C++ 將資料寫入 Excel 工作表C++Excel
- 兩個不同工作電壓下的MCU之間,是怎樣進行串列埠通訊的串列埠
- 化虹為橋 - Nginx 如何代理 UDP “連線”NginxUDP
- 如何將MCU與FPGA進行配對達到提高系統效率的目的?FPGA
- 為什麼MCU也需要AI?AI
- java實現UDP通訊JavaUDP
- 網路通訊1:UDPUDP
- 為什麼我不建議你通過 Python 去找工作?Python
- 鎖定客戶的六大策略:教你如何將切換成本嵌入商業模式模式
- C# wm6透過udp協議和pc通訊C#UDP協議
- 11gr2通過配置ntp.conf來觀察ctssd.log中CTSSD模式為ACTIVE或者observer模式Server