教你如何通过MCU将S2E配置为UDP的工作模式

  • W5500S2E-S1
  • Katrina
  • LV3工程师
  • |      2018-02-08 11:10:09
  • 浏览量 1372
  • 回复:0
本帖最后由 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 } 在下一篇教你如何通过MCUS2E配置为TCP Server的工作模式中,我将继续与大家分享WIZnet W5500S2E-S1功能的实现,请大家拭目以待。 WIZnet官方网站:http://www.iwiznet.cn/ WIZnet官方技术服务QQ群:595547972 更多物联网应用,关注WIZnet官方微信号:
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:0
x
收藏成功!点击 我的收藏 查看收藏的全部帖子