你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F746ZG NUCLEO+Lwip+FREERTOS在不插网线无法完成网络初始化

[复制链接]
名字最难取 提问时间:2018-3-12 09:49 /
如题:
STM32F746ZG NUCLEO+Lwip+FREERTOS在不插网线无法完成网络初始化,主要表现在不插网线等待很长时间然后再插入网线硬件灯有反应但是网络无法ping通,或网络ping延迟很大无法使用
使用官网例程测试~~~~
收藏 2 评论8 发布时间:2018-3-12 09:49

举报

8个回答
名字最难取 回答时间:2018-3-12 09:51:32
中断有反应,请教用轮询的方式如何重新初始化ETH(DMA&MAC)?
无薪税绵 回答时间:2018-3-20 10:18:17
你是使用DHCP的方法吧,如果使用固定IP的方法,无论什么时候插网线都可以的。

如果使用DHCP,中断有反应,就添加一个有网络数据的标志,
然后在轮询时,重新初始化一下DHCP(注意DHCP是要适当延时的。)

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

feixiang20 回答时间:2018-3-20 10:35:13
重新按照官方已知步骤检测,可能是被协议智能禁止了,去看看STM32F746网络初始化资料

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

x5y4z3 回答时间:2018-3-20 11:59:07
预设配置可否用那 127.0.0.1 的 localhost(IANA) 保留回环 IP 地址来替代呢?

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

butterflyspring 回答时间:2018-3-23 10:52:45
需要在程序中添加中断代码,当检测到网线连接状态的变化后,重新进行网络配置和PHY的配置。
方法:
网线连接的状态发生变化
查询的方式
          应用程序周期性地去读取PHY的状态寄存器
中断的方式
          PHY检测到连接状态发生变化后会产生中断;
          应用程序接受到中断后,再去读PHY的状态寄存器确认状态
            其他的原因引起的网络连接断开(比如程序跑飞…)
            心跳包
处理方式:
网线断开
      应用层的处理(释放内存,关闭连接)
      关闭MAC, DMA
      调用netif_set_down()
      如果需要的话关闭DHCP
      如果需要的话对PHY进行配置
网线重新连接
       重新进行PHY自动协商
       重新配置并启动MAC
       重新配置网络(IP地址,DHCP…)
       调用netif_set_up()


移植步骤
1. 将F756-EVALdemo中和TCP-echo Client相关的文件拷贝过来,添加到新工程中
app_ethernet.c,ethernetif.c,tcp_echoclient.c
app_ethernet.h、ethernetif.h,lwipopts.h,tcp_echoclient.h
添加LwIP协议栈文件到工程中(为节省时间已经先添加好),并修改编译配置,增         加两个寻找路径(LWIP的)
添加stm32f7xx_hal_eth.c文件到工程中
2. 在Main函数中添加:
lwip_init(),Netif_Config(), tcp_echoserver_init()
在while(1)中添加ethernetif_input(),sys_check_timeouts()
3. 在main.c中添加include,相关变量定义( gnetif;), Netif_Config的定义和声明
4. 在main.h中添加静态IP地址等的定义

5. 在stm32f7xx_hal_conf.h中uncomment:
     #define HAL_ETH_MODULE_ENABLED
6. 在HAL_ETH_MspInit()中修改pin脚的定义
7.  low_level_init()中修改EthHandle初始化参数,MII改为RMII
8.  stm32f7xx_hal_conf.h中PHY的地址改为0,并修改EthHandle初始化参数中的PHY地址赋值
9. 修改stm32f7xx_hal_conf.h 中PHY的寄存器地址和mask
10. 删除
low_level_init中设置PHY中断的部分,因为没有用到
netif_config()函数中的netif_set_link_callback()
ethernetif_set_link()和ethernetif_update_config()函数的定义

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

butterflyspring 回答时间:2018-3-23 10:53:17
你找一下以太网进阶培训_Part3 更换以太网PHY.pptx,然后第三十一页就是了
wolfgang 回答时间:2018-3-23 11:04:20
PING 的前提是同一子网,问题的关键还在于是否启用了DHCP客户端/服务器,这块LwIP里面的实现流程不一样,需要注意,看看这部分DHCP的实现机制,可以优化协商等待时间的。
某些等待流程是正常的。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

zero99 回答时间:2018-3-25 16:56:05
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版