STM32F407芯片RT Thread系统下移值LWIP协议,采用DP83848的PHY芯片
首先需要一个能跑起来的基于STM32F407的RT Thread系统,具体移值过程参考https://blog.****.net/qq_25186745/article/details/103808138
这篇文章写得是基于STM32F103的,F407和这个大同小异,需要注意的地方就是RAM大小设置,参考
https://blog.****.net/qq_25186745/article/details/105436197
基础工程下载地址
https://download.****.net/download/qq_25186745/12321737
打开基础工程中的board文件夹,在Kconfig文件中增加DP83848C的定义,以便在menuconfig中使用,这个可以参考正点原子的BSP文件夹中的Kconfig文件修改。
修改后内容如下,主要就加了using DP83848C和using ETH的定义
然后在工程目录下打开menuconfig,使能以太网外设。
启用 lwIP 与 net device
保存退出后使用scons --target=mdk5编译生成工程。
然后打开工程可以看到工程中增加了LWIP分组,这个时候编译一下会有很多错误。
我们打开STM32_HAL分组下的stm32f4xx_hal_eth.c文件,发现HAL_ETH_MODULE_ENABLED这个东西没有定义
我们打开stm32f4xx_hal_conf.h文件,在里面找到#define HAL_ETH_MODULE_ENABLED,并取消注释
然后再编译一下就剩phy_reset这一个错误了,phy_reset()函数是PHY芯片的复位脚,需要自己实现该函数,我们新建一个phy_reset.c和phy_reset.h文件添加到工程中,根据自己的板子修改RESET引脚。
确认 MII/RMII 模式
根据实际情况更改rt_stm32_eth_init()函数中的工作模式,我这里采用的是RMII模式
然后需要完成RMII各个功能引脚的初始化,不同型号的单片机引脚可能不太一样,根据自己的实际情况完成初始化。
我的单片机型号是STM32F407VGT6,引脚对应关系是
ETH_MDIO -------------------------> PA2
ETH_MDC --------------------------> PC1
ETH_RMII_REF_CLK------------> PA1
ETH_RMII_CRS_DV -------------> PA7
ETH_RMII_RXD0 -----------------> PC4
ETH_RMII_RXD1 -----------------> PC5
ETH_RMII_TX_EN ---------------> PB11
ETH_RMII_TXD0 -----------------> PB12
ETH_RMII_TXD1 -----------------> PB13
打开工程下board\CubeMX_Config\my_bsp文件夹使用CubeMX生成GPIO初始化代码。
配置好需要用到的引脚,并选择ETH模式为RMII,然后生成代码。
在生成的工程中打开eth.c文件,找到void HAL_ETH_MspInit(ETH_HandleTypeDef* ethHandle),复制整个函数到我们的工程中
粘贴到drv_eth.c中,并在rt_stm32_eth_init()函数中调用。
在drv_eth.h文件中定义的有三种PHY的驱动程序,打开看一下现在定义的是否和你使用的是不是一样。
然后编译一下没有错误,下载到实验板上试一下。硬件连接如下,默认是开启DHCP的。
下载启动后再shell下也可以使用ping命令,ping一下电脑。
也可以使用ifconfig查看开发板IP地址
至此LWIP协议移值成功,本文参考
工程源代码