目录

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相关推荐

  1. STM32移植lwip之建立web服务器

    本篇目标:在之前能ping通pc机的工程基础上搭建web服务器,借鉴官方web服务器的程序与网页,能够用pc机浏览器访问web服务器,并返回设置的网页 材料准备: 基础工程:修改后能ping通pc机的 ...

  2. 一文搞定stm32移植LWIP及代码逻辑

    文章目录 一,使用以太网的库 二,ST以太网驱动库的移植 1,stm32f4x7_eth.c 2,lan8720.c 三,移植LWIP协议栈 1,lwip_comm.c 2,ethernetif.c ...

  3. STM32移植LWIP网线热插入网络不通的解决办法

    开发背景: 1.主芯片-STM32F207VCT6: 2.TCP/IP协议栈-LWIP,依托ST例程移植: 3.操作系统-无(裸机): 异常现象: 1.网线不插入的情况下先给设备上电,之后再插入网线无 ...

  4. 【程序】STM32H743ZI单片机驱动DP83848以太网PHY芯片,移植lwip 2.1.3协议栈,并加入网线热插拔检测的功能

    STM32H7的ETH HAL库封装得比较好,真正做到了完全用HAL API函数操作,不需要再用寄存器操作. 而STM32F1的ETH HAL库就没有完全封装,有些操作必须要用寄存器完成,而且还需要单 ...

  5. 【MCU】STM32F107VC单片机驱动DP83848以太网PHY芯片,移植LWIP 2.1.2协议栈,并加入网线热插拔检测的功能(HAL库)

    开发板: 杜邦线传输高速数字信号容易出错,所以在用面包板搭建开发环境时,最好使用25MHz时钟的MII接口.如果要用50MHz的RMII接口,那么杜邦线必须要非常非常短,否则时钟信号一旦失真,就无法收 ...

  6. 使用标准库对STM32F407ZGT6移植LWIP(逻机-全网最全)

    使用STM32CubeM对F407ZGT6移植LWIP(全网最全) 使用标准库对STM32F407ZGT6移植LWIP(逻机-全网最全) 基于STM32单片机的LwIP协议(一)网络协议简介 基于ST ...

  7. STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085和串口只发送数据不能接收数据问题

    STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085的问题讨论:http://www.rt-thr ...

  8. STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085和不能接收数据问题讨论

    STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085的问题讨论:http://www.rt-thr ...

  9. STM32使用LWIP库新建tcp_sever

    欢迎查看本文所在的系列,STM32的LWIP应用,点击跳转 main函数 区域1是lwip的初始化 void LwIP_Init(void) {struct ip_addr ipaddr;struct ...

最新文章

  1. linux下载哪个python版本-修改linux下python的默认版本
  2. web语义化与h5新增标签
  3. linux内存碎片malloc,linux_ptmalloc下malloc()的过程:有 ptmalloc 源码
  4. 基于pytorch的BP神经网络模型构建
  5. Three Bags CodeForces - 1467C (贪心)
  6. 基于FPGA的UART串口发送模块设计
  7. HTML实现二级联动下拉菜单,基于jquery的二级联动菜单实现代码
  8. 天津大学计算机系专业,请问天大计算机专业的研究生怎么样啊?
  9. 经典车间生产调度问题模型及其算法 目录
  10. 记录DBeaver报SQL 错误 [1064] [42000]: #42000的一个坑
  11. sklearn使用入门
  12. 知识图谱学习|报告总结|肖仰华: 知识图谱下半场-机遇与挑战
  13. DEEP AUTOENCODING GAUSSIAN MIXTURE MODEL FOR UNSUPERVISED ANOMALY DETECTION
  14. matlab 已实现极差波动,关于黄金期货论文范文写作 中国黄金期货价格SVR智能预测相关论文写作资料...
  15. centos 安装迅搜
  16. Pyspark Python worker exited unexpectedly (crashed) java.io.EOFException
  17. 一句话笔记-关于Linux挂载U盘乱码
  18. 互联网周刊:腾讯能否灭UC
  19. grep命令基础知识
  20. 如何对xilinx FPGA进行bit文件加密

热门文章

  1. vs2019中如何创建qt项目_Qt在vs2019中使用及设置方法
  2. java质因数算法_Java实现的质因数分解操作示例【基于递归算法】
  3. python查看pypi第三方库可安装的全部版本
  4. list多选 android,Android ExpandableListView单选以及多选实现代码
  5. linux 1t 分区,Linux磁盘管理——swap分区
  6. 关于php的函数,总结关于PHP文件函数有哪些
  7. 小程序php生成海报,小程序用canvas绘制海报的做法
  8. BZOJ2654: tree 二分答案+最小生成树
  9. 原则 principles
  10. Open Live Writer - TargetInvocationException