本帖最后由 qq302011 于 2023-1-5 17:22 编辑
我在使用STM32H743VGT6的时候,使用stm32cubemx生成网络的工程;调试时候直接死在了ethernetif.c文件中的static void low_level_init(struct netif *netif)函数------>Error_Handler();[C] 纯文本查看 复制代码 if (hal_eth_init_status == HAL_OK)
{
/* Get link state */
ethernet_link_check_state(netif);
}
else
{
Error_Handler();
}
通过查找发现调用hal_eth_init_status = HAL_ETH_Init(&heth);这条语句的时候,返回错误;
于是进一步进入到HAL_ETH_Init函数中调试; 发现死在了这里
[C] 纯文本查看 复制代码 /* Wait for software reset */
while (READ_BIT(heth->Instance->DMAMR, ETH_DMAMR_SWR) > 0U)
{
if (((HAL_GetTick() - tickstart) > ETH_SWRESET_TIMEOUT))
{
/* Set Error Code */
heth->ErrorCode = HAL_ETH_ERROR_TIMEOUT;
/* Set State as Error */
heth->gState = HAL_ETH_STATE_ERROR;
/* Return Error */
return HAL_ERROR;
}
}
在这个地方发生了 return HAL_ERROR;
请问这种情况如何处理哈?
我测试目前是可以读PHY芯片里面的寄存器的。这个在LAN8742_Init有所体现,我读地址为2的寄存器为0x001c,我是用的phy芯片是rtl8201f,通过查看芯片资料,该地址的值正好是0x001c,硬汉哥能否指导下哈? 这个软复位是复位的什么地方? 请问我该如何查找问题哈?
|