hover_007 发表于 2014-9-22 08:31:15

W5500作为客户端直接连接电脑和交换机失败。通过路由器可...

/*******************************************************************************
* 函数名: Detect_Gateway
* 描述    : 检查网关服务器
* 输入    : 无
* 输出    : 无
* 返回值: 成功返回TRUE(0xFF),失败返回FALSE(0x00)
* 说明    : 无
*******************************************************************************/
unsigned char Detect_Gateway(void)
{
         unsigned char ip_adde;
         ip_adde=IP_Addr+1;
         ip_adde=IP_Addr+1;
         ip_adde=IP_Addr+1;
         ip_adde=IP_Addr+1;

         //检查网关及获取网关的物理地址
      Write_W5500_SOCK_4Byte(0,Sn_DIPR,ip_adde);//向目的地址寄存器写入与本机IP不同的IP值
      Write_W5500_SOCK_1Byte(0,Sn_MR,MR_TCP);//设置socket为TCP模式
      Write_W5500_SOCK_1Byte(0,Sn_CR,OPEN);//打开Socket      
         os_dly_wait (100);//Delay(5);//延时5ms         
         
         if(Read_W5500_SOCK_1Byte(0,Sn_SR) != SOCK_INIT)//如果socket打开失败
      {
               Write_W5500_SOCK_1Byte(0,Sn_CR,CLOSE);//打开不成功,关闭Socket
               return FALSE;//返回FALSE(0x00)
         }

         Write_W5500_SOCK_1Byte(0,Sn_CR,CONNECT);//设置Socket为Connect模式                                                

         do
         {
               u8 j=0;
               j=Read_W5500_SOCK_1Byte(0,Sn_IR);//读取Socket0中断标志寄存器
                if(j!=0)
               Write_W5500_SOCK_1Byte(0,Sn_IR,j);
               os_dly_wait (10);//Delay(5);//延时5ms
               if((j&IR_TIMEOUT) == IR_TIMEOUT)
               {
                         return FALSE;      
               }
               else if(Read_W5500_SOCK_1Byte(0,Sn_DHAR) != 0xff)
               {
                         Write_W5500_SOCK_1Byte(0,Sn_CR,CLOSE);//关闭Socket
                         return TRUE;                                                      
               }
         }while(1);
}
直接连接电脑的时候死在了这个函数里。Read_W5500_SOCK_1Byte(0,Sn_DHAR) 的返回值一直是ff

Byron_njit 发表于 2014-9-22 08:48:58

W5500不支持极性翻转,你把网线换成交叉线试试看?

hover_007 发表于 2014-9-22 12:04:07

谢谢楼上,问题找到了。用交叉网线就可以了

so_so_so_so 发表于 2014-10-7 19:26:55

学习了。

xiepan2010 发表于 2014-10-7 19:39:40

学习了 。。

李修成 发表于 2014-12-31 22:13:56

我是新手,很好奇,上面的程序里,do {}while(1)始终为真,程序跑进去不就死在里面了么?看不太懂,,,,


rainbowsnow 发表于 2014-12-31 22:23:10


学习了 。。。最近在学以太网通信

李修成 发表于 2015-1-5 08:29:32

hover_007 发表于 2014-9-22 12:04
谢谢楼上,问题找到了。用交叉网线就可以了

        你之前用普通网线把模块和电脑直接连接,联不通是么?换了就可以了???我也遇到这个问题,。。。

dlsuntao 发表于 2015-1-15 18:51:46

学习了!

AdmTimer 发表于 2015-1-17 10:30:40

李修成 发表于 2014-12-31 22:13
我是新手,很好奇,上面的程序里,do {}while(1)始终为真,程序跑进去不就死在里面了么?看不太懂,, ...

初始化以后,全部功能就是do后面那些,没有别的程序需要执行,或者有其它功能,放在中断里。
页: [1]
查看完整版本: W5500作为客户端直接连接电脑和交换机失败。通过路由器可...