lwIP学习记录4——裸机移植lwIP工程
1、工程准备
本文参考学习正点原子进行移植学习,并做此记录!
我使用的是STM32F407探索者开发板,HAL库版本是STM32Cube_FW_F4_V1.26.0。
复制例程:实验37 内存管理实验
二、下载LWIP源码包
Index of /releases/lwip/http://download.savannah.nongnu.org/releases/lwip/可以通过以上的网址链接,进行lwIP源码包以及contrib包的下载。
我下载的最新源码包:V2.2.1,而原子使用的是V2.1.3
contrib包文件介绍
lwIP源码包文件介绍
源码包主要就是看src文件夹里面的各种文件,实现了对TCP/IP协议的应用层、传输层和网络层的实现
三、移植流程
1、添加lwIP源码添加到工程
在工程的Middlewares目录下新建lwip,且在lwip下新建arch和lwip_app文件夹;
把lwIP源码包下的src文件夹复制到Middlewares\lwip目录下;
2、添加以太网驱动文件
打开原子写好 的lwip例程复制以太网驱动文件,然后粘贴到我们工程的BSP文件夹下(这里很多同学会有疑问,怎么没讲怎么写驱动?确实没有讲,后续只能我们自己研究学习了)
3、打开工程添加网卡与库文件
4、添加stm32f4xx_hal_conf.h到USER文件夹下并修改
为什么要修改?是因为原子 的内存实验这个例程没用到以太网功能,所以在库里面删除了以太网 的函数,所以现在要修改
1)以太网宏注释取消
2)下载HALV1.26版本
3)打开这个stm32f4xx_hal_conf_template.h文件,找到以太网相关的配置
复制200-264行代码
粘贴到工程的conf.h的188行
5、工程添加lwip分组文件
1)添加分组
2)往分组添加文件
添加到arch文件时候,需要找寻其他文件来添加,如下图
lwipopts.h:这个文件是配置网络层的内存空间大小,我们参考ST的lwip历程把它复制过来
etherneif.c与etherneif.h ,我们参考ST的lwip历程把它复制过来
cc.h
lwip_comm.c与lwip_comm.h从原子例程复制过来,后续在研究如何写
最后复制完,如下图
6、arch添加刚才复制的所有.c文件添加进来
7、添加lwip头文件路经
8、编译工程,然后修改配置文件
1)修改cc.h:配置lwIP数据类型;
2)修改ethernetif.c:以太网网卡驱动文件;
直接复制例程中写好的就行,不用对原理深究,之后会逐一学习;
3)修改ethernetif.h:给外部文件一个使用接口;
4)修改HAL配置文件:兼容四款PHY芯片。
先屏蔽
后添加
这个主要是为了兼容四款PHY芯片,价格一个ifdef的宏定义,来选择具体的PHY芯片。
8、 主函数修改代码,复制例程的主函数代码过来
编译无错误
9、注意事项
1)如果网络的灯不闪烁,可能没做硬件的复位
2)如果不使用DHCP请求,就把他写0
然后我们在这里设置IP等等
3)测试,电脑ping一下开发板的IP地址,看通不通
4)开发板不同区别在与PHY芯片不同,或者RMII引脚不同、或者MAC地址不同,裸机移植到这里完成。