微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 用户51单片机开发板 + YIXIN_W5500以太网(TCP/IP)模块

用户51单片机开发板 + YIXIN_W5500以太网(TCP/IP)模块

时间:10-02 整理:3721RD 点击:



请大神指导  急求  !  用51单片机开发板 + YIXIN_W5500以太网(TCP/IP)模块的客户端测试时上电后不能自动连接到服务器如上图,而正常情况是如下图:
   


描述    :W5500的端口0工作在客户端模式,主动与《TCP&UDP测试工具》上创建的服务端连接,
*                         并且定时给服务端发送字符串"\r\nWelcome To YiXinElec!\r\n",同时将接
*                         收到服务端发来的数据回发给服务端。
* 实验平台:用户51单片机开发板 + YIXIN_W5500以太网(TCP/IP)模块
* 硬件连接:  P3^2 -> W5500_RST   
*             P3^3 -> W5500_INT(本例程没有用到中断,此引脚可以不接)     
*             P3^6 -> W5500_SCS      
*             P3^7 -> W5500_SCK   
*             P3^4 -> W5500_MISO   
*             P3^5 -> W5500_MOSI   
***************************************************************************************/
/*例程网络参数*/
//网关:192.168.1.1
//掩码:        255.255.255.0
//物理地址:0C 29 AB 7C 00 01
//本机IP地址:192.168.1.199
//端口0的端口号:5000
//端口0的目的IP地址:192.168.1.100
//端口0的目的端口号:6000
#include <reg51.h>
#include "W5500.h"                               
#include <string.h>
void Delay(unsigned int d);                        //延时函数(ms)
/*******************************************************************************
* 函数名  : W5500_Initialization
* 描述    : W5500初始化配置
* 输入    : 无
* 输出    : 无
* 返回值  : 无
* 说明    : 无
*******************************************************************************/
void W5500_Initialization(void)
{
        W5500_Init();                //初始化W5500寄存器函数
        Detect_Gateway();        //检查网关服务器
        Socket_Init(0);                //指定Socket(0~7)初始化,初始化端口0
}
/*******************************************************************************
* 函数名  : Load_Net_Parameters
* 描述    : 装载网络参数
* 输入    : 无
* 输出    : 无
* 返回值  : 无
* 说明    : 网关、掩码、物理地址、本机IP地址、端口号、目的IP地址、目的端口号、端口工作模式
*******************************************************************************/
void Load_Net_Parameters(void)
{
        Gateway_IP[0] = 192;//加载网关参数
        Gateway_IP[1] = 168;
        Gateway_IP[2] = 1;
        Gateway_IP[3] = 1;
        Sub_Mask[0]=255;//加载子网掩码
        Sub_Mask[1]=255;
        Sub_Mask[2]=255;
        Sub_Mask[3]=0;
        Phy_Addr[0]=0x0c;//加载物理地址
        Phy_Addr[1]=0x29;
        Phy_Addr[2]=0xab;
        Phy_Addr[3]=0x7c;
        Phy_Addr[4]=0x00;
        Phy_Addr[5]=0x01;
        IP_Addr[0]=192;//加载本机IP地址
        IP_Addr[1]=168;
        IP_Addr[2]=1;
        IP_Addr[3]=199;
        S0_Port[0] = 0x13;//加载端口0的端口号5000
        S0_Port[1] = 0x88;
        S0_DIP[0]=192;//加载端口0的目的IP地址
        S0_DIP[1]=168;
        S0_DIP[2]=1;
        S0_DIP[3]=100;
       
        S0_DPort[0] = 0x17;//加载端口0的目的端口号6000
        S0_DPort[1] = 0x70;
        S0_Mode=TCP_CLIENT;//加载端口0的工作模式,TCP客户端模式
}
/*******************************************************************************
* 函数名  : W5500_Socket_Set
* 描述    : W5500端口初始化配置
* 输入    : 无
* 输出    : 无
* 返回值  : 无
* 说明    : 分别设置4个端口,根据端口工作模式,将端口置于TCP服务器、TCP客户端或UDP模式.
*                        从端口状态字节Socket_State可以判断端口的工作情况
*******************************************************************************/
void W5500_Socket_Set(void)
{
        if(S0_State==0)//端口0初始化配置
        {
                if(S0_Mode==TCP_SERVER)//TCP服务器模式
                {
                        if(Socket_Listen(0)==TRUE)
                                S0_State=S_INIT;
                        else
                                S0_State=0;
                }
                else if(S0_Mode==TCP_CLIENT)//TCP客户端模式
                {
                        if(Socket_Connect(0)==TRUE)
                                S0_State=S_INIT;
                        else
                                S0_State=0;
                }
                else//UDP模式
                {
                        if(Socket_UDP(0)==TRUE)
                                S0_State=S_INIT|S_CONN;
                        else
                                S0_State=0;
                }
        }
}
/*******************************************************************************
* 函数名  : Process_Socket_Data
* 描述    : W5500接收并发送接收到的数据
* 输入    : s:端口号
* 输出    : 无
* 返回值  : 无
* 说明    : 本过程先调用S_rx_process()从W5500的端口接收数据缓冲区读取数据,
*                        然后将读取的数据从Rx_Buffer拷贝到Temp_Buffer缓冲区进行处理。
*                        处理完毕,将数据从Temp_Buffer拷贝到Tx_Buffer缓冲区。调用S_tx_process()
*                        发送数据。
*******************************************************************************/
void Process_Socket_Data(SOCKET s)
{
        unsigned short size;
        size=Read_SOCK_Data_Buffer(s, Rx_Buffer);
        memcpy(Tx_Buffer, Rx_Buffer, size);                       
        Write_SOCK_Data_Buffer(s, Tx_Buffer, size);
}
/*******************************************************************************
* 函数名  : main
* 描述    : 主函数,用户程序从main函数开始运行
* 输入    : 无
* 输出    : 无
* 返回值  : int:返回值为一个16位整形数
* 说明    : 无
*******************************************************************************/
int main(void)
{
        unsigned int W5500_Send_Delay_Counter =0;
        Load_Net_Parameters();                //装载网络参数       
        W5500_Hardware_Reset();                //硬件复位W5500
        W5500_Initialization();                //W5500初始货配置
        while (1)
        {
                W5500_Socket_Set();//W5500端口初始化配置
               
                W5500_Interrupt_Process();//W5500中断处理程序框架
                if((S0_Data & S_RECEIVE) == S_RECEIVE)//如果Socket0接收到数据
                {
                        S0_Data&=~S_RECEIVE;
                        Process_Socket_Data(0);//W5500接收并发送接收到的数据
                }
                else if(W5500_Send_Delay_Counter >= 3000)//定时发送字符串
                {
                        if(S0_State == (S_INIT|S_CONN))
                        {
                                S0_Data&=~S_TRANSMITOK;
                                memcpy(Tx_Buffer, "\r\nWelcome To YiXinElec!\r\n", 23);       
                                Write_SOCK_Data_Buffer(0, Tx_Buffer, 23);//指定Socket(0~7)发送数据处理,端口0发送23字节数据
                        }
                        W5500_Send_Delay_Counter=0;
                }
                W5500_Send_Delay_Counter++;
        }
}
/*******************************************************************************
* 函数名  : Delay
* 描述    : 延时函数(ms)
* 输入    : d:延时系数,单位为毫秒
* 输出    : 无
* 返回    : 无
* 说明    : 延时是利用Timer2定时器产生的1毫秒的计数来实现的
*******************************************************************************/
void Delay(unsigned int  x)
{
    unsigned int i,j;
    for(j=0;j<5;j++)
                for(i=0;i<x;i++);
}

该哈哈哈哈哈哈哈哈哈

好好学习哦,,,,,

你不是已经建立连接了。。

小编问题解决了吗?如果有源代码能否发一个?搞不懂啊

小编你的问题解决了吗?我也遇到一样问题

你的电脑IP设置了没?  最好把防火墙关掉

电脑IP 设置了?  

小编,能把源代码发一下吗?我最近在做毕业设计,遇到了同样的问题

电脑和模块的IP需要是同一个网段的。

你好,请问问题解决了吗?我也碰到了同样的问题

我现在也碰到这种问题,我的电脑IP已经设置过了,但是还是不能自动连接,请问你的解决了吗?

我现在也碰到这种问题,我的电脑IP已经设置过了,但是还是不能自动连接,请问你的解决了吗?

我现在也碰到这种问题,我的电脑IP已经设置过了,但是还是不能自动连接,请问你的解决了吗?

我现在也碰到这种问题,我的电脑IP已经设置过了,但是还是不能自动连接,请问你的解决了吗?

小编这个贴很好,赞!如有W5500技术相关问题,
可以找WIZnet W5500代理商 S深圳炜世科技,他们有提供技术支持18924587312

WIZnet W5500代理商深圳炜世科技与WIZnet,2017年9月23日在深圳携手举办“物联网通信协议详解与实践”免费培训课,第一期主题TCP/IP协议基础和TCP、UDP的实现。
WIZnet资深工程师陈海峰博士亲自授课,机会难得,报名方式【姓名+公司名称+手机号+QQ】发送到邮箱support@wisioe.com,邮件收到后将会电话或者邮件形式通知



Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top