Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
LWIP
lwip在stm32h743-nucleo上终于运行起来了,有笔记和源码。
发布于 2019-02-07 22:10:23 浏览:8174
订阅该版
[tocm] 前些天在论坛里发帖询问stm32h743-nucleo上的lwip移植情况并顺便求一个可以用的驱动,结果一直都没有。 询问为什么在rtthtead中,网终驱动层要使用tx和rx线程,也没人给出满意的答案。 开源的项目,难免要多折腾,所以决定自己动手实验,刚好春节假期有时间折腾。干脆自己移植一个可用的吧,不过真正动起手来还是很困难,以前也从来没做过lwip驱动这一块,所以在当时是完全不知从何下手。 ## 第一步 先拿ST官方给的示例来跑跑看,使用STM32Cube_FW_H7_V1.3.0中带的LwIP_HTTP_Server_Netconn_RTOS这个示例,下载到开发板后可以在局域网电脑的浏览器上打开测试网页,但是ping开发板的IP却没有反应,到网上搜搜别人在H7或者是F7上的LWIP移植经验,发现有大神提到说要在函数HAL_ETH_Transmit()前加上SCB_CleanInvalidateDCache()这一句,测试之后果然可以ping了,有这一步总算有点信心继续下去了。 ## 第二步 自建一个sth32h743的工程,成功运行起来之后,再把rt-thread的代码加到工程中,将rt-thread和finsh全部调试正常。ST主推cubemx,rt-thread主推env,感觉图行配置是主流啊,可惜我都不喜欢用,就是喜欢自己手动建工程。 ## 第三步 lwip代码虽然很多,可在网上搜了一下lwip移植笔记发现需要我们自己处理部分却不太多,只要移值修改ethernetif.c和sys_arch.c就可以了,这部分代码的框架都是做好了的,而我将要做做的感觉更少,因为在LwIP_HTTP_Server_Netconn_RTOS这个示例已经全都做好了,我只要把它们搬过来再对应着修改就可以了。修改可以编译通过之后,下载运行看效果如何。一运行就直接hardfault了,对照着检查修改过的地方,找了两天也没找到,不过在昨天清晨突然发现,`LwIP_HTTP_Server_Netconn_RTOS`示例中的代码在创建线程时是传入了指针参数的,而我习惯性在在建线程是把参数置为RT_NULL,重大发现了这个白痴错误之后,再修改之后,可以运行了并且成功DHCP,也可以ping开发板了。小兴奋了一下! ## 第四步 加入netio测测速度怎么样,唉!惨不忍睹,tx只有30k左右并且很稳定地保持这个速度,rx最好也才1.5M,再上网搜索解决方法,按照大神们说的改lwipopt.h中的配置,修改MEM_SIZE,TCP_SND_BUF,TCP_WND等参数,收效不佳,网速提升不大,这是为什么? 改来改去改了半天,后来看到list_thread()的各个线程,想了想应该是先收到数据之再由lwip处理,所以应该把ethernetif.c中的eth_rx线程提高,也应该高于lwip中的tcpip线程,当时移植的时候没想这个问题,线程优先级都是随便填的,把eth_rx线程设置的非常的低。这次把eth_rx线程设置最高,其次是tcpip线程,再把dhcp和eth_link线程设置为最低。这样修改之后,效果立即显现。再次调整lwipopt.h中的配置参数,测得网速如下: ![无标题.png](/uploads/201902/07/214155p6e0mk6xkvgxmvm8.png) 测试中,Tx的速度不错,不过怎么改参数Rx变化都不大,我已经没什么办法了。不过这个可能就是rt-thread中要在驱动层实现tx和rx线程的原因吧,我这个程序只实现了rx线程,没有做tx线程,所以测试结果是上面这样子。另外,看了很多LWIP测速的例子,在1k和2k的数据包下,Rx都很差劲,这个是为什么呢?哪位内行请讲一下吧。 除了没有实现tx线程,也没有实现device驱动模型,也没有实现lwip相关的finsh命令,更没有env配置相关功能。 lwip版本与STM32Cube_FW_H7_V1.3.0中使用的一致,是2.0.3版。 最后附上工程源码: - [rtthread_stm32f743.rar](/uploads/201902/07/215452jbqhokqq1fd8b488.rar) 程序已包涵所有的源码和头文件,解压缩之后放在任意位置都可以打开。 使用512k AXI RAM作为IROM,128k DTCM RAM作为IRAM,SRAM1和SRAM2共256k作为HEAP区。 在RAM中调试的配置文件也在工程中,编译之后即可下载调试。 stm32h7系列的海量内存调试起来真是爽歪歪! 以前觉得lwip好复杂,自己是搞不定的,经过这个之后,还是感觉lwip好复杂,因为我只是干了搬运工的工作,把STM32Cube_FW_H7_V1.3.0中的代码搬到自己的工程,再rt-threa中已经做好的sys_arch.c中的函数再复制到自己的工程,感觉还是什么都没懂。 从网上学习、收集资料构建了这个勉强可用的工程,奉献给需要的人。
查看更多
9
个回答
默认排序
按发布时间排序
armink
2019-02-08
这家伙很懒,什么也没写!
RT-Thread 的网络协议栈应用笔记有没有看呢? [https://www.rt-thread.org/document/site/application-note/components/network/an0010-lwip-driver-porting/](https://www.rt-thread.org/document/site/application-note/components/network/an0010-lwip-driver-porting/)
jinggx
2019-02-08
这家伙很懒,什么也没写!
>RT-Thread 的网络协议栈应用笔记有没有看呢? > >https://www.rt-thread.org/document/site/application-note ... --- 看过了,不过移植到这种程度感觉自己现在还做不到。 lwip的数据怎么发送的,内存管理pbuf那些,还有eth的dma都没有搞明白。所以现在还搞不定啊!
armink
2019-02-08
这家伙很懒,什么也没写!
>看过了,不过移植到这种程度感觉自己现在还做不到。 >lwip的数据怎么发送的,内存管理pbuf那些,还有eth的 ... --- - lwip的数据怎么发送的 这个在 AN 里面有序列图可以参考 - 内存管理pbuf 这里只要会用就好,AN 里也有示例 - eth的dma 这些各个 MCU 差异很多,但网上资料非常多,尤其原子、野火都有专门的手册
jinggx
2019-02-09
这家伙很懒,什么也没写!
仔细看了三四遍,感觉短时间内还是搞不定。
戎传林
2019-02-15
这家伙很懒,什么也没写!
楼主,我的为什么ping不通呀,有什么注意事项吗
nongxiaoming
2019-02-18
rt-thread大师兄
RX要变大的话请修改底层驱动里面DMA的接收buffer个数,加到9或者10去,速度就上来了。
jinggx
2019-02-18
这家伙很懒,什么也没写!
>RX要变大的话请修改底层驱动里面DMA的接收buffer个数,加到9或者10去,速度就上来了。 ... --- netio上显的RX不是对应stm32H743端的TX吗?不是这样吗?
nongxiaoming
2019-02-18
rt-thread大师兄
>netio上显的RX不是对应stm32H743端的TX吗?不是这样吗? --- 好像不是,反正我在407的BSP上也是这个问题,然后把以太网驱动里面的dmabuffer数加大就上去了,具体是RX是DMA个数加大,TX的2个或者4个,8个都差不多,但RX的对这个影响比较大。
小溪叮咚
2024-03-13
这家伙很懒,什么也没写!
您好,源码可以分享吗?
撰写答案
登录
注册新账号
关注者
1
被浏览
8.2k
关于作者
jinggx
这家伙很懒,什么也没写!
提问
5
回答
19
被采纳
0
关注TA
发私信
相关问题
1
RT-THREAD在STM32H747平台上移植lwip
2
{lwip}使能RT_LWIP_DHCP时可以获取到ip
3
stm32f103 LWIP 2.0.2 TCP收发问题
4
lwip2.1不重启修改IP
5
关于网络协议栈的测试
6
可否将LWIP升级到2.1.2 和 2.0.3?
7
socket(AF_INET, SOCK_RAW, IPPROTO_UDP);
8
tcpclient 插拔网线问题?
9
两个tcpclient同时通讯可以吗?
10
SO_BINDTODEVICE 未定义该如何解决
推荐文章
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
RT-Thread EtherKit开源以太网硬件正式发布
2
如何在master上的BSP中添加配置yml文件
3
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
4
RT-Thread 发布 EtherKit开源以太网硬件!
5
rt-thread使用cherryusb实现虚拟串口
热门标签
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
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
14
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
RTT_逍遥
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部