【前言】
lwip是MCU连接网络的基础构件,配置并移植lwip,使得开发板连上网络,是网络开发的最基础步骤,本篇在前面的基础工程上配置lwip,并能成功获取lwip,在界面上展示获取到的IP地址。
【基础工程】
此次基础工程在上面的测评文章的基础上创建。
【STM32H7S78-DK】测评+ToucGFX之FATFS文件系统移植 - stm32/stm8 - 电子工程世界-论坛 (eeworld.com.cn)
【原理图分析】
先分析一下开发板的网络的原理图:
原理图上我们可以得知,网络采用LAN8742来连接网络,采用RMII协议来与MCU连接。同时LAN8742外接了25MHz的晶振来提供时钟信号,并通过PD7连接到MCU中。
【图形化配置】
1、打开工程的配置,打开ETH,选择模式为RMII,使能中断引脚,同时使用中断。
2、确认ETH的时钟为LAN8742的时钟输入。(注意这里有他的时钟输入本来为25M,但是修改不了)
3、在参数配置中,使能中断,优先级为5。
4、确认一下GPIO,并把所有的GPIO修改为VeryHight的通信速度。同时修改PB1为ETH_RMIITXD1,修改好的GPIO如下图所示:
5、确认一下开发板的JP6的跳线位置,使用RMII时需要把J6跳到PC1上。在用户手册上有介绍:
6、基本参数保持默认即可。这些参数到时在设置网络地址时需要用到。
【LWIP配置】
1、先打开LWIP的配置,使能LWIP,先设置收发硬件为LAN8742。
2、在通用配置中,由于我的路由器有DHCP,所以这里设置为ENABLE,如果没有DHCP服务器,则需要使用固定IP,并在下面设置好IP、网关等配置。
2、修改heap大小为4*1024,如果这里设置太小,程序会跑飞。
3、配置tcp回调参数如下:
4、配置freertos任务栈大小为2*1024字节。
其余的参数保持默认即可。
生成工程,并使用MDK打开工程:
【代码添加】
1、在freertos.c中添加#include "cmsis_os2.h"
在freertos.c下在StartDefaultTask任务中初始化lwip。
【编译与验证】
编译好后下载到开发板,从路由器中查看所接入的IP为192.168.3.237,使用PING可顺利的PING通
【GUI展示IP】
1、在图形界面添加获取IP的text与button
3、编写实现函数:
void Screen1View::funShowIP()
{
Unicode::snprintf(textIpddressBuffer,20,("IP:%d.%d.%d.%d"),((gnetif.ip_addr.addr)&0x000000ff),
(((gnetif.ip_addr.addr)&0x0000ff00)>>8),
(((gnetif.ip_addr.addr)&0x00ff0000)>>16),
((gnetif.ip_addr.addr)&0xff000000)>>24);
textIpddress.invalidate();
}
4、下载到开发板后,按下button可以获取到IP
【总结】
移植lwip的步骤比较简单,主要就是需要手工修改一下堆栈的大小,核对跳线与原理图等。
本帖最后由 lugl4313820 于 2024-10-1 12:28 编辑引用: UUC 发表于 2024-10-1 17:52 学习了,话说国庆假期都不休息的嘛
每天学习,写作业就是渡假,根本停不下来!