打印
[STM32F4]

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

[复制链接]
1553|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)

步骤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通。





沙发
keaibukelian| | 2018-8-15 11:58 | 只看该作者
这个是跑系统的吗

使用特权

评论回复
板凳
junpeng324| | 2018-8-15 12:01 | 只看该作者
转载的时候稍微优化一下,看着格式好乱

使用特权

评论回复
地板
heimaojingzhang|  楼主 | 2018-8-16 08:31 | 只看该作者
junpeng324 发表于 2018-8-15 12:01
转载的时候稍微优化一下,看着格式好乱

好的号的 以后会注意的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

85

主题

4142

帖子

4

粉丝