1、确认基础工程可以实现printf用来打印日志。
2、确认ETH的时钟配置正确,查看时间树:
3、打开ETH,选择模式为RMII,使能中断引脚,同时使用中断。
4、确认ETH的GPIO引脚,并修改最高输入速度为Very High
他在原理图为:
【注】在开发板使用手册中有介绍,使用RMII时需要把J6跳到PC1上。
同时原理图上PB10,在手册上说明是使用了PD4。
5、ETH的基本参数如下图所示:
他的RX、TX的描述符开始地址为0x24020000、0x24020080,长度为4+4,接收缓冲区地址为0x24020100,有前辈做了一个图,生动的体现了如何来配置这几个地址的。
【lwip配置】
1、先打开LWIP的配置,使能LWIP,先设置收发硬件为LAN8742。
2、使能DHCP,配置UDP、TCP最大连接数。
3、配置内存堆大小为4*1024,地址为0x24040000
4、TCP回调配置参数。
5、配置TCPIP任务栈大小,这里设置为2*2048字节
其余配置为黙认就行了。
到此LWIP配置就完成了,详细的配置可以查看开发板的lwip例程。
【MPU配置】
在mpu配置中添加0x2400000的配置如下:
接下来生成MDK工程,栈堆大小设置为0x1000
生成工程后,在freertos.c下在StartDefaultTask任务中初始化lwip。
在.sct文件中添加描述符地址。
【验证】
接上网线,在路由器上看到新接入有IP,并使用ping工具,顺利ping通就完成了lwip的移植了。
【总结】
在STM32H7的LWIP的移植,我差不多用了3天才理清,遇到了不少的坑,一路填坑,今天终于理清了思路。在移植过程中有如下几点经验:
1、先学习一下官方提供的例程,确认硬件无问题。我在下载他的官方示例后,没有成功实现,经过查找问题,发现原理图跟他实际的管脚配置不一样,在论坛上发帖后,技术支持告诉我需要跳线。后来才确认了硬件无问题,也成功的跑通了lwip。
2、对照官方例程的配置进行学习配置,这个开发板的例程只提供了MDK的例子,没有stm32cubeMX的配置文件,因此,我对比了NUCLEO-H7S3L8开发板的例程,根据原理图,重新分配ETH的管脚。LWIP根据他的配置来实现。
3、同时也对照了我原来在stm32H735DK上的配置进行了对比。
4、STM32H7需要掌握MPU的配置,同时也需要.sct文件基础知识,要不然例程还是难看懂的。