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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jenkins allure_jenkins api 文档

    jenkins allure_jenkins api 文档前言jenkins集成了allure插件,安装插件后运行pytest+allure的脚本即可在jenkins上查看allure报告了。allure安装在运行代码的服务器本机,我这里是用的dock

    2022年7月28日
  • Git2.21下载安装及使用教程

    Git2.21下载安装及使用教程Git2.21下载安装及使用教程Git下载安装教程下载Git下载地址:https://git-scm.com/downloads安装步骤1.选择组件,全部勾选,点击next2.选择git使用的默认编辑器3.选择git使用的默认编辑器UseGitfromGitBashonly(安全)只在GitBash中使用Git命令行工具Gitfromthecomm…

    2022年5月13日
  • 小白菜飘过计算机三级数据库[通俗易懂]

    小白菜飘过计算机三级数据库[通俗易懂]害,是真的没学啥没东西写了买书呜呜47大题归纳填空题46大题好久没更新了,害,把之前的三级数据库笔记录下来吧(强行刷存在感)计算机三级数据库也及格分佛佛的过了,虽然没学过但是机械刷题找规律还是勉强混过去了之前和朋友一起考感觉三级数据库的资料好少我还想说好好总结一波,刚考完还是很新鲜的但是不晓得能不能过…就没记录最新鲜的想法…等到出成绩我也忘得干干净净了…最近超级能逼逼叨,没想到写个CSDN…

    2022年6月18日
  • redis mysql_redis和mysql的结合示例[通俗易懂]

    redis mysql_redis和mysql的结合示例[通俗易懂]mysql和redis的区别mysql是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢。redis是非关系型数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限django中使用mysql的方法通过继承models.Model来生成数据库表,详情见Django模型的使用。django中使用redis的方法首先安装python库pip3i…

    2022年6月19日
  • 全排列递归算法_全排列递归算法

    全排列递归算法_全排列递归算法一.全排列算法首先:什么是全排列=》百度一下从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。公式:全排列

    2022年8月1日
  • phpstorm运行thinkphp_零基础入门编程教程

    phpstorm运行thinkphp_零基础入门编程教程PHPStorm是流行对PHP及前端开发IDE,在开发者初次使用写PHP代码时该怎么用呢~1、CreateNewProject2、选择PHPEmptyProject,并新建一个空目录(目录不要放在C盘!!!)3、项目工程中,中刚刚创建对文件夹图标上,点击右键,选择PHPFile,输入文件名,即可创建4、输入完成php代码,点击空白处,右上角会出现chrome、firefox等浏览器的图…

    2022年10月2日

发表回复

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

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