STM32F407芯片RT Thread系统下移值LWIP协议,采用DP83848的PHY芯片

首先需要一个能跑起来的基于STM32F407的RT Thread系统,具体移值过程参考https://blog.csdn.net/qq_25186745/article/details/103808138

这篇文章写得是基于STM32F103的,F407和这个大同小异,需要注意的地方就是RAM大小设置,参考

https://blog.csdn.net/qq_25186745/article/details/105436197

基础工程下载地址

https://download.csdn.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协议移值成功,本文参考

https://www.rt-thread.org/document/site/application-note/components/network/an0010-lwip-driver-porting/

工程源代码

https://download.csdn.net/download/qq_25186745/12321950

猜你喜欢

转载自blog.csdn.net/qq_25186745/article/details/105452160