1.使用rt-thread studio新建项目,选择好主控芯片和打印串口。
新建工程第一步当然是关心芯片各个总线的系统时钟啦,打开driver文件下的drv_clk.c文件修改#define DBG_LVL DBG_INFO为#define DBG_LVL DBG_LOG
打印出系统时钟
编译、下载通过串口即可看到当前的系统时钟,可以看到rt thread系统已经把系统时钟配置好了,我们用系统默认就可以。
如果需要修改更改drv_clk.c文件里的system_clock_config()就可以了。
打开drivers文件下的 board.h文件,打开#define BSP_USING_ETH的宏定义
打开#define PHY_USING_LAN8720A的宏定义
打开CubeMX Settings(新版的rt thread studio虽然集成了CubeMX,但好像还是要先生存keil工程然后再复制代码)。
LAN8720芯片和单片机采用RMII接口。
引脚连接如下
LAN8720A STM32F407VGT6
ETH_MDIO----------->PA2
ETH_MDC------------>PC1
ETH_RESET------------>PA0
RMII_TXD0-------------->PB12
RMII_TXD1-------------->PB13
RMII_TX_EN-------------->PB11
RMII_RXD0-------------->PC4
RMII_RXD1-------------->PC5
RMII_CRS_DV-------------->PA7
RMII_REF_CLK-------------->PA1
这里还有许多设置,不知道干嘛用的,全部默认即可。
配置完生成keil工程,然后打开工程里的stm32f4xx_hal_msp.c文件,复制void HAL_ETH_MspInit(ETH_HandleTypeDef* heth)函数。
复制到自己工程的 board.c
文件的末尾
在 stm32f4xx_hal_conf.h
文件中打开对 ETH
的支持,也就是取消掉 HAL_ETH_MODULE_ENABLED
这个宏定义的注释
在主函数中添加void phy_reset(void)函数
打开RT-Thread Settings打开 LWIP
协议栈的支持
LWIP图标右键-->详细信息
这里不需要修改什么信息,然后编译下载,插上网线,网络已经通了,但还不支持ifconfig指令
仔细查了下ifconfig命令在SAL里面,那么就开启SAL
详细配置里默认已经打开了ifconfig功能了
重新编译、下载,试一下ifconfig命令
成功打印出设备的IP地址,默认是开启了DHCP功能的。
到这里LAN8720网络就已经调通了。很简单。。。。
就单这么一个程序,其他通信程序都没加,运行一段时间就是RxCpltCallback err = -3错误,虽然不影响通信,但看着不舒服啊。
修改LWIP的两个配置
然后编译、下载基本不会再出现这个错误了。