STM32F429通过CubeMx移植Lwip时遇到的网线热插拔ping不通问题解决办法

STM32F429通过CubeMx移植Lwip时遇到的网线热插拔ping不通问题解决办法

之前在stm32F107上移植过Lwip,最后可以ping通了,但是发现两个问题:
1.ping通后拔掉网线再插上就ping不通了(这个问题在拔线前自动协商的通信模式变化后会出现)。
2.板子启动的时候不插网线,板子启动后再插入网线后再也无法ping通。

闲话少叙,上过程:

STM32F429通过CubeMx移植Lwip时遇到的网线热插拔ping不通问题解决办法_第1张图片
我的phy芯片是DP83848
STM32F429通过CubeMx移植Lwip时遇到的网线热插拔ping不通问题解决办法_第2张图片
STM32F429通过CubeMx移植Lwip时遇到的网线热插拔ping不通问题解决办法_第3张图片
STM32F429通过CubeMx移植Lwip时遇到的网线热插拔ping不通问题解决办法_第4张图片
STM32F429通过CubeMx移植Lwip时遇到的网线热插拔ping不通问题解决办法_第5张图片

STM32F429通过CubeMx移植Lwip时遇到的网线热插拔ping不通问题解决办法_第6张图片
生成mkd工程
STM32F429通过CubeMx移植Lwip时遇到的网线热插拔ping不通问题解决办法_第7张图片
问题1的原因,下图中红圈内的函数没有添加,该函数负责检测phy是否断开或重新连接,并在网线插入后重新启动自动协商,将协商结果重新设置到mac中去,以达到热插拔的效果
STM32F429通过CubeMx移植Lwip时遇到的网线热插拔ping不通问题解决办法_第8张图片
原来自动生成的判断函数逻辑有我问题,需要修改下。
STM32F429通过CubeMx移植Lwip时遇到的网线热插拔ping不通问题解决办法_第9张图片
问题2原因:下图红色标记的函数在cubemx自动生成的工程里没有,是我自己添加的,个人感觉相当于linux中的ifconfig eth1 up/down命令,加上后拔网线再启动板子后就可ping通了。
STM32F429通过CubeMx移植Lwip时遇到的网线热插拔ping不通问题解决办法_第10张图片
下图中执行cube中使能的回调函数,进行mac的重新初始化
STM32F429通过CubeMx移植Lwip时遇到的网线热插拔ping不通问题解决办法_第11张图片
在这里插入图片描述
回调函数指向了下图函数,有兴趣的可以看看这个函数干了啥
STM32F429通过CubeMx移植Lwip时遇到的网线热插拔ping不通问题解决办法_第12张图片

完成以上修改后,裸机轮询模式的lwip可实现热插拔及拔网线启动。

补充:刚用cubemx 生成了freertos 和 lwip工程,同样的问题,同样的改动点,解决热插拔问题。

你可能感兴趣的:(MCU,stm32,单片机,嵌入式)