Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
网络学习营
【LwIP第一周】【STM32F767】基于正点原子F767的LwIP移植
发布于 2018-05-30 16:52:39 浏览:4953
订阅该版
写在前面:感谢RTT官方提供这么好的一次学习机会,由于个人原因现在才发第一周的帖子,感谢陈总的耐心督促。这么久了,被人督促这种熟悉又陌生的感觉真好,就好像回到了学生时代老师的耳提面命,说真的,出来混社会这么久了,这种纯真的感觉,真好,想想那都是青春。 下面进入正题,在LwIP移植的时候,一开始遇到很多坑,在大家的帮助下(特别感谢:黄侃老师,于fangxi老师),都调通了,现在回头看看,总结了一些体会,和大家分享一下: 1. 对RTT的体系结构不熟悉,特别是设备驱动层这块,如果不理解,很可能会出现如下情况: ![1.png](/uploads/201805/30/113449fvssb3kb8b77k729.png) 这是没有添加I2C底层驱动的原因。当时的情况是这样的,我在menuconfig配置环境中,Device Drivers子条目下,打开了I2C的驱动,如下图所示: ![2.png](/uploads/201805/30/114623z62m0lt8knz7xx0z.png) 我单纯的以为这样就行了,还天真的想着RTT真贴心,啥都做好了,唉!Too young too simple! 这个只是做好了I2C设备(总线)的抽象层(BUS层),供应用层调用,跟linux的设备驱动体系类似,这样做的好处在于能统一设备,管你是什么设备,万千接口,你在我这里就是一个总线接口,从而简化应用层的逻辑处理。如下图所示: ![3.png](/uploads/201805/30/115321ql1pku88xup1lbp5.png) 之前做了很多linux驱动开发,也了解到RTT是类linux的一种RTOS,也怪自己太直,忘记这点了,一直在这个错误上面纠结,钻牛角尖了,最后看了一篇文档才恍然大悟。文档在下面的附件,希望能对各位有所启发。 解决办法就是:在bsp->drivers目录下,加上stm32f7板级的设备驱动,相当于把上面提到的I2C抽象层所提供的接口一 一实例化。这样的话,应用层就能和底层I2C通过抽象层达成一一映射对应的关系。 2. 犯了形而上学的错误。出现上述错误后,当然要去问群里的大神、老师了。当时,黄老师说让我用pin设备类的驱动,改了一定的代码,我照做了,也没看原理图,想着老师说的都是对的,结果我错了。事实上,作为工程师,必须要谨慎细致,要去看原理图,理解原理。唉,急功近利,形而上学,片面的看待问题理解问题。 黄老师,反复提到一个pin,117. 比如rt_pin_write(117,1); 这是F407独有的ETH_RESET引脚,我想着都是原子家的娃,这点还用细分吗?767必须也是呀! 汗!不说这点了,羞愧! 事实上,767不能用pin设备复位PCF8574的,必须用I2C设备进行驱动,原因就是硬件决定的! 马爷爷,毛爷爷的辩证法,矛盾论教导我们,切莫教条主义,静止孤立片面的看待问题,这次感同身受。 上面算是一些经验和教训总结,下面上硬菜,承蒙于fangxi老师的期待,这次您看我做的767的BSP是否和您口味。 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/h drv_i2c.c/h drv_pcf8574.c/h 这6个文件拷贝到stm32f767-apollo相应目录下。(cao! 步骤1中与此步骤有逻辑冲突,各位原谅我) 3. 现在开始修改各种配置吧,先用ENV工具menuconfig以下,注意看此时的配置图 ![4.png](/uploads/201805/30/155939r4gg1g8z8b81zxby.png) 下面我们就装逼到底,让这个配置图变为STM32F767IGTx的专属。进入顶层目录(进入stm32f767-apollo文件夹内,以下均称“顶层目录”),打开Kconfig顶层kernel-config文件。 加上如下代码 ![5.png](/uploads/201805/30/160713iszeflftfefcf5ft.png) 保存退出,我们再menuconfig一下看下效果。 ![6.png](/uploads/201805/30/160938r1adl0j0z0blljwh.png) 吊不吊先不说了,就说装逼足够了吧,哈哈! 4. 虽然很好看,但是步骤3目前来说还是没有什么卵用,万里长征才刚刚开始。在顶层目录下,打开template.uvprojx文件(没错,您要是不瞎搞,这个文件目测应该在最下面),用keil打开之后,修改为对应的STM32F767IGx芯片,如下图所示。这样,再用命令生成工程时,默认的就是767IGT,不用每次都重新修改了。 ![7.png](/uploads/201805/30/161640dgeuqj4kh43ugs7r.png) 5. 进入Libraries子目录,打开SConscript文件,做如下修改: ![8.png](/uploads/201805/30/161951blatyouolt4o4ott.png) 这样的话,生产工程时,会自动加载767的启动文件,并且在keil的C/C++预定义框中会自动定义STM32F767xx 如下图所示: ![9.png](/uploads/201805/30/162223cl0hrppz88lwu0gy.png) 6. 进入drivers子目录下,打开SConscript文件,这里说一下,3.0.3内的SConscript文件可以直接把该文件夹下所有源码加入工程,而这个最新的得自己加进去。修改如下: ![10.png](/uploads/201805/30/162546og6boz6hxglx2zhw.png) 把之前加入的文件名字添加进去。 别急,还有一步,打开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地址。如图所示: ![11.png](/uploads/201805/30/163856if3erc0eo3ci0oeo.png) 9. 到RT-Thread online packages子条目下,选择IOT - internet if things 子条目下,打开ping工具,如下图所示: ![12.png](/uploads/201805/30/164142k92kdod6u1j1prqw.png) 10. 至此,所有配置完成,保存退出menuconfig,此时ENV开始自动下载ping工具包,使用pkgs --update更新包,完成后,使用 scons --target=mdk5 -s 命令生成工程。至此移植完成 11. 打开工程,直接编译,下载进开发板,打开串口助手,看好戏吧。对了,在开发板ping电脑的时候,要关闭电脑防火墙,不然ping不同。下图是成功现象: ![13.png](/uploads/201805/30/164847x8tqq88dfco4fjkc.png) ![14.png](/uploads/201805/30/164852kttttu3x1c311mx1.png) 写在最后,这个帖子断断续续写了一天,很累,但是分享很开心。衷心希望大家多多斧正! DaZhou 2018年5月30日 下载附件 [1_5549641.pdf](https://oss-club.rt-thread.org/uploads/201805/30/115619fzfnj7ffysdfnfdf.attach)
查看更多
2
个回答
默认排序
按发布时间排序
iccoder
2019-07-12
这家伙很懒,什么也没写!
朋友 现在rt-thread 版本v4.0.0+了 LWIP有方式移植吗?官方教程没有更新,有点手足无措
DaZhou
2019-07-12
这家伙很懒,什么也没写!
我看下,最近找个时间再出一份
撰写答案
登录
注册新账号
关注者
1
被浏览
5k
关于作者
DaZhou
这家伙很懒,什么也没写!
提问
10
回答
49
被采纳
0
关注TA
发私信
相关问题
1
【LWIP学习营】第一关开发环境搭建
2
LWIP学习营第一周入门移植问题汇总贴
3
【LWIP学习营】f407+lan8720A小结
4
【LwIP学习营】【第一周】仅零散记录,无主题
5
【LWIP学习营】正点原子探索者F407+LAN8720第一周小结
6
【LwIP学习营】【第一周】网络通信基础及实现TCP 聊天客户端
7
【LwIP学习营】【第一周】LWIP移植
8
【LwIP学习营】【第一周】LWIP移植
9
【LwIP学习营】【第一周】开发板适配
10
【LwIP学习营】【第一周】环境搭建和配置验证
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用RC522软件包驱动FM1722
2
常量数据类型和表达式陷阱分享
3
进行i2c驱动移植的经验总结
4
在VSCode中使用clang-format
5
我该如何使用这个微雪的WIFI400 WIFI-LPB-100在rtt里或者我该怎样为它开发驱动
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
289
次被采纳
张世争
809
个答案
175
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部