OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4849|回复: 1

W7500 M0+MAC+TCP/IP 以太网单芯片方案 W7500 W7500EVB用户手册连载(19)--网络篇

[复制链接]

28

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
317
金钱
317
注册时间
2018-2-23
在线时间
37 小时
发表于 2018-3-20 16:29:56 | 显示全部楼层 |阅读模式
W7500(W7500P)芯片简介:
W7500 芯片为工业级以太网单芯片解决方案, 集成 ARM Cortex-M0,128KB Flash 及全硬件TCP/IP 核(和W5500、W5100内核一致),特别适用于物联网领域。 使用 W7500EVB, 让您轻松完成原型开发。

全硬件TCP/IP核的最大优点是他在执行联网操作时不需要占用MCU的运行资源,大大增加了MCU的工作效率。

TCP Client例程与TCP Server例程类似,本章节就主要应用函数进行讲解。TCP Client例程是将W7500EVB配置成TCP客户端模式, 向指定的TCP服务器IP、端口发起连接。实现数据的接收与发送。

想了解更多关于WIZnet W7500更多信息,或者有技术问题请联系我们:gustin@wisioe.com
深圳炜世科技—WIZnet官方代理商,全程技术支持,价格绝对优势!
电话:0755-86568556
邮箱:support@wisioe.com
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

28

主题

86

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
317
金钱
317
注册时间
2018-2-23
在线时间
37 小时
 楼主| 发表于 2018-3-20 16:31:16 | 显示全部楼层
第二十章 TCP Client20.1 TCP Client例程概述
       TCP Client例程与TCP Server例程类似,本章节就主要应用函数进行讲解。
       TCP Client例程是将W7500EVB配置成TCP客户端模式, 向指定的TCP服务器IP、端口发起连接。实现数据的接收与发送。
20.2 TCP客户端流程
1.JPG

图20.2.1 TCP Client流程图
20.3 TCP Client例程解析
       例程的初始化部分和Network install例程相同,在此就不在赘述了。具体分析TCP Client的应用函数do_tcp_client()。
[mw_shl_code=applescript,true]1.     int32_t tcpc(uint8_t sn, uint8_t* buf, uint8_t* destip, uint16_t destport,uint16_t local_port)
2.     {
3.       int32_t ret; // return value for SOCK_ERRORs
4.       uint16_t size = 0, sentsize=0;
5.       switch(getSn_SR(sn))                             /*获取socket的状态*/
6.       {
7.           case SOCK_ESTABLISHED :            /*socket处于连接建立状态*/
8.             if(getSn_IR(sn) & Sn_IR_CON)
9.             {
10.            setSn_IR(sn, Sn_IR_CON);             /*清除接收中断标志位*/
11.          }
12.          if((size = getSn_RX_RSR(sn)) > 0)
13.          {
14.            if(size > DATA_BUF_SIZE) size = DATA_BUF_SIZE;
15.            ret = recv(sn, buf, size);                  /*接收来自Server的数据*/
16.            if(ret <= 0) return ret;
17.            sentsize = 0;
18.            while(size != sentsize)
19.            {
20.              ret = send(sn, buf+sentsize, size-sentsize);/*向Server发送数据*/
21.              printf("%s\r\n",buf);
22.              if(ret < 0)
23.              {
24.                close(sn);
25.                return ret;
26.              }
27.              sentsize += ret;
28.            }
29.          }
30.          break;
31.        case SOCK_CLOSE_WAIT :                    /*socket处于等待关闭状态*/
32.          if((ret=disconnect(sn)) != SOCK_OK) return ret;
33.          #ifdef _LOOPBACK_DEBUG_
34.          printf("%d:Socket Closed\r\n", sn);
35.          #endif
36.          break;
37.        case SOCK_INIT :                           /*socket处于初始化状态*/
38.          #ifdef _LOOPBACK_DEBUG_
39.          printf("%d:Try to connect to the %d.%d.%d.%d : %d\r\n", sn, destip[0], destip[1], destip[2], destip[3], destport);
40.          #endif
41.          if( (ret = connect(sn, destip, destport)) != SOCK_OK) return ret; /*socket连接服务器*/
42.          break;
43.        case SOCK_CLOSED:               /*socket处于关闭状态*/
44.          close(sn);
45.          if((ret=socket(sn, Sn_MR_TCP, local_port, 0x00)) != sn) return ret; // TCP socket open with 'any_port' port number
46.          break;
47.        default:
48.          break;
49.    }
50.    return 1;
51.  }[/mw_shl_code]
       5~49行跟TCP Server例程一样,也是switch判断套接字状态,45初始化socket为TCP Client模式后,41行向指定端口IP的TCP Server发起连接,12行成功建立连接后判断空闲接收缓存寄存器接收数据的长度,如果读取的数据长度大于0则表示接收到数据,程序会将接收的数据回发给数据发送方。
       至此,TCP Server例程代码解析就结束了。将TCP Server例程编译烧录后打印串口信息结果如图20.3.1。
2.JPG
图20.3.1 TCP Client例程打印结果
       使用网络调试助手,PC机以TCP服务器身份等待W7500EVB连接,测试是否能收发数据。结果如图20.3.2,连接成功,收发数据正常。W7500EVB设置为TCP客户端模式成功。
   3.JPG
图20.3.2TCP Client例程数据交互

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 21:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表