你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 6169|回复: 4

【HAL库每天一例】第066例:以太网-基于W5500的11个应用例程

[复制链接]

122

主题

129

回帖

0

蝴蝶豆

论坛元老

最后登录
2019-5-28
发表于 2016-7-10 13:48:23 | 显示全部楼层 |阅读模式
本帖最后由 haohao663 于 2016-7-11 08:47 编辑

【HAL库每天一例】系列例程从今天开始持续更新。。。。。
我们将坚持每天至少发布一个基于YS-F1Pro开发板的HAL库例程,
该系列例程将带领大家从零开始使用HAL库,后面会持续添加模块应用例程。
同样的,我们还程序发布基于HAL库的指导文档和视频教程,欢迎持续关注,并提出改进意见。
例程下载:
资料包括程序、相关说明资料以及软件使用截图
链接:https://pan.baidu.com/s/1i574oPv
密码:r3s3

(硬石YS-F1Pro开发板HAL库例程持续更新\1. 软件设计之基本裸机例程(HAL库版本)\YSF1_HAL-064. 以太网-W5500


基于W5500的11个应用例程
2. DHCP
3. TCP Server
4. TCP Client
5. UDP
6. DNS
7. SMTP
8. HTTP Server
9. HTTP Client
10. NetBios
11. NTP
12. ping


/**
  ******************************************************************************
  *                           硬石YS-F1Pro开发板例程功能说明
  *
  *  例程名称: 3. TCP Server
  *   
  ******************************************************************************
  * 说明:
  * 本例程配套硬石stm32开发板YS-F1Pro使用。
  *
  * 淘宝:
  * 论坛:硬石电子社区
  * 版权归硬石嵌入式开发团队所有,请勿商用。
  ******************************************************************************
  */

【1】例程简介
  W5500 是一款全硬件 TCP/IP 嵌入式以太网控制器,为嵌入式系统提供了更加简易的互联网连接
方案.使用硬件逻辑门电路实现 TCP/IP 协议栈的传输层及网络层(如: TCP, UDP, ICMP, IPv4,
ARP, IGMP, PPPoE 等协议),并集成了数据链路层,物理层,以及 32K 字节片上 RAM 作为数据
收发缓存。使得上位机主控芯片,只需承担TCP/IP 应用层控制信息的处理任务。从而大大节省了上
位机对于数据复制、协议处理和中断处理等方面的工作量,提升了系统利用率及可靠性。
  YS-F1Pro开发板上集成了W5500芯片,可以实现网络通信。  
  本例程实现W5500网络环境搭建,实现TCP通信,W5500网络作为TCP 服务器,建立侦听,PC作为
TCP Client建立连接。
  
【2】跳线帽情况
******* 为保证例程正常运行,必须插入以下跳线帽 **********
丝印编号     IO端口      目标功能引脚        出厂默认设置
  JP1        PA10        TXD(CH340G)          已接入
  JP2        PA9         RXD(CH340G)          已接入
  JP8        PF9         INTn(W5500)          已接入
  JP9        PF11        SCSn(W5500)          已接入
  
【3】操作及现象
使用网线接入YS-F1Pro开发板右上方网口,连接至路由器;使用开发板配套的MINI USB线连接到开发
板标示“调试串口”字样的MIMI USB接口(需要安装驱动),在电脑端打开串口调试助手工具,设置
参数为115200 8-N-1。根据自己网络环境设置w5500_conf.c文件中相关参数,编译程序并下载,等下
载完程序之后,在串口调试助手窗口可接收到信息。打开网络调试助手,设置为TCP Client类型,服务
器IP地址和端口根据串口打印信息设置,然后连接开发板TCP Server,然后可以在发送窗口输入发送
数据;发送之后,在串口调试助手会打印接收到的数据并且会回传到网络通信助手。

/******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/


tcp_demo.c文件内容
  1. /**
  2. ************************************************************************************************
  3. * @file                   tcp_demo.c
  4. * @author                  WIZnet Software Team
  5. * @version                 V1.0
  6. * @date                    2015-02-14
  7. * @brief                   TCP 演示函数
  8. * @attention  
  9. ************************************************************************************************
  10. **/

  11. #include <stdio.h>
  12. #include <string.h>
  13. #include "Ethernet/Internet/tcp_demo.h"
  14. #include "Ethernet/W5500/W5500_conf.h"
  15. #include "Ethernet/W5500/w5500.h"
  16. #include "Ethernet/W5500/socket.h"

  17. uint8 buff[2048];                                                                               /*定义一个2KB的缓存*/

  18. /**
  19. *@brief                TCP Server回环演示函数。
  20. *@param                无
  21. *@return        无
  22. */
  23. void do_tcp_server(void)
  24. {        
  25.         uint16 len=0;  
  26.         switch(getSn_SR(SOCK_TCPS))                                                                                                            /*获取socket的状态*/
  27.         {
  28.                 case SOCK_CLOSED:                                                                                                                          /*socket处于关闭状态*/
  29.                         socket(SOCK_TCPS ,Sn_MR_TCP,local_port,Sn_MR_ND);                /*打开socket*/
  30.                   break;     
  31.    
  32.                 case SOCK_INIT:                                                                                                                                  /*socket已初始化状态*/
  33.                         listen(SOCK_TCPS);                                                                                                                /*socket建立监听*/
  34.                   break;
  35.                
  36.                 case SOCK_ESTABLISHED:                                                                                                              /*socket处于连接建立状态*/
  37.                
  38.                         if(getSn_IR(SOCK_TCPS) & Sn_IR_CON)
  39.                         {
  40.                                 setSn_IR(SOCK_TCPS, Sn_IR_CON);                                                                          /*清除接收中断标志位*/
  41.                         }
  42.                         len=getSn_RX_RSR(SOCK_TCPS);                                                                                    /*定义len为已接收数据的长度*/
  43.                         if(len>0)
  44.                         {
  45.                                 recv(SOCK_TCPS,buff,len);                                                                                      /*接收来自Client的数据*/
  46.                                 buff[len]=0x00;                                                                                                           /*添加字符串结束符*/
  47.                                 printf("%s\r\n",buff);
  48.                                 send(SOCK_TCPS,buff,len);                                                                                      /*向Client发送数据*/
  49.                   }
  50.                   break;
  51.                
  52.                 case SOCK_CLOSE_WAIT:                                                                                                                /*socket处于等待关闭状态*/
  53.                         close(SOCK_TCPS);
  54.                   break;
  55.         }
  56. }

  57. /**
  58. *@brief                TCP Client回环演示函数。
  59. *@param                无
  60. *@return        无
  61. */
  62. void do_tcp_client(void)
  63. {        
  64.    uint16 len=0;        

  65.         switch(getSn_SR(SOCK_TCPC))                                                                                                           /*获取socket的状态*/
  66.         {
  67.                 case SOCK_CLOSED:                                                                                                                         /*socket处于关闭状态*/
  68.                         socket(SOCK_TCPC,Sn_MR_TCP,local_port++,Sn_MR_ND);
  69.                   break;
  70.                
  71.                 case SOCK_INIT:                                                                                                                                 /*socket处于初始化状态*/
  72.                         connect(SOCK_TCPC,remote_ip,remote_port);                /*socket连接服务器*/
  73.                   break;
  74.                
  75.                 case SOCK_ESTABLISHED:                                                                                                              /*socket处于连接建立状态*/
  76.                         if(getSn_IR(SOCK_TCPC) & Sn_IR_CON)
  77.                         {
  78.                                 setSn_IR(SOCK_TCPC, Sn_IR_CON);                                                                  /*清除接收中断标志位*/
  79.                         }
  80.                
  81.                         len=getSn_RX_RSR(SOCK_TCPC);                                                                                    /*定义len为已接收数据的长度*/
  82.                         if(len>0)
  83.                         {
  84.                                 recv(SOCK_TCPC,buff,len);                                                                                     /*接收来自Server的数据*/
  85.                                 buff[len]=0x00;                                                                                                           /*添加字符串结束符*/
  86.                                 printf("%s\r\n",buff);
  87.                                 send(SOCK_TCPC,buff,len);                                                                                      /*向Server发送数据*/
  88.                         }                  
  89.                   break;
  90.                         
  91.                 case SOCK_CLOSE_WAIT:                                                                                                              /*socket处于等待关闭状态*/
  92.                         close(SOCK_TCPC);
  93.                   break;

  94.         }
  95. }

复制代码
3. TCP Server--串口调试助手截图.png



<
回复

使用道具 举报

100

主题

3617

回帖

1

蝴蝶豆

论坛元老

最后登录
2020-12-8
发表于 2016-7-21 10:08:25 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

2

回帖

0

蝴蝶豆

新手上路

最后登录
2019-1-21
发表于 2019-1-21 10:36:29 | 显示全部楼层
HAL库下的W5500 资料无法下载了。能否提供一下,captive@126.com   谢谢
回复 支持 反对

使用道具 举报

122

主题

129

回帖

0

蝴蝶豆

论坛元老

最后登录
2019-5-28
 楼主| 发表于 2019-1-22 15:55:28 | 显示全部楼层
captive 发表于 2019-1-21 10:36
HAL库下的W5500 资料无法下载了。能否提供一下,   谢谢

硬石开源资料下载链接(该帖总是最新资料)
http://www.ing10bbs.com/forum.ph ... =1458&fromuid=4
(出处: 硬石社区)
回复 支持 反对

使用道具 举报

36

主题

486

回帖

62

蝴蝶豆

金牌会员

最后登录
2020-12-7
发表于 2020-2-21 12:02:38 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版