STM32移植LWIP

目录

01、IAR工程移植

02、修改Keil工程


在上篇文章《LWIP初体验-修改ST官方demo》中我们已经在自己的开发板上实现了简单的TCPsever和TCPclient功能。验证完了硬件,接下来的工作就是优化代码,添加应用程序。

有些同学想学习一下,如果下载LWIP的代码,然后移植到自己的代码中,下面我们聊聊移植问题。

我们需要的基础工程是已经实现了10ms定时,led灯1s闪烁,实现了串口打印工程。还需要一份LWIP1.4.1的源码,需要STM32F2系列的以太网驱动。

移植前和移植后源码资料,还有LWIP的源码下载链接

链接:百度网盘 请输入提取码

提取码:4hiw

01、IAR工程移植

首先是IAR工程的移植操作。

添加以太网驱动库,注意,以太网驱动库并不在标准外设库中,需要大家自行到网上或ST官网下载。

图片

把以太网驱动库添加进工程

图片

增加新库的头文件路径

图片

将LWIP源码放入目录中,我的个人习惯放到了Third_Party文件夹中,属于第三方库,以后用到其他类似FATFS这样的第三方库,都会放入次文件夹内。

图片

我们把stm32f2x7_eth_conf_template.h文件剪切到文件夹中,并重命名为stm32f2x7_eth_conf.h

图片

修改文件名称

图片

当然新加的头文件,要添加新的头文件路径。

图片

注意:这个文件是只读文件,要把对勾去掉,不然的话在IDE中无法修改代码。

图片

添加以太网RTL8201EL的驱动程序

我们首先拷贝官方历程驱动,这部分主要是硬件层的初始化,在《LWIP初体验-修改ST官方demo》中,我们已经修改完代码,直接拷贝过来就行。

图片

放入对应的位置

图片

然后把BSP硬件驱动添加进入工程

图片

添加lwip源代码,直接按照LWIP源码目录结构添加即可,不用全部添加,按下图所示接口

图片

添加API相关文件

图片

添加Netif相关文件

图片

添加IPV4相关文件

图片

当然,还要添加头文件路径,这是必不可少的

图片

添加中间文件

图片

添加lwipopts.h

图片

编译出错

图片

这些文件主要是官方开发板的lcd相关文件,把他们屏蔽掉

图片

再编译,出新的错误,再次屏蔽这些现实部分的代码。

图片

修改之后,编译没有问题

图片

复制驱动,直接使用官方demo的文件,

图片

拷贝ethernetif.c文件

图片

拷贝lwipopts.h文件。

图片

把原来的文件删除掉

图片

重新添加我们新添加的文件(注意解除只读属性)

修改文件

图片

新建lwip_app.c和lwip_app.h文件

图片

添加LwIP_Init函数接口。

图片

增加LwIP_Pkt_Handle函数。

图片

定义一下宏

图片

包头文件包含一下

图片

修改函数

图片

修改主函数

图片

使用PC端ping一下开发板的IP

图片

移植成功,可以正常响应ping。

这只是个简单的移植,就是个流水账,想看具体修改内容的,可以到文章开头下载工程代码,对比修改前和修改后的区别。网络部分有很多知识,想深入了解,还需要自己多看看代码。

02、修改Keil工程

添加文件,这些基本和IAR一样。

图片

添加头文件路径

图片

编译代码,有1个错误

图片

在timers.c添加

图片

代码如下

#if defined   (__CC_ARM) /*!< ARM Compiler */ 
    u32_tsys_now(void){} 
#endif
​​​​编译下载,发现ping会死机修改代码优化等级就好了

图片

测试成功

图片

总结:这是一篇流水账的移植记录,深入了解LWIP网络开发,还是要动手自己移植多多研究源码

点击查看本文所在的专辑,STM32F207网络开发

关注公众号,第一时间收到文章更新

### STM32移植LWIP协议栈并集成SNMP功能 #### LWIP协议栈移植STM32的基础流程 在STM32平台上移植LWIP协议栈通常涉及硬件初始化、内存分配以及网络接口配置等多个方面。具体来说,LWIP协议栈的移植可以通过以下方式完成: 1. **硬件准备** 需要确保STM32微控制器具备以太网外设模块,并通过其MAC内核和外部PHY芯片实现物理层连接[^2]。 2. **LWIP环境搭建** 将LWIP协议栈源代码导入开发环境中,调整编译选项以适应目标平台的需求。例如,在`opt.h`文件中定义适合嵌入式的参数设置,如启用轻量级线程模型或禁用不必要的功能来优化资源占用。 3. **网络接口绑定** 实现底层驱动程序与LWIP之间的交互逻辑,主要包含数据包接收/发送处理函数的设计。这部分工作依赖于具体的硬件架构及其对应的寄存器操作方法[^1]。 4. **时间管理机制构建** 提供定时服务给LWIP使用,这可能涉及到RTOS系统的任务调度或者裸机模式下的延时循环结构设计。 5. **测试验证阶段** 编写简单的应用程序去检验基本通信能力是否正常运作,比如ping命令响应情况等基础功能性检测。 #### SNMP功能扩展步骤概述 为了使基于LWIP的应用能够支持SNMP(Simple Network Management Protocol),还需要额外增加一些组件和服务: 1. **引入MIB库** MIB (Management Information Base) 是描述被管对象的数据集合。对于特定设备而言,则需定制化创建相应的MIB条目以便远程管理系统可以查询状态信息或其他属性值。 2. **解析请求消息** 开发针对GetRequest, SetRequest等各种类型PDU(packet data unit) 的处理器单元,负责解读来自客户端发出的操作指令并将结果反馈回去。 3. **生成应答报文** 根据实际运行状况动态填充所需返回的内容字段至标准格式的消息体当中再经由网络传输回原地址位置处。 以下是简化版本的一个伪代码片段展示如何利用socket API模拟建立tcp server监听端口等待连接的过程作为示范用途之一部分而已并非完整解决方案: ```c #include "lwip/tcp.h" void tcp_server(void){ struct tcp_pcb *pcb; pcb=tcp_new(); if(!pcb)return; err_t err=tcp_bind(pcb, IP_ADDR_ANY,80); if(err!=ERR_OK){tcp_close(pcb);return;} pcb=tcp_listen(pcb); if(!pcb){/*handle error*/} tcp_accept(pcb,&accept_connection); } ``` 上述例子仅展示了最基本的server setup过程并未涵盖全部细节内容包括但不限于错误检查等方面考虑因素较多建议参照官方文档深入学习掌握更多技巧要点之后再尝试实践应用于此场景之中[^3]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

strongercjd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值