我在调试自己布的STM32F107电路板,以太网芯片用DP83848,采用RMII方式,采用FREERTOS,以太网协议采用uIP,以太网相关的操作独立一个任务执行,正常可以使用,各任务和谐相处。但如果上电的时候,如果没有插网线,初始化以太网需要很长时间,却返回失败,我的程序设定返回失败过一段时间又初始化,这样导致其他任务无法获取运行时间,导致系统假死机。
初始化如下:
………………
//Initialise the MAC
while( xEthInitialise() != pdPASS )
{
vTaskDelay( uipINIT_WAIT );
}
………………………………
在xEthInitialise() 有调用
xReturn= ETH_Init(&xEthInit, PHY_ADDRESS); //配置以太网 ETHERNET
需要很长时间,而ETH_Init是库函数提供的,通过轮询PHY寄存器来判断,
在stm32_eth.h中有对轮询次数进行定义
/** @defgroup PHY_Read_write_Timeouts
* @{
*/
#define PHY_READ_TO ((uint32_t)0x0004FFFF)
#define PHY_WRITE_TO ((uint32_t)0x0004FFFF)
但是PHY_READ_TO改小了,正常连接网线也无法成功初始化
请问能否,如何优化库函数ETH_Init()?谢谢! |