W5500EVB通过UDP协议收/发数据

硬件资料

硬件设计

工程下载

参考代码

实现步骤

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

UDP通信流程图如下:
在这里插入图片描述
UDP代码如下:

void do_udp()
{  
	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);		  		// 接收到数据后再回给远程上位机,完成数据回环
					//memset(buffer,0,sizeof(buffer));
				}
				// W5500从串口发数据给客户端程序,数据需以回车结束
				if(USART_RX_STA & 0x8000)				// 判断串口数据是否接收完成
				{					   
					len=USART_RX_STA & 0x3fff;		// 获取串口接收到数据的长度
					sendto(0,USART_RX_BUF,len,remote_ip, remote_port);			// W5500向客户端发送数据
					USART_RX_STA=0;								// 串口接收状态标志位清0
					memset(USART_RX_BUF,0,len+1);	// 串口接收缓存清0
				}
		break;
		case SOCK_CLOSED:																						// Socket处于关闭状态
				socket(0,Sn_MR_UDP,local_port,0);												// 打开Socket0,并配置为UDP模式,打开一个本地端口
		break;
	}
}

测试步骤

  1. 对代码进行编译,之后将程序烧录到W5500EVB开发板。
  2. 连接好网线,USB串口线。打开串口调试工具,复位W5500EVB开发板,从输出结果可以得到图1设置信息。
  3. 如图1所示,设置W5500EVB的IP为192.168.1.150,Port为5000;网络调试工具设置为计算机的端口5000,点击“Open”。
  4. 此时就可以通过发送数据进行通信测试了,通信效果如图3所示。这就说明W5500已经迅速通过UDP实现了数据的收发。
    在这里插入图片描述
    图1:UDP初始化信息
    在这里插入图片描述
    图2:通信测试
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值