GD32f407VET6芯片代替STM32F407VET6实现 LWIP 连接出现无法获取IP 的问题

最近用GD32f407VET6芯片代替STM32F407VET6实现 LWIP 连接以太网。发现原来ST 正常工作,GD 就出现连接phy芯片 LAN8720A以太网 出现 网口灯有亮也有闪动, 就是无法获取IP 地址。甚至采用固定IP 地址也无法ping通。 源代码采用STM32Cubemx +ETH+lwip+hal 编写。
打开LWIP DEBUG 出现如下信息
dhcp_start(netif=2000332c) st0
dhcp_start(): mallocing new DHCP client
dhcp_start(): allocated dhcpdhcp_start(): starting DHCP configuration
udp_bind(ipaddr = 0.0.0.0, port = 68)
udp_bind: bound to 0.0.0.0, port 68)
udp_connect: connected to 0.0.0.0, port 67)
dhcp_discover()
transaction id xid(538213ef)
dhcp_discover: making request
dhcp_discover: sendto(DISCOVER, IP_ADDR_BROADCAST, LWIP_IANA_PORT_DHCP_SERVER)
udp_send: added header in given pbuf 200033c4
udp_send: sending datagram of length 316
udp_send: UDP packet length 316
udp_send: UDP checksum 0x0000
udp_send: ip_output_if (,,,,0x11,)
dhcp_discover: deleting()ing
dhcp_discover: SELECTING
dhcp_discover(): set request timeout 10000 msecs


求解大神门有没有有遇到这个问题。 是哪里问题。

单步调试看看是哪步程序没跑通,就是移植的问题,仔细找找对比一下两个芯片的区别

看你的调试输出信息,应该是发出了DHCP Discover包,但一直没等到DHCP Offer。有几种可能
1,没发出来
2,没收到
3,局域网里没有DHCP服务器
其中1 2的可能性比较大;
调试步骤:
1,测试PHY的50M时钟信号,不过既然灯都亮了,这个应该问题不大。
2,把PHY寄存器打印下来,确定PHY的工作模式(10M/100M,全双工/半双工),设置对应的MII模式,很多例程写得很简单,只是单纯等网口连接,正确的方式是有个phy task一直监视phy的工作状态。
3,用示波器抓MII上关键信号,和收发有关的.
4,以太网芯片现在的驱动都比较成熟,通常直接就能用。但如果不能一步到位,就需要从底层开始调试,抓包就是一个常用的调试方式,电脑上用wireshark软件来抓包,你可以开DHCP模式,抓单片机发出的DHCP Discover包,或者更底层一点,直接测试收发驱动,电脑端有个叫anysend的软件,可以控制网卡发送任意数据,实际上就算没有这个软件,电脑本身也会经常发一些广播数据,单片机看能不能收到。