STM32网络通讯之LWIP下载移植项目设计(十六)

STM32F407 系列文章 - ETH-LWIP-Transplant(十六)


目录

前言

一、软件设计

二、下载移植实现

1.lwip下载

1.下载方式一

2.下载方式二

2.lwip文件介绍

3.lwip移植

4.添加PHY驱动代码

5.修改ethernetif文件

6.添加用户代码

7.main文件实现

8.效果演示

总结


前言

一般对于许多嵌入式系统或单片机,在其资源受限的环境下,要想实现网络通讯,并保证资源的高效利用和稳定的网络通信,我们一般采用一种轻量级的网络协议lwIP。TI公司的STM32芯片一般都会自带一路以太网口,用于网络通讯,但因其内存资源受限,所以都用采用一种小型化、轻量级的lwIP网络协议,只需十几KB的RAM和大约40K的ROM即可运行,既可以在无操作系统环境下工作,也可以与各种操作系统配合使用,使其成为资源受限的嵌入式系统的理想选择。一般市场上所卖的板子都带这一功能的,需准备STM32F407开发板一块和网线一根。


一、软件设计

前面博文STM32之LWIP网络通讯设计介绍(十四)-优快云博客讲述了对STM32实现LWIP网络通讯的前提性要求介绍,包含使用到的网络协议、MAC内核、PHY驱动芯片、通讯连接示意图、以及硬件电路原理设计图,为网络通讯软件开发提供了设计指导。STM32网络通讯的软件设计,在上一篇文章STM32网络通讯之CubeMX实现LWIP项目设计(十五)-优快云博客,采用的是通过可视化工具STM32CubeMX完成对lwIP通讯的配置,一键化生成工程代码。今天将采用另一种实现方法,即先下载lwIP,然后完成lwIP移植到STM32工程项目中,在完成其通讯配置,这种实现方式较前面的有一定的困难,对熟悉lwip通讯有一定的要求,如果对lwip不是足够了解,博主推荐采用前篇文章实现。

二、下载移植实现

通过下载、移植lwIP到STM32工程项目中,实现网络通讯。

1.lwip下载

点击打开LWIP官网lwIP - 轻量级 TCP/IP 堆栈,显示界面如下所示。在上面既可以下载所需版本lwip,也可以获得相应技术支持。

1.下载方式一

在上面找到下载区,点击进入后,选择我们需要下载的版本,如下所示。这里为了与前面的CubeMX工具上lwip版本保持一致,也选择lwip 2.12版本。

点击上面的版本进行下载时,有时无法响应,这时我们可以采取git方式下,即方式二下载。

2.下载方式二

选择上面的git存储区,点击“lwIP-轻量级 TCPIP堆栈”(lwip.git - lwIP - 轻量级 TCPIP 堆栈),选择对应的版本进行下载。在该选项下面还有一个“lwIP Contrib - 为轻量级 TCP/IP 堆栈提供的代码”选项(contrib.git - lwIP Contrib - 用户例程代码)即官方Contrib提供的demo例程代码,这里选择lwip-contrib-STABLE-2_1_0_RELEASE.tar.gz进行下载(后面需要用到里面的文件)。

 也可以直接点击下载网址进行下载,提供对应版本下载地址如下:

https://git.savannah.nongnu.org/cgit/lwip.git/snapshot/lwip-STABLE-2_1_2_RELEASE.tar.gzicon-default.png?t=O83Ahttps://git.savannah.nongnu.org/cgit/lwip.git/snapshot/lwip-STABLE-2_1_2_RELEASE.tar.gz下载完后,可以看到如下大小的压缩包。

2.lwip文件介绍

对上面下载的压缩包进行解压,得到如下画面。

上图中的lwip2.1.2文件夹包含了许多文件和子文件夹,关于里面的文件我们不需要关心,主要是记录lwIP源码更新、开源软件license、描述lwIP的特点、介绍lwIP源码包的文件目录信息等等,无关紧要。另外还有三个文件夹doc、src、test,其中doc文件夹里面是关于LwIP的一些文档,可以看成是应用和移植LwIP的指南;test文件夹里面是测试LwIP内核性能的源码,将它们和LwIP源码加入到工程中一起编译,调用它们提供的函数,可以获得许多与LwIP内核性能有关的指标;src文件夹是lwIP源码包中最重要的,它是lwIP的内核文件,也是我们移植到工程中的重要文件。

打开src文件夹,如下所示,主要讲解下面5个文件夹。

api文件夹里面装的是NETCONN API和Socket API相关的源文件,只有在操作系统的环境中,才 能被编译。apps文件夹里面装的是应用程序的源文件,包括常见的应用程序,如httpd、mqtt、tftp、sntp、snmp等。core文件夹里面是LwIP的内核源文件,后续会详细讲解。include文件夹里面是LwIP所有模块对应的头文件。netif文件夹里面是与网卡移植有关的文件,这些文件为我们移植网卡提供了模板,我们可以直接 使用。

LwIP内核是由一系列模块组合而成的,这些模块包括:TCP/IP协议栈的各种协议、内存管理模 块、数据包管理模块、网卡管理模块、网卡接口模块、基础功能类模块、API模块。每个模块是由相关的几个源文件和头文件组成的,通过头文件对外声明一些函数、宏、数据类型,使得其它模块可以方便地调用此模块的功能。而构成每个模块的头文件都被组织在了include目录中,而源文件则根据类型被分散地组织在 api、apps、core、netif目录中。下面的子级文件在不作介绍,具体可以查看LwIP的官方说明文档。

3.lwip移植

打开我们stm32项目工程文件,如下。如果没有Middlewares文件夹,则创建它,然后在 Middlewares文件夹下创建了一个名为“lwip”的子文件夹。在“lwip”文件夹下,我们又创建了两个子文件夹:arch和lwip_app。arch文件夹用于存放lwIP系统的配置文件;而lwip_app文件夹则用于存放用户自定义的文件,例如应用程序的源代码等。最后将上述的lwip-STABLE-2_1_2_RELEASE文件夹里面的src文件夹拷贝到lwip文件夹里面。

​ 

打开stm32工程,并添加 Middlewares/lwip/src、Middlewares/lwip/lwip_app 和 Middlewares/lwip/arch这3个分组,如下所示。

​  

在Middlewares/lwip/src分组添加src/api 路径下、和src/core路径下的除ipv6文件夹的全部.c文件,另添加src/netif路径下的ethernet.c文件,如下图所示。

​​

而arch文件夹主要存放lwipopts.h、cc.h、ethernetif.c/h这四个文件都可以在“lwip-contrib-STABLE-2_1_0_RELEASE”文件包下获取。然后再Middlewares/lwip/arch分组添加arch文件夹下的.c文件,显示如下。

添加/移植完后,在keil上显示如下文件。

4.添加PHY驱动代码

这里添加的PHY驱动文件代码,就相当于上一篇博文CubeMX生成项目工程下的lwip.c/h和ethernetif.c/h文件的代码,因为CubeMX界面上配置好的PHY驱动参数,生成为lwip.c/h和ethernetif.c/h文件,lwip官方代码是不带驱动代码的,因其不知道你用哪款驱动芯片。添加PHY驱动代码实现步骤如下:

在工程项目路径Drivers\BSP文件夹中,创建“ETHERNET”文件夹,如下所示。

然后在“ETHERNET”文件夹下新建ethernet.c和ethernet.h这两个文件,并将这两个文件添加到项目工程中Drivers/BSP分组下,如下所示。

​  

在这两个文件需要完成以太网驱动初始化和MAC的驱动程序,源代码如下示例。

#include "./BSP/ETHERNET/EthDriver.h"

ETH_HandleTypeDef g_eth_handler;    /* 以太网句柄 */
LWIP_DEV_INFO g_lwipdev;            /* lwip控制结构体 */
struct netif g_netif;               /* 定义一个全局的网络接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值