本帖最后由 Katrina 于 2018-2-8 11:13 编辑
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命令章节介绍。配置成功,串口打印“UDPConfig Success!”,配置失败串口打印“UDPConfig Fail!”。01
/****************************************************02 函数名: UDP_Mode03 形参: 无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官方技术服务QQ群:595547972
更多物联网应用,关注WIZnet官方微信号:
本帖最后由 Katrina 于 2018-2-8 11:13 编辑
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命令章节介绍。配置成功,串口打印“UDPConfig Success!”,配置失败串口打印“UDPConfig Fail!”。01
/****************************************************02 函数名: UDP_Mode03 形参: 无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官方技术服务QQ群:595547972
更多物联网应用,关注WIZnet官方微信号: