硬件平台:
魔笛F4 V1.1 STM32F407ZE
开发环境:
MDK4.72,evn0.7.0,rtt3.0.4
BSP:
STM32F40x
目标:LWIP成功跑起来并且可以PING通
步骤一:RTT启动信息输出,根据原理图PCB板使用25Mhz晶振,串口输出为USART3([Tx]PB10 [Rx]PB11)
1.先使用evn重新生成项目文件
2.编译文件确保源码编译没问题
3.根据README.md中的描述,需要修改BSP中的drivers/stm32f4xx_conf里HSE_VALUE为25000000
4.修改rtt的串口端口,工程中搜索”rt_console_set_device”,在drivers/board.c源码的121行找到,宏定义了”CONSOLE_DEVICE”
源码中查找”CONSOLE_DEVICE”定于,跳转到drivers/board.h,根据源码可知修改STM32_CONSOLE_USART=3即可使用USART3输出
5.进入drivers/usart.c设置usart3使用的引脚,根据宏补全设置
6.编译下载,运行后终端有输出,但是finsh没运行
7通过DEBUG发现程序死在RTH的初始化,屏蔽ETH的初始化,打开drivers/stm32f4xx.eth.c,注释4159行的代码,再编译运行
步骤二:ETH配置,根据魔笛F4 V1.1的原理图,PHY使用LAN8720与BSP包一致,使用RMII接口,PHY使用单片机MCO输出时钟信号,PC0控制PHY的复位信号
1.恢复drivers/stm32f4xx.eth.c的4159行代码
2.打开drivers/stm32f4xx.eth.c 找到35行,这里驱动需要根据原理图配置
3.添加MCO的代码,在rivers/stm32f4xx.eth.c的rt_hw_stm32_eth_init函数里添加
4.添加PHY复位引脚驱动,在rivers/stm32f4xx.eth.c的rt_hw_stm32_eth_init函数里添加
5.编译后即可运行,erx的栈溢出段错误
6.配置erx的栈大小,打开bsp包中的rtconfig.h,找到133行的RT_LWIP_ETHTHREAD_STACKSIZE将512改成1024
7.编译后下载,运行ifconfig命令,IP已经成功获取
8.电脑PING也正常