打印
[STM32F1]

新定义板子驱动W5500网口的问题

[复制链接]
173|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
比神乐|  楼主 | 2023-1-17 10:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 比神乐 于 2023-1-17 10:27 编辑

我现在捣鼓新定义板子驱动SPI接口W5500网口,读写寄存器都成功了。
拼下位机也能拼通。可是无法收发数据。
我仿真了一下:
/*******************************************************************************
* º¯ÊýÃû  : Detect_Gateway
* ÃèÊö    : ¼ì²éÍø¹Ø·þÎñÆ÷
* ÊäÈë    : ÎÞ
* Êä³ö    : ÎÞ
* ·µ»ØÖµ  : ³É¹¦·µ»ØTRUE(0xFF),ʧ°Ü·µ»ØFALSE(0x00)
* ˵Ã÷    : ÎÞ
*******************************************************************************/
unsigned char Detect_Gateway(void)
{
        unsigned char ip_adde[4];
        ip_adde[0]=IP_Addr[0]+1;
        ip_adde[1]=IP_Addr[1]+1;
        ip_adde[2]=IP_Addr[2]+1;
        ip_adde[3]=IP_Addr[3]+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        
        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);
                Delay(5);//ÑÓʱ5ms
                if((j&IR_TIMEOUT) == IR_TIMEOUT)
                {
<font color="#ff0000">                        return FALSE;        </font>
                }
                else if(Read_W5500_SOCK_1Byte(0,Sn_DHAR) != 0xff)
                {
                        Write_W5500_SOCK_1Byte(0,Sn_CR,CLOSE);//¹Ø±ÕSocket
                        return TRUE;                                                        
                }
        }while(1);
}


发现老是超时,进入if((j&IR_TIMEOUT) == IR_TIMEOUT)        {
            return FALSE;   
        }
返回FALSE。
请问高手,哪里出现了问题?谢谢!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

441

主题

3467

帖子

7

粉丝