STM32踩坑:LAN8720未接网线,上电后再接网线,网络模块无法正常使用

LAN8720未接网线,上电后再接网线,网络模块无法正常使用

一、问题描述

最近因为做的项目出了BUG,STM32 单片机在未接网线的状态下,上电一段时间后,将网线插入网口后,IP地址ping不通,网络模块无法正常使用,重启一下程序就没问题了。

二、问题查找

这次的问题查找全靠网友,把问题扔给百度,然后就能看见一大群网友的评论,都反馈有 LAN8720 在没有接网线的情况下上电后,插入网线,网络模块无法正常工作,然后就有大佬些评论回复,我看的我觉得比较靠谱的一个回答如下图:
在这里插入图片描述

三、问题解决

我觉得讲的蛮有道理的,然后就通过LAN8720芯片的某个寄存器位,做了个热插拔功能,如果检测到不存在网线,则不初始化网络模块,直到检测到网线,再开始初始化网络,刚开始测试的时候,因为程序和板子不匹配,所以ping的时候延迟有点大,然后我也没找到这延迟大的问题,一直以为实现热插拔的逻辑有问题,考虑了好几种可能性,问题一直没得到解决,后面试了下和程序匹配的开发板,我勒个去,没问题,这会儿我才意识到是程序不匹配的问题,这里分享一下热插拔的模块代码。

四、源码分享

//lan8720.c
u8 LAN8720_Get_Link() {u8 status;status = ((ETH_ReadPHYRegister(LAN8720_PHY_ADDRESS, PHY_BSR) & PHY_Linked_Status) >> 2);return status;
}
//server.c
void server_init()
{int i = 0;u8 status;if(!last_status) {LAN8720_Init();}status = LAN8720_Get_Link();if(status == 1) {//网络初始化,这里省略千万行代码......server_start();}last_status = 0;
}void server_start()
{ETH_MACAddressConfig(ETH_MAC_Address0, mjipdev.mac);        //向STM32F4的MAC地址寄存器中写入MAC地址ETH_DMATxDescChainInit(DMATxDscrTab, Tx_Buff, ETH_TXBUFNB);ETH_DMARxDescChainInit(DMARxDscrTab, Rx_Buff, ETH_RXBUFNB);ETH_Start(); //开启MAC和DMA
}void server_online_chk() {u8 status = LAN8720_Get_Link();if(status == 0x01 && last_status == 0x00) {server_init();}else if(status == 0x00 && last_status == 0x01) {ETH_Stop();}last_status = status;
}

最后在 main 函数的 while 循环中调用 server_online_chk() 函数即可!

学习分享,一起成长!以上为小编的经验分享,若存在不当之处,请批评指正!

感谢来自于网友的经验分享,小编这里稍微处理了一下,然后分享给大家,下面是参考博文:
《STM32移植LWIP网线热插入网络不通的解决办法》
https://blog.csdn.net/xukao5671927/article/details/77765464

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/155930.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

XDAG同步节点部署

系统环境要求 JDK : v17 Maven : v3.9.1-v3.9.5 MySQL : v8.0系列 1、MySQL8.0安装 1)docker-compose安装详情 MySQL安装 2)配置数据库账号密码及键表 # docker exec -it mysql8 /bin/bash # root0286a1fd60e6:/# mysql -uroot -p Enter password:…

【Echart】Echart设置label太长隐藏:

文章目录 第一种:竖排显示第二种:显示部分第三种:强制显示所有标签并旋转 第一种:竖排显示 xAxis: {type: category,data: res.data.data.sz.xAxis,axisLabel:{fontSize:12,formatter: function(value) {return value.split().joi…

线程池有几种创建方式?

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…

人员定位系统人员聚集风险监测预警功能为企业安全生产保驾护航!

危化企业生产区域由于装置设施开停工、设备检维修或其它原因,会导致在局部作业区域出现作业操作人员、指挥管理人员不定时、不定点的聚集情况,一旦发生泄漏中毒、火灾爆炸、高温高热物质喷溅等事故,人员聚集将会在一定程度上加重事故后果的严…

【测试开发】学习测试前的基础知识

文章目录 目录 前言 一、什么是软件测试 二、软件测试的发展史 三、软件测试和研发的区别 四、测试人员应该具备的能力 五、测试所需要知道的基本概念 1.需求 六、软件错误(BUG)的概念 前言 本篇文章主要讲解在学习测试前一些需要了解的知识。 一、什…

2023年【A特种设备相关管理(锅炉压力容器压力管道)】模拟考试题及A特种设备相关管理(锅炉压力容器压力管道)作业考试题库

题库来源:安全生产模拟考试一点通公众号小程序 A特种设备相关管理(锅炉压力容器压力管道)模拟考试题参考答案及A特种设备相关管理(锅炉压力容器压力管道)考试试题解析是安全生产模拟考试一点通题库老师及A特种设备相关…

【优秀毕设】基于vue+ssm+springboot的网上购物商城系统设计

摘 要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,网上商城购物系统当然也不能排除在外。网上商城购物系统是以实际运用为开发背景,运用软件工程原理和开发方…

物联网AI MicroPython学习之语法 PWM脉宽调制模块

学物联网,来万物简单IoT物联网!! PWM 介绍 模块功能: PWM脉宽调制驱动模块 接口说明 PWM - 构建PWM对象 函数原型:PWM(ch, freq, duty)参数说明: 参数类型必选参数?说明chobjectYPin对象例如&#xf…

直播间弹幕直播游戏开发教程

随着直播技术的不断发展,交互式弹幕直播游戏成为吸引用户参与的新兴方式。这种游戏融合了实时弹幕互动和直播视频,为观众和主播提供了更加丰富的互动体验。在这篇文章中,我们将探讨从概念到实现的步骤,帮助你打造一款引人入胜的交…

五年程序员兼职接单的肺腑之言

不知不觉我已经参加工作,当一个程序员五年了,从一个职场菜鸟逐渐变成老油条,个中辛酸只有自己知道。这五年做过各种兼职接单,踩过不少坑,今天就把我在程序员接单上的一些心得体会分享给大家,希望能对兼职接…

Redis--字符串

基础概念 字符串、数字,都会转化为字符串来进行存储 以二进制的方式存储在内存中 key的命名规范 key不宜过长,消耗内存,且在数据查找的这类键值的计算成本高(通过hash计算来查找)不宜过短,可读性查值一…

设计模式-命令模式-笔记

“行为变化”模式 在组件的构建过程中,组件行为的变化经常导致组件本身剧烈的变化。“行为变化”模式组件的行为和组件本身进行解耦,从而支持组件行为的变化,实现两者之间的松耦合。 经典模式:Command、Visitor 动机&#xff0…

C# - Opencv应用(2) 之矩阵Mat使用[矩阵创建、图像显示、像素读取与赋值]

C# - Opencv应用(2) 之矩阵Mat使用[矩阵创建、图像显示、像素读取与赋值] 矩阵创建图像显示与保存像素读取与赋值新建sample02项目,配置opencv4相关包,新建.cs进行测试 1.矩阵创建 //创建空白矩阵 var dst new Mat()//创建并赋…

Continuity” of stochastic integral wrt Brownian motion

See https://imathworks.com/math/math-continuity-of-stochastic-integral-wrt-brownian-motion/

【开源】基于Vue.js的教学过程管理系统

项目编号: S 054 ,文末获取源码。 \color{red}{项目编号:S054,文末获取源码。} 项目编号:S054,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 教师端2.2 学生端2.3 微信小程序端2…

基于Vue+SpringBoot的桃花峪滑雪场租赁系统

项目编号: S 036 ,文末获取源码。 \color{red}{项目编号:S036,文末获取源码。} 项目编号:S036,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 游客服务2.2 雪场管理 三、数据库设…

什么是Jmeter ?Jmeter使用的原理步骤是什么?

1.1 什么是 JMeter Apache JMeter 是 Apache 组织开发的基于 Java 的压力测试工具。用于对软件做压力测试,它最初被设计用于 Web 应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI 脚本…

力扣1038. 从二叉搜索树到更大和树(java,树的中序遍历解法)

Problem: 1038. 从二叉搜索树到更大和树 文章目录 题目描述思路解题方法复杂度Code 题目描述 给定一个二叉搜索树 root (BST),请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。 提醒一下, 二叉搜索树 满足下列约束条件&#xff…

媲美有线操作,支持4KHz响应和无线充电的游戏鼠标,雷柏VT3S上手

对于无线鼠标来说,操作延迟和精度对游戏操作影响很大,常见的游戏鼠标至少都有1KHz的回报率,而雷柏今年已经出了很多支持4KHz回报的鼠标了,像是我现在用的这款VT3S游戏鼠标,就搭载了旗舰级的原相3395引擎,支…

fractional Brownian Motion driven stochastic integrals

See https://mathoverflow.net/questions/304366/fractional-brownian-motion-driven-stochastic-integrals