[STM32F4] (转)配置rt-thread中的lwip模块

[复制链接]
1726|3
 楼主| heimaojingzhang 发表于 2018-8-15 11:50 | 显示全部楼层 |阅读模式
本文博客链接: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, 下载次数: 2)

步骤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)

步骤6:修改stm32f4xx_eth.c文件中的phy_monitor_thread_entry()函数。
本函数存在bug,还是使用LAN8700寄存器,应该使用DP83848的寄存器。

6.rar (998 Bytes, 下载次数: 3)


修改处:


  • //            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通。





keaibukelian 发表于 2018-8-15 11:58 | 显示全部楼层
这个是跑系统的吗
junpeng324 发表于 2018-8-15 12:01 | 显示全部楼层
转载的时候稍微优化一下,看着格式好乱
 楼主| heimaojingzhang 发表于 2018-8-16 08:31 | 显示全部楼层
junpeng324 发表于 2018-8-15 12:01
转载的时候稍微优化一下,看着格式好乱

好的号的 以后会注意的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

110

主题

4357

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部