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相关推荐
- STM32移植lwip之建立web服务器
本篇目标:在之前能ping通pc机的工程基础上搭建web服务器,借鉴官方web服务器的程序与网页,能够用pc机浏览器访问web服务器,并返回设置的网页 材料准备: 基础工程:修改后能ping通pc机的 ...
- 一文搞定stm32移植LWIP及代码逻辑
文章目录 一,使用以太网的库 二,ST以太网驱动库的移植 1,stm32f4x7_eth.c 2,lan8720.c 三,移植LWIP协议栈 1,lwip_comm.c 2,ethernetif.c ...
- STM32移植LWIP网线热插入网络不通的解决办法
开发背景: 1.主芯片-STM32F207VCT6: 2.TCP/IP协议栈-LWIP,依托ST例程移植: 3.操作系统-无(裸机): 异常现象: 1.网线不插入的情况下先给设备上电,之后再插入网线无 ...
- 【程序】STM32H743ZI单片机驱动DP83848以太网PHY芯片,移植lwip 2.1.3协议栈,并加入网线热插拔检测的功能
STM32H7的ETH HAL库封装得比较好,真正做到了完全用HAL API函数操作,不需要再用寄存器操作. 而STM32F1的ETH HAL库就没有完全封装,有些操作必须要用寄存器完成,而且还需要单 ...
- 【MCU】STM32F107VC单片机驱动DP83848以太网PHY芯片,移植LWIP 2.1.2协议栈,并加入网线热插拔检测的功能(HAL库)
开发板: 杜邦线传输高速数字信号容易出错,所以在用面包板搭建开发环境时,最好使用25MHz时钟的MII接口.如果要用50MHz的RMII接口,那么杜邦线必须要非常非常短,否则时钟信号一旦失真,就无法收 ...
- 使用标准库对STM32F407ZGT6移植LWIP(逻机-全网最全)
使用STM32CubeM对F407ZGT6移植LWIP(全网最全) 使用标准库对STM32F407ZGT6移植LWIP(逻机-全网最全) 基于STM32单片机的LwIP协议(一)网络协议简介 基于ST ...
- 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 ...
- 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 ...
- STM32使用LWIP库新建tcp_sever
欢迎查看本文所在的系列,STM32的LWIP应用,点击跳转 main函数 区域1是lwip的初始化 void LwIP_Init(void) {struct ip_addr ipaddr;struct ...
最新文章
- linux下载哪个python版本-修改linux下python的默认版本
- web语义化与h5新增标签
- linux内存碎片malloc,linux_ptmalloc下malloc()的过程:有 ptmalloc 源码
- 基于pytorch的BP神经网络模型构建
- Three Bags CodeForces - 1467C (贪心)
- 基于FPGA的UART串口发送模块设计
- HTML实现二级联动下拉菜单,基于jquery的二级联动菜单实现代码
- 天津大学计算机系专业,请问天大计算机专业的研究生怎么样啊?
- 经典车间生产调度问题模型及其算法 目录
- 记录DBeaver报SQL 错误 [1064] [42000]: #42000的一个坑
- sklearn使用入门
- 知识图谱学习|报告总结|肖仰华: 知识图谱下半场-机遇与挑战
- DEEP AUTOENCODING GAUSSIAN MIXTURE MODEL FOR UNSUPERVISED ANOMALY DETECTION
- matlab 已实现极差波动,关于黄金期货论文范文写作 中国黄金期货价格SVR智能预测相关论文写作资料...
- centos 安装迅搜
- Pyspark Python worker exited unexpectedly (crashed) java.io.EOFException
- 一句话笔记-关于Linux挂载U盘乱码
- 互联网周刊:腾讯能否灭UC
- grep命令基础知识
- 如何对xilinx FPGA进行bit文件加密
热门文章
- vs2019中如何创建qt项目_Qt在vs2019中使用及设置方法
- java质因数算法_Java实现的质因数分解操作示例【基于递归算法】
- python查看pypi第三方库可安装的全部版本
- list多选 android,Android ExpandableListView单选以及多选实现代码
- linux 1t 分区,Linux磁盘管理——swap分区
- 关于php的函数,总结关于PHP文件函数有哪些
- 小程序php生成海报,小程序用canvas绘制海报的做法
- BZOJ2654: tree 二分答案+最小生成树
- 原则 principles
- Open Live Writer - TargetInvocationException