F407开发板网线实现热插拔方法

2019-07-20 01:26发布

实现网线热插拔,不必开机前就插上网线。就要把lwip_comm_init()放在while(1)循环里。但是当插上网线发现也不能初始化,打断点发现是申请内存失败ETH_Mem_Malloc(),lwip_comm_mem_malloc();这是因为未插网线时多次进行初始化(LAN8720_Init()初始化失败),多次申请内存且没有释放导致可用内存不足;所以在初始化失败后要释放内存        ETH_Mem_Free();lwip_comm_mem_free();。这样就可以随时插入网线都可以初始化成功连接网络了。插网线连接实现了,那么拔掉网线不断开连接怎么办呢?
这就可以查询lan8720的中断来实现。LAN8720A的寄存器29的第4位中断位为1时掉线中断,可以查询此位来判断网线的连接状态,当中断置1时可以断开网络,重新等待连接。
u8 LAN8720_Get_link(void)
{
u8 link;
link=((ETH_ReadPHYRegister(0x00,29)&0x10)>>4); //从LAN8720的29号寄存器中读取连接状态中断:1为断开
return link;
}       
               
       
               

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
25条回答
elvin
1楼-- · 2019-07-20 03:46
 精彩回答 2  元偷偷看……
正点原子
2楼-- · 2019-07-20 04:27
谢谢分享
elvin
3楼-- · 2019-07-20 07:15
mark              
lwjsxp
4楼-- · 2019-07-20 07:35
 精彩回答 2  元偷偷看……
xuyan021
5楼-- · 2019-07-20 10:24
能不能再讲细点?感觉没有理解你的意思。
xuyan021
6楼-- · 2019-07-20 12:34
能不能再讲细点?感觉没有理解你的意思。

一周热门 更多>