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 W5500不支持极性翻转,你把网线换成交叉线试试看?
谢谢楼上,问题找到了。用交叉网线就可以了 学习了。 学习了 。。 我是新手,很好奇,上面的程序里,do {}while(1)始终为真,程序跑进去不就死在里面了么?看不太懂,,,,
学习了 。。。最近在学以太网通信 hover_007 发表于 2014-9-22 12:04
谢谢楼上,问题找到了。用交叉网线就可以了
你之前用普通网线把模块和电脑直接连接,联不通是么?换了就可以了???我也遇到这个问题,。。。 学习了! 李修成 发表于 2014-12-31 22:13
我是新手,很好奇,上面的程序里,do {}while(1)始终为真,程序跑进去不就死在里面了么?看不太懂,, ...
初始化以后,全部功能就是do后面那些,没有别的程序需要执行,或者有其它功能,放在中断里。
页:
[1]