我想做一个利用phy芯片与GD32F407为基础的lwip的网络通信,软件用的是stm32f407的标准库,参照了正点原子的lwip例程做得移植,同样的板子上,stm32芯片正常通信,但是GD32芯片就不行,我想请问在GD32芯片上用stm32的库开发lwip网络通信需要注意什么吗?
因为事情比较仓促,希望能得到您的回答,无比感谢!
用的是同样的PHY芯片吗?如果直接用不能通讯,可能要查一下底层是不是有什么不兼容的地方了。
从《从 STM32F4xx 移植到 GD32F4xx的移植说明》来看,如下
5.6. ENET 模块使用时修改代码
若出现以太网 ping 不通的问题,若排除硬件问题,软件有以下两种可能:(1)由于 GD32F4xx 芯片主
频较高,在代码端,应该保证将 ENET_DMA_CTL 寄存器的第 20 位 FTF 置 1,清空发送 FIFO 后,必须软
件等待该位被硬件清 0 后适当延迟再进行其他操作。否则,有概率性导致 ENET 发送异常,从而出现 PING
不通的情况,修改代码如示例代码 2.3 所示。
示例代码 2.3
(2)若客户以太网采用半双工通信,若打开载波侦听,会导致发送异常,按照 802.1 以太网协议,需关闭
载波监听功能,修改代码如示例代码 2.4 所示。
示例代码 2.4
5.7. USBFS 模块使用时修改代码
若出现 USB 端点发送数据偶尔出错的情况,请排查 DCD_EP_Flush();函数使用情况,该函数仅需在 USB
初始化中端点缓冲区配置完成后,进行 Flush,其他地方 Flush 缓冲区会造成 USB 缓冲区异常,因而只需
在 USB 初始化时进行一次缓冲区 Flush 操作,其他地方的 Flush 操作可屏蔽。
ETH_InitStruct->ETH_CarrierSense = ETH_CarrierSense_Disable;// 半双工通信模式下修改
你试一下,别处给的文档,我们测试过