目录
1.实验目标
2.实验准备
3.主流程图
4.驱动代码
5.实验步骤
1.实验目标
本实验使用W5500服务器功能,通过串口实现与本地客户端透传数据。
2.实验准备
硬件搭建:ZW-HC32F460-BZ标准版开发板1套
软件搭建:MDK5.22
3.主流程图
4.驱动代码
【W5500 tcp server函数】
该函数需要W5500在TCP模式下,才能当服务器使用。
void do_tcp_server(void)
{
uint16 len=0;
switch(getSn_SR(SOCK_TCPS)) // 获取socket的状态
{
case SOCK_CLOSED: // socket处于关闭状态
socket(SOCK_TCPS ,Sn_MR_TCP,local_port,Sn_MR_ND); // 打开socket
break;
case SOCK_INIT: // socket已初始化状态
listen(SOCK_TCPS); // socket建立监听
break;
case SOCK_ESTABLISHED: // socket处于连接建立状态
if(getSn_IR(SOCK_TCPS) & Sn_IR_CON)
{
setSn_IR(SOCK_TCPS, Sn_IR_CON); // 清除接收中断标志位
}
len=getSn_RX_RSR(SOCK_TCPS); // 定义len为已接收数据的长度
if(len>0)
{
recv(SOCK_TCPS,tcp_server_buff,len); // 接收来自Client的数据
tcp_server_buff[len]=0x00; // 添加字符串结束符
printf("%s\r\n",tcp_server_buff);
send(SOCK_TCPS,tcp_server_buff,len); // 向Client发送数据
}
break;
case SOCK_CLOSE_WAIT: // socket处于等待关闭状态
disconnect(SOCK_TCPS); // 断开当前TCP连接
close(SOCK_TCPS); // 关闭当前所使用socket
break;
}
}
W5500作为服务器时,本机IP地址和端口号就是服务器的IP地址和端口号,如下所示:
/*定义默认IP信息*/
uint8 local_ip[4]={192,168,1,25}; /*定义W5500默认IP地址*/
uint8 subnet[4]={255,255,255,0}; /*定义W5500默认子网掩码*/
uint8 gateway[4]={192,168,1,1}; /*定义W5500默认网关*/
uint8 dns_server[4]={114,114,114,114}; /*定义W5500默认DNS*/
5.实验步骤
【第一步:新建/配置工程】
将DCHCP实验工程复制到实验目录下,将工程名改为W5500_Server,FWLibCfg.h文件中的配置与DCHCP实验一样。
【第二步:添加W5500模块应用驱动】
将W5500_APP头文件和源复制到\实验41 TCP Server实验\Hardware\Peripheral路径下,同时将文件添加到工程中Hardware/Peripheral下。
【第三步:初始化编程】
1)添加相关头文件
在main.c文件中添加。
#include "hc32_ddl.h"
#include "w5500_conf.h"
#include "w5500.h"
#include "W5500_APP.h"
2)配置W5500的SPI引脚
配置与实验39:DHCP实验一致。
3)相关函数初始化
在main函数中初始化W5500相关函数
HardwareInt();
gpio_for_w5500_config(); //W5500 SPI接口reset 及中断引脚
reset_w5500(); // w5500硬件复位
PHY_check(); // 网线检测程序
set_w5500_mac(); // 设置w5500MAC地址
set_w5500_ip(); //配置W5500的IP地址
socket_buf_init(txsize, rxsize); // 初始化4个Socket的发送接收缓存大小
printf("\r\n W5500为TCP Server,建立侦听。等待PC作为TCP Client建立连接。\r\n");
printf(" TCP Server IP:%d.%d.%d.%d。\r\n",local_ip[0],local_ip[1],local_ip[2],local_ip[3]);
printf(" TCP Server Port:%d。\r\n",local_port);
printf(" 正常现象:连接成功,TCP Client发送数据给W5500,W5500将返回对应数据。\r\n");
【第四步:W5500做TCP服务器等待连接】
使用do_tcp_server()函数在主循环中等待客户端连接。
while(1)
{
do_tcp_server();
Ddl_Delay1ms(10);
}
【第五步:下载验证】
将电脑和HC32F460开发板连接到同一个路由器,处于同一局域网下,连接好硬件,编译下载运行该程序,查看串口助手收到信息是否与自己配置的信息一致。
打开卓物物联网工具集合软件,选择网络工具类-TCP客户端,输入W5500服务器IP地址和端口号,连接即可。
在客户端发送区输入字符串“test”,发送成功后,接收区也会收到字符串“test”。
此时串口助手接受到字符串“test”。