0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

总结一些在LwIP移植的时候体会

lPCU_elecfans 来源:未知 作者:李倩 2018-06-08 09:33 次阅读

在LwIP移植的时候,一开始遇到很多坑,在大家的帮助下都调通了,现在回头看看,总结了一些体会,和大家分享一下:

1. 对RT-Thread的体系结构不熟悉,特别是设备驱动层这块,如果不理解,很可能会出现如下情况:

这是没有添加I2C底层驱动的原因。当时的情况是这样的,我在menuconfig配置环境中,Device Drivers子条目下,打开了I2C的驱动,如下图所示:

我单纯的以为这样就行了,还天真的想着RT-THread真贴心,啥都做好了,唉!Too young too simple! 这个只是做好了I2C设备(总线)的抽象层(BUS层),供应用层调用,跟linux的设备驱动体系类似,这样做的好处在于能统一设备,管你是什么设备,万千接口,你在我这里就是一个总线接口,从而简化应用层的逻辑处理。如下图所示:

之前做了很多linux驱动开发,也了解到RT-Thread是类linux的一种RTOS,也怪自己太直,忘记这点了,一直在这个错误上面纠结,钻牛角尖了,最后看了一篇文档才恍然大悟。解决办法就是:在bsp->drivers目录下,加上stm32f7板级的设备驱动,相当于把上面提到的I2C抽象层所提供的接口一 一实例化。这样的话,应用层就能和底层I2C通过抽象层达成一一映射对应的关系。2. 犯了形而上学的错误。出现上述错误后,当然要去问群里的大神、老师了。当时,黄老师说让我用pin设备类的驱动,改了一定的代码,我照做了,也没看原理图,想着老师说的都是对的,结果我错了。事实上,作为工程师,必须要谨慎细致,要去看原理图,理解原理。唉,急功近利,形而上学,片面的看待问题理解问题。

黄老师,反复提到一个pin,117. 比如rt_pin_write(117,1); 这是F407独有的ETH_RESET引脚,我想着都是原子家的娃,这点还用细分吗?767必须也是呀! 汗!不说这点了,羞愧!

事实上,767不能用pin设备复位PCF8574的,必须用I2C设备进行驱动,原因就是硬件决定的!

马爷爷,毛爷爷的辩证法,矛盾论教导我们,切莫教条主义,静止孤立片面的看待问题,这次感同身受。

上面算是一些经验和教训总结,下面上硬菜。

1. 下载rt-thread-3.0.3源码,解压之,删除bsp文件夹内所有子文件夹(干净,看着舒服,不做亦可),到GitHub上面下载stm32f7-disco最新的板级支持包。3.0.3内的F7包非常老,没有767的芯片支持,同时,驱动特性支持的也不好,总之,如果用767的话,这步虽然非必需,但是对后续的移植却非常有益。然后,把这个文件夹命名为stm32f767-apollo(非必需,装逼要紧)

2.将bsp内stm32f429-apollo文件内drivers目录下的drv_eth.c/hdrv_i2c.c/h drv_pcf8574.c/h 这6个文件拷贝到stm32f767-apollo相应目录下。(cao! 步骤1中与此步骤有逻辑冲突,各位原谅我)3.现在开始修改各种配置吧,先用ENV工具menuconfig以下,注意看此时的配置图

下面我们就装逼到底,让这个配置图变为STM32F767IGTx的专属。进入顶层目录(进入stm32f767-apollo文件夹内,以下均称“顶层目录”),打开Kconfig顶层kernel-config文件。 加上如下代码

保存退出,我们再menuconfig一下看下效果。

吊不吊先不说了,就说装逼足够了吧,哈哈! 4.虽然很好看,但是步骤3目前来说还是没有什么卵用,万里长征才刚刚开始。在顶层目录下,打开template.uvprojx文件(没错,您要是不瞎搞,这个文件目测应该在最下面),用keil打开之后,修改为对应的STM32F767IGx芯片,如下图所示。这样,再用命令生成工程时,默认的就是767IGT,不用每次都重新修改了。

5.进入Libraries子目录,打开SConscript文件,做如下修改:

这样的话,生产工程时,会自动加载767的启动文件,并且在keil的C/C++预定义框中会自动定义STM32F767xx如下图所示:

6.进入drivers子目录下,打开SConscript文件,这里说一下,3.0.3内的SConscript文件可以直接把该文件夹下所有源码加入工程,而这个最新的得自己加进去。修改如下:

把之前加入的文件名字添加进去。别急,还有一步,打开drv_iic.h文件, 把包含的头文件修改一下,你自己一看就懂了(算了,写一下 #include "stm32f7xx_hal.h")7.看到这里,我可以负责任的告诉你,BSP已经准备好了!!!我们开始LwIP的移植吧,这一步骤先高兴下,喝杯茶,45°角仰望天空,像某位梳着大背头的伟人一样,吐口烟圈。8.到顶层目录,打开ENV工具,menuconfig 关掉Using SDRAM,然后进入RT-Thread Components子条目,在Device Drivers目录下,打开I2C驱动;

回到上层,如果设备虚拟文件系统打开了的话,关掉吧,用不上的。进入Network stack子条目,再进入LWIP子条目,选择LWIP的版本为2.0.2如果有路由器,现在就可以了,如果没有,需要配置静态IPv4地址。如图所示:

9.到RT-Thread online packages子条目下,选择IOT - internet if things 子条目下,打开ping工具,如下图所示:

10.至此,所有配置完成,保存退出menuconfig,此时ENV开始自动下载ping工具包,使用pkgs --update更新包,完成后,使用 scons --target=mdk5 -s 命令生成工程。至此移植完成11.打开工程,直接编译,下载进开发板,打开串口助手,看好戏吧。对了,在开发板ping电脑的时候,要关闭电脑防火墙,不然ping不同。下图是成功现象:

写在最后,这个帖子断断续续写了一天,很累,但是分享很开心。衷心希望大家多多斧正!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11225

    浏览量

    208910
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1481

    浏览量

    123278
  • LwIP
    +关注

    关注

    2

    文章

    85

    浏览量

    27087

原文标题:【周四RTOS专栏】基于正点原子F767的RT-Thread LwIP移植

文章出处:【微信号:elecfans,微信公众号:电子发烧友网】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    一些常见的动态电路

    无论是模电还是数电,理论知识相对来说还是比较枯燥,各种电路原理理解清楚不算容易,换种生动形象的方式或许会增加一些趣味性,也更容易理解这些知识。下面整理了一些常见的电路,以动态图形的方式展示。 整流
    的头像 发表于 11-16 09:26 191次阅读
    <b class='flag-5'>一些</b>常见的动态电路

    分享一些常见的电路

    理解模电和数电的电路原理对于初学者来说可能比较困难,但通过一些生动的教学方法和资源,可以有效地提高学习兴趣和理解能力。 下面整理了一些常见的电路,以动态图形的方式展示。 整流电路 单相桥式整流
    的头像 发表于 11-13 09:28 193次阅读
    分享<b class='flag-5'>一些</b>常见的电路

    LED驱动器应用的一些指南和技巧

    电子发烧友网站提供《LED驱动器应用的一些指南和技巧.pdf》资料免费下载
    发表于 09-25 11:35 0次下载
    LED驱动器应用的<b class='flag-5'>一些</b>指南和技巧

    基于机智云移植STM32L496G代码移植

    代码详解-机智云(gizwits.com)移植的过程中遇到的一些问题,这里我将重构下,大致内容跟文档差不多,但是根据文档的操作,会产生一些
    的头像 发表于 09-20 08:05 309次阅读
    基于机智云<b class='flag-5'>移植</b>STM32L496G代码<b class='flag-5'>移植</b>

    STM32+LWIP通信12次后无法再次通信怎么解决?

    各位大佬,小弟尝试移植LWIP+FREERTOS的时候出现了如下问题,请各位大佬帮忙看看是哪里的问题,我用了FreeRTOS+LWIP做M
    发表于 07-24 07:25

    二进制处理中的一些技巧

    二进制和十进制的处理中,有时候一些小技巧是很有用的。 1、把十进制数转换成二进制数 (1)MATLAB中有个函数dec2b
    的头像 发表于 07-05 11:51 510次阅读

    基于MM32F5270的Ethernet实现LwIP协议栈移植

    LwIP是轻量化的TCP/IP协议,由瑞典计算机科学院(SICS)的Adam Dunkels 开发的个小型开源的TCP/IP协议栈。LwIP具有高度可移植性、代码开源,提供了三种编程
    的头像 发表于 06-21 10:28 1091次阅读
    基于MM32F5270的Ethernet实现<b class='flag-5'>LwIP</b>协议栈<b class='flag-5'>移植</b>

    STM32F407移植LWIP协议栈总是进入硬件中断的原因?

    f407上移植LWIP协议栈 到这个地方就进入硬件中断 请问是我的指针没初始化好吗?还是其他原因?? /* entry point to the
    发表于 05-16 07:59

    移植LwIP+uCOS提示 errno没有定义怎么解决 ?

    请教下,移植 LwIP+uCOS,提示 errno 没有定义 ? 是哪里没有配置好哇 ???
    发表于 04-23 07:21

    STM32F407开发板上移植LwIP TCP,while(1)里或者接收到数据后就什么也发不出来的原因?

    STM32F407开发板上移植LwIP TCP,当我想做客户端的时候初始化阶段使用函数tcp_write()就可以发送出来数据,但是
    发表于 04-12 08:13

    STM32+LWIP通信12次无法再次通信要怎么解决?

    尝试移植LWIP+FREERTOS的时候出现了如下问题,请各位大佬帮忙看看是哪里的问题,我用了FreeRTOS+LWIP做ModbusTCP时出现了链接出现通信12次然后通信中断,并且
    发表于 04-12 07:42

    细谈SolidWorks教育版的一些基础知识

    SolidWorks教育版是款广泛应用于工程设计和教育领域的三维建模软件。它具备直观易用的操作界面和强大的设计功能,为学生提供了个学习和实践的平台。本文中,我们将详细探讨SolidWorks教育版的
    的头像 发表于 04-01 14:35 313次阅读

    如何在STM32F407上移植lwip

    如题,使用rt-thread操作系统,STM32F407上如何移植lwip,下载了最新的rt-thread代码,不知如何入手。 谁能帮帮我吗,或者有没有移植手册发我看看。
    发表于 03-05 08:32

    使用LwIP协议栈浅析实战分析(i.MX RT)

    既可以移植到操作系统上运行,也可以无操作系统的情况下独立运行。     TCP/IP协议栈的模型结构如下图所示,由于TCP/IP协议栈的出现时间较早,所以没有按照传统的7层OSI网络模型进行设计,共只
    的头像 发表于 02-02 17:05 1592次阅读
    使用<b class='flag-5'>LwIP</b>协议栈浅析实战分析(i.MX RT)

    lwip可以开几个socket

    的内存和处理器资源,以适应资源受限的嵌入式应用场景。 lwIP中,socket是种用于进行网络通信的抽象概念。它提供了种简化的编程接口,使得应用程序可以通过网络发送和接收数据。
    的头像 发表于 01-09 14:05 1945次阅读