本文博客链接:http://blog.csdn.net/jdh99,作者:jdh
环境: 开发环境:MDK5.23 rt-thread版本:2.1.0 lwip版本:1.4.1 单片机型号:stm32f407 phy芯片型号:dp83848
配置步骤:
PHY的时钟是50M,产生这个时钟有两个方法:
- 用50M有源晶振给PHY
- 单片机产生50M信号给PHY
本文用单片机产生50M信号给PHY,使用的引脚是单片机的PA8。
步骤1:配置单片机主频为100M
步骤2:修改rtconfig.h文件,启动lwip
- /* SECTION: lwip, a lighwight TCP/IP protocol stack */
#define RT_USING_LWIP
#define RT_USING_LWIP141
步骤3:修改stm32f4xx_eth.h文件,打开dp83848的相关宏定义
3.rar
(3.32 KB)
步骤4:修改stm32f4xx_eth.c文件,设置为RMII模式
/* STM32F ETH dirver options */
#define RMII_MODE /* MII_MODE or RMII_MODE */
#define RMII_TX_GPIO_GROUP 1 /* 1:GPIOB or 2:GPIOG */
步骤5:修改stm32f4xx_eth.c文件中的GPIO_Configuration()函数,使用PA8输出50M时钟
5.rar
(1.08 KB)
步骤6:修改stm32f4xx_eth.c文件中的phy_monitor_thread_entry()函数。
本函数存在bug,还是使用LAN8700寄存器,应该使用DP83848的寄存器。
6.rar
(998 Bytes)
修改处:
// SR = ETH_ReadPHYRegister(phy_addr, 31);
SR = ETH_ReadPHYRegister(phy_addr, 16);
STM32_ETH_PRINTF("DP83848 REG 16:0x%04X\r\n", SR);
SR = (SR >> 2) & 0x07; /* LAN8720, REG31[4:2], Speed Indication. */
phy_speed_new = PHY_LINK_MASK;
// if((SR & 0x03) == 2)
if((SR & 0x02) == 0)
{
phy_speed_new |= PHY_100M_MASK;
}
配置完成后应该可以ping通。
|