搜索
bottom↓
回复: 6

STM32F107 + DM9161AEP 网线断开后,重新连接后,Ping不通。

[复制链接]

出0入0汤圆

发表于 2011-4-10 11:44:21 | 显示全部楼层 |阅读模式
在使用STM32F107+DM9161AEP,开机后,网线正常连接后,可以正常工作,但是把网线拔掉,再插上后,出现Ping超时。不知道是什么原因造成的。
下面为定时对DM9161AEP寄存器的检测。
当检测到连接断开后,关闭连接,当检测到网线连接后,重新连接服务器(程序可以执行到tcp_session_open(&server_addr)(成功);建立连接服务器,但是Ping不通)。不知道问题可能出在那个地方。
如果网络在线,把服务器关闭,tcp_session_close(session)后,再tcp_session_open(&server_addr)是可以的。

void tcp_link_chechktime(void* parameter)
{

        struct sockaddr_in server_addr;
        register rt_uint16_t phy_bsr;
        static uint32_t tcp_tx_timeout = 0;
        static uint16_t        link_statuc_flag = 1;

/*
* TCP 网络链接状态检测
*/       

        phy_bsr = ETH_ReadPHYRegister(0X00, PHY_BSR);

           if(((phy_bsr & PHY_Linked_Status) == 0)&&(link_statuc_flag == 1) )                                                                                /*                网络断开        */
        {

                if(session != RT_NULL)
                {
               
                        tcp_session_close(session);

                }
                link_statuc_flag = 0;
        }
        if((link_statuc_flag == 0)&&((phy_bsr & PHY_Linked_Status) != 0))                          /*                网络重新连接        */
        {
                server_addr = sever_address();                                                                         /*         read the server ip and port                */
                session = tcp_session_open(&server_addr);                                                /*        Link the server host                        */
                if (session == RT_NULL)
                {
                        rt_kprintf("open tcp session failed\n");                                                                                                          /*        等待链接服务器                                        */
                }
                else
                {
                        link_statuc_flag = 1;                                                                                                                }       
        }

/*
* TCP 定时发送数据信号量释放
*/
        tcp_tx_timeout++;
        if((SysCmdPro.status.bits.Tcp == 1)&&(tcp_tx_timeout >= StatusTime.TcpDumpTime ))
        {
                tcp_tx_timeout = 0;
                rt_sem_release(&tcp_tx_t_sem);                                         /*        定时发送时间到                */

        }
        else if(SysCmdPro.status.bits.Tcp == 0)                                  /*        定时发送功能关闭        */
        {
                tcp_tx_timeout = 0;
        }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2011-4-30 17:56:53 | 显示全部楼层
楼主是否有 STM32F107 + DM9161的多余的板? 我想买一块.
只要主芯片+PHY网络通即可.别的可以不要.有串口和调试口最好.
方便的话发邮件到我邮箱(见资料),或电话至18721046174.
谢谢!

出0入0汤圆

发表于 2011-10-25 14:36:54 | 显示全部楼层
求问楼主这个问题解决了没有???

出0入0汤圆

 楼主| 发表于 2011-10-26 08:12:48 | 显示全部楼层
void tcp_link_chechktime(void* parameter)
{
        register rt_uint16_t phy_bsr;
        static uint32_t tcp_tx_timeout = 0;
        static uint8_t time = 0;
/*
* TCP 网络链接状态检测
*/
        time ++;
        phy_bsr = ETH_ReadPHYRegister(0X00, PHY_BSR);

           if((phy_bsr & PHY_Linked_Status) == 0)                                                                /*        DM9161A链接状态寄存器        */
        {
                tcp_sever_static = sever_static_break;                                                           /*        网线断开                                */
                if(session != RT_NULL)
                {
                //        tcp_session_close(session);       
                }
                if(time%60 == 0)
                {
                        rt_kprintf("The net link break! Please check network cable!\r\n");
                }       
        }
        if(((phy_bsr & PHY_Linked_Status) != 0))                                                          /*                网络线重新连接                */
        {
                if(tcp_sever_static != sever_static_ok)
                {
                        rt_kprintf("The network cable has been inserted!\r\n");       
                }
                tcp_sever_static = sever_static_ok;
        }


/*
* TCP 定时发送数据信号量释放
*/
        tcp_tx_timeout++;
        if((SysCmdPro.status.bits.Tcp == 1)                                        /*        TCP有发送数据请求                */
                &&(tcp_tx_timeout >= StatusTime.TcpDumpTime )        /*        TCP定时发送数据时间到        */
                &&(tcp_sever_static == sever_static_ok))                /*  TCP服务器和网络链接正常        */
        {
                tcp_tx_timeout = 0;
                rt_sem_release(&tcp_tx_t_sem);                                         /*        定时发送时间到                        */

        }
        else if((SysCmdPro.status.bits.Tcp == 0)                          /*        定时发送功能关闭                */
                        ||(tcp_sever_static != sever_static_ok))        /*        网络链接不正常                        */
        {
                tcp_tx_timeout = 0;
        }
}




上面是网络连接判断

下面是接收数据处理,如果网络断开 服务器关闭       



                /*       
                        *等待接收消息                       
                        */
                        bytes_received = tcp_session_read(session, (rt_uint8_t*)recv_data, sizeof(recv_data));
                                                                                                                                                /*         接收消息故障断开链接        */                
                        if(bytes_received <= 0)                                                                                /*         当收到数据为0时,表示服务器关闭        */
                        {
                                tcp_session_close(session);                                                                /*         当网络断开后,不能检测到服务器关闭        */
                                tcp_sever_static = sever_static_close;                                        /*         需要增加服务器关系,如果先断开网络,后服务器关闭,不再重新连接,需要增加接收超时功能,用来判断网络断开*/
                                net_link_check_time = 0;
                                break;
                        }

出0入0汤圆

发表于 2011-11-1 09:40:57 | 显示全部楼层
RT-Thread-0.4.0 beta2 版本木有这个问题~
查找中...

出0入0汤圆

发表于 2011-11-22 11:15:40 | 显示全部楼层
楼主,程序是自己写的吗?方便上一下源代码吗?

出0入0汤圆

发表于 2011-11-29 17:12:53 | 显示全部楼层
回复【楼主位】baradream  
-----------------------------------------------------------------------

朋友加我QQ370999235,验证就写:STM32F107+DM9161
想和你交流交流。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-11 15:56

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表