GD32H759IMK网络PHY外设由LAN8720移植到YT8512H
源代码使用野火GD32H7程序源码中ENET_LWIP-tcp_client_FreeRTOS来进行移植移植后代码放在这里【免费】GD32H759,tcp-client-FreeRTOS-to-YT8512H-ENET0-OK资源-CSDN下载YT8512H配置为RMII2模式也就是YT8512H输出50MHz时钟信号给GD32的MAC管脚根据原理图修改好之后这里需要注意的是YT8512H输出50MHz时钟信号要进入复用为ETH0_RMII_REF_CLK的管脚这里管脚配置不能配置为GPIO_MODE_INPUT否则MAC接收不到时钟信号野火源程序中这一行其实是没必要的因为YT8512H输出时钟信号后MAC不需要通过PA8管脚再输出时钟信号了不管也没影响。剩下需要修改的是enet的库文件GD32H7xx的库文件原本不支持YT8512H所以需要自行添加打开gd32h7xx_enet.h找到PHY_TYPE增加定义YT8512H并且把PHY_TYPE宏定义改为YT8512H在下面的PHY_SR宏定义中添加TY8512H修改PHY_ADDRESS宏定义这里是根据YT8512H的管脚配置来决定的这里硬件已经配置为了0011所以修改为3Ugd32h7xx_enet.h修改结束lan8720的SR寄存器定义与YT8512H关于10M和100M的定义相反所以需要修改gd32h7xx_enet.c函数找到enet_init函数中if分支为ENET_AUTO_NEGOTIATION下在判断10M和100M的逻辑增加了if(PHY_TYPE YT8512H)的逻辑判断这里只会影响调用enet_init时候参数为ENET_AUTO_NEGOTIATION的情况如果直接在enet_init中传入ENET_100M_FULLDUPLEX参数也可以不改这里。至此修改结束在调试中最初遇到软件复位的时候卡死的情况也就是卡在了下面的while函数中排查发现是8512的时钟没有给到MAC如果有同样卡死的情况检查ETH0_RMII_REF_CLK管脚是否配对或者时钟是否给到即可。