重启的表面原因是开启了看门狗,由于上电初始化网口的时候没插网线,程序卡在 文件:stm324x7_eth.c中的ETH_ReadPHYRegister()函数中的
do
{
timeout++;
tmpreg = ETH->MACMIIAR;
} while ((tmpreg & ETH_MACMIIAR_MB) && (timeout < (uint32_t)PHY_READ_TO));
应该可以通过修改超时时间,使看门狗不重启,但是感觉,不插网线就读不到寄存器不应该啊
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
1,确实是网线不插,初始化的时候stm32f4x7_eth文件里面会读取从lan8720读取一些状态,而都是有超时时间限制,所以,如果开了看门狗,几个超时加一起,看门狗就把程序重启了。(这个原因只是碰巧看门狗与到库文件里面的超时,把超时时间改短,或者直接去掉都是可以的,毕竟延时一下网线也不会自己插上)
2,下面程序中的Link_Up,我最开始是Link_Down,也就是原本的逻辑是网线没连接的时候初始化lwip,加载网卡,错误逻辑,现在改成插上网线再添加网卡,
当然这里只是初始化了lwip,如果网线没插的话。如果要热拔插,还需任务监测网线状态,随时的netif_set_up和netif_set_down lwip的网卡(主要原因)
[mw_shl_code=c,true]netif_set_default(&xnetif);
if(Link_Up == GetGB_LinkState())
{
netif_set_up(&xnetif);
#ifdef LWIP_DHCP
SetGB_DHCPState(DHCP_START);
#endif
}
else
{
/* When the netif link is down this function must be called.*/
netif_set_down(&xnetif);
#ifdef LWIP_DHCP
SetGB_DHCPState(DHCP_LINK_DOWN);
#endif
}
/* Set the link callback function, this function is called on change of link status*/
netif_set_link_callback(&xnetif, ETH_link_callback);[/mw_shl_code]
那他估计也是卡在读取寄存器那里了吧,难道这个网络芯片就是这样的?
一周热门 更多>