通过UDP协议收/发数据


关键词:UDP  W5500  WIZnet  W5500EVB


W5500的UDP建立过程也是非常方便的,通过简单的读写寄存器便可以轻松实现。程序初始化完成以后,进入主循环函数。当Socket处于关闭状态时,在进行通信之前,我们先将该UDP模式的Socket端口初始化。当socket将处于 初始化完成状态即SOCK_UDP状态,此时就可以通过广播方式发送数据了。在测试之前要注意两个问题,首先建议关闭PC的防火墙;其次,若W5500模块与PC直接通过网线连接,需要修改PC的IP地址为静态IP,且保持与W5500的IP在 同一个网段;如果直接连接路由器,可以不用修改PC的IP地址。

UDP通信流程图如下

主循环代码如下:
while(1)																 		// Socket状态机
{
	switch(getSn_SR(0))															// 获取socket0的状态
	{
		case SOCK_UDP:												   			// Socket处于初始化完成(打开)状态
		Delay_ms(100);
		if(getSn_IR(0) & Sn_IR_RECV)
		{
			setSn_IR(0, Sn_IR_RECV);								 			// Sn_IR的RECV位置1
		}
					         													// 数据回环测试程序:数据从远程上位机发给W5500,W5500接收到数据后再回给远程上位机
		if((len=getSn_RX_RSR(0))>0)
		{ 
			memset(buffer,0,len+1);
			recvfrom(0,buffer, len, remote_ip,&remote_port);					// W5500接收来自远程上位机的数据,并通过SPI发送给MCU
			printf("%s\r\n",buffer);							   				// 串口打印接收到的数据
			sendto(0,buffer,len, remote_ip, remote_port);		  				// 接收到数据后再回给远程上位机,完成数据回环
		}
		break;
		case SOCK_CLOSED:														// Socket处于关闭状态
			socket(0,Sn_MR_UDP,local_port,0);									// 打开Socket0,并配置为UDP模式,打开一个本地端口
		break;
	}
}
	
UDP的测试步骤如下
  1. 在w5500_conf.c文件中设置ip_from为IP_FROM_DEFINE。
  2. 在Windows下的具体操作是,开始→运行→(键入)cmd,输入ipconfig→回车。将电脑IP地址赋给w5500_conf.c文件中的remote_ip变量。
  3. 对代码进行编译,之后将程序烧录到野火开发板。
  4. 连接好网线,USB串口线。打开串口调试工具,复位野火开发板,从输出结果可以得到图1设置信息。
  5. 如图1所示,设置Module IP为单片机的IP:192.168.1.88,Port为5000;Local port设置为计算机的端口5000,点击“连接”。
  6. 此时就可以通过发送数据进行通信测试了,通信效果如图3所示。这就说明W5500已经迅速通过UDP实现了数据的收发。

图1:UDP初始化信息

图2:通信测试


例程下载:【UDP】
编译环境:keil V5.11
硬件要求:W5500EVB