STM32移植LWIP

STM32移植LWIP本文使用的是STM32F207VCT6平台,MII接口的RTL8201EL网络芯片,LWIP版本是1.4.1基础工程是:已经实现了10ms定时,led灯1s闪烁,还有串口打印欢迎查看本文所在的系列,STM32的LWIP应用,点击跳转本文使用的IDE是IAR7.2,考虑到很多很使用Keil,本文末尾也有keil版本的说明添加以太网驱动库添加进工程,增加新库的头文件路径将LWIP源码放入目录中我们把s…

大家好,又见面了,我是你们的朋友全栈君。

目录

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162095.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • dainying

    dainyingmagnet:?xt=urn:btih:DB334CEAFC75A4045D5958159D972B1CCEC1C590

    2022年7月2日
    19
  • JAVA队列( Queue ) 详解[通俗易懂]

    JAVA队列( Queue ) 详解[通俗易懂]什么是队列?队列是一种特殊的线性表,遵循先入先出、后入后出的基本原则,一般来说,它只允许在表的前端进行删除操作,而在表的后端进行插入操作,但是java的某些队列运行在任何地方插入删除;比如我们常用的LinkedList集合,它实现了Queue接口,因此,我们可以理解为LinkedList就是一个队列;java队列特性队列主要分为阻塞和非阻塞,有界和无界、单向链表和双向链表之分;阻塞和非阻塞阻塞队列入列(删除元素)时,如果元素数量超过队列总数…

    2022年7月9日
    32
  • HTML5 canvas 捕鱼达人游戏

    在线试玩:http://hovertree.com/texiao/html5/33/html5利用canvas写的一个js版本的捕鱼,有积分统计,鱼可以全方位移动,炮会跟着鼠标移动,第一次打开需要鼠

    2021年12月24日
    62
  • android 自定义progressdialog,自定义ProgressDialog

    android 自定义progressdialog,自定义ProgressDialog最近工作中需要用到progressDialog,可是系统自带的黑色progressDialog又是其丑无比,无奈只能自己自定义了,在网上查看别人的例子,并自己整理了一份Demo:先上图:MyProgressDialog:packagecom.example.myprogressdialog_zzw;importandroid.app.Dialog;importandroid.content….

    2022年7月14日
    21
  • pycharm最新激活码汇总,亲测可用,定期更新(最新序列号破解)[通俗易懂]

    pycharm最新激活码汇总,亲测可用,定期更新(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    54
  • [MFC]同步对象——CCriticalSection临界区,CSemaphore信号量

    [MFC]同步对象——CCriticalSection临界区,CSemaphore信号量实例——CCriticalSection临界区临界区是保证在某一个时间只有一个线程可以访问数据的方法。使用它的过程中,需要给每个线程提供一个共享的临界区对象,无论哪个线程占有临界区对象,都可以访问受到保护的数据,这时候其他的线程需要等待,直至该线程释放临界区对象为止,临界区被释放后,另外的线程可以强占这个临界区,以便访问共享的数据。临界区对应的一个CCriticalSection对象,

    2022年7月20日
    16

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号