STM32F107移植LWIP到老旧开发板:DM9161A PHY的挑战与解决

11 下载量 114 浏览量 更新于2024-08-31 4 收藏 1.58MB PDF 举报
"本文主要介绍了如何使用STM32CubeMX在STM32F107微控制器上移植轻量级网络接口协议(LWIP),并针对PHY芯片DM9161A进行配置。在移植过程中,作者遇到了ping不通的问题,并最终解决了问题,实现了网络通信。" 在STM32CubeMX中配置STM32F107时,首先要考虑的是网络接口的选择。由于开发板使用了RMII( Reduced Media Independent Interface)通信方式,这是STM32与以太网PHY之间的常见接口,它占用较少的GPIO引脚。在CubeMX中,需要确保自动协商功能开启,以适应不同的数据速率和双工模式。由于是裸机运行LWIP,选择非DMA的polling模式进行数据传输。 配置PHY芯片时,注意PHY地址通常由硬件连接决定,文中提到的PHY地址为0。尽管CubeMX中没有DM9161A的具体选项,但可以选择一个类似的PHY如LAN8742,因为它们的基础寄存器和状态控制是标准化的。然而,不同厂商的PHY可能包含特定的寄存器,这些寄存器需要正确配置才能正常工作。在本文中,作者最初未正确配置这些特定寄存器,导致了通信问题。 STM32F107的MCO(Microcontroller Clock Output)引脚需要设置为50MHz,为RMII模式的PHY提供时钟。同时,MCO引脚应配置为高频输出。LWIP的配置中,选择固定IP地址,不使用操作系统,其他保持默认。 生成代码后,使用MDK(Keil Microcontroller Development Kit)进行编译,并将MX_LWIP_Process()函数添加到主循环,以处理网络收发。此时,尽管网口的绿灯和黄灯亮起,但ping不通,表明问题出在网络配置上。 在调试阶段,通过调试器和Wireshark分析网络流量,发现开发板能够接收到并正确回复ping命令,但计算机无法访问。这表明PHY层已经正常工作,问题可能在于上层协议或配置。通过查阅DM9161A的数据手册和STM32的ETH相关文档,逐步跟踪初始化代码,找到了问题所在并进行了修正,最终成功实现了ping通信。 总结起来,这个过程涉及了STM32CubeMX的使用、以太网PHY的配置、LWIP协议栈的移植、裸机编程以及网络通信的调试。对于任何想要在STM32平台上使用LWIP和以太网功能的开发者来说,这是一个有价值的实践案例,提供了遇到问题时的排查思路和解决方法。