stm32利用lwip实现以太网热插拔

在使用lwip时,关于以太网热插拔问题可以归类为一下几种问题:
(1):单片机启动前未插网线,启动后死活连不上。
(2):在使用过程中拔掉网线后,不复位或者重启的话,ping不通并且调试软件连不上。

原因:由于未检测到网络,导致自动协商、连接状态等超时后,执行语句return ETH_ERROR;从而导致程序后半部分的初始化程序未执行,例如MAC的配置语句未执行。
简而言之就是初始化未完成。

有一个简单粗暴,比较快的,一劳永逸的办法(虽然感觉不是特别好,但是真的很粗暴很快乐!):
将stm324x7_eth.c文件的ETH_Init()函数中的return ETH_ERROR;给屏蔽掉。
例如

// do
    {
      timeout++;
    } while (!(ETH_ReadPHYRegister(PHYAddress, PHY_BSR) & PHY_AutoNego_Complete) && (timeout < (uint32_t)PHY_READ_TO));  

    /* Return ERROR in case of timeout */
    if(timeout == PHY_READ_TO)
    {
      //return ETH_ERROR;/*****自动协商超时**************/
    }

将return ETH_ERROR()屏蔽即可,屏蔽掉并不会影响程序的执行和初始化。

同时也不要把main()函数中的lwip_comm_init(和tcp_server_init()放在while 中,会导致因为有返回值一直初始化。
ping通
因为修改的是底层文件,所以无论有无操作系统,都是比较方便的方法,虽然不是特别好的方法。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值