STM32F429通過CubeMx移植Lwip時遇到的網線熱插拔ping不通問題解決辦法

STM32F429通過CubeMx移植Lwip時遇到的網線熱插拔ping不通問題解決辦法

之前在stm32F107上移植過Lwip,最後可以ping通了,但是發現兩個問題:
1.ping通後拔掉網線再插上就ping不通了(這個問題在拔線前自動協商的通信模式變化後會出現)。
2.板子啓動的時候不插網線,板子啓動後再插入網線後再也無法ping通。

閒話少敘,上過程:

配置如圖
我的phy芯片是DP83848
寄存器按照phy芯片手冊配好
沒有用中斷模式
lwip配置
在這裏插入圖片描述




靜態IP
生成mkd工程
在這裏插入圖片描述
問題1的原因,下圖中紅圈內的函數沒有添加,該函數負責檢測phy是否斷開或重新連接,並在網線插入後重新啓動自動協商,將協商結果重新設置到mac中去,以達到熱插拔的效果
在這裏插入圖片描述
原來自動生成的判斷函數邏輯有我問題,需要修改下。
在這裏插入圖片描述
問題2原因:下圖紅色標記的函數在cubemx自動生成的工程裏沒有,是我自己添加的,個人感覺相當於linux中的ifconfig eth1 up/down命令,加上後拔網線再啓動板子後就可ping通了。
在這裏插入圖片描述
下圖中執行cube中使能的回調函數,進行mac的重新初始化
這裏執行cube裏使能的回調函數
在這裏插入圖片描述
回調函數指向了下圖函數,有興趣的可以看看這個函數幹了啥
在這裏插入圖片描述












完成以上修改後,裸機輪詢模式的lwip可實現熱插拔及拔網線啓動。

補充:剛用cubemx 生成了freertos 和 lwip工程,同樣的問題,同樣的改動點,解決熱插拔問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章