天线|RF射频
直播中

冯栋

7年用户 283经验值
私信 关注
[问答]

STM32F407+lwip传输速度该怎么提升?

STM32F407芯片,phy是DP83848,基于Lwip协议栈的TCP服务器模式程序已经调试成功,可以发送接收数据,ping延迟也小于1ms,但就是测试发送和接收速度只有几十kbps,后来听人说要改lwip中的缓存,我也改大了,但测试后还是只有一百多kbps,求教大神,怎么改才能提升传输速度啊????

回帖(29)

h1654155275.5998

2019-9-27 03:04:31
1、尽量不要使用delay延时函数!应用程序中的延时函数对于速度的影响很大的。
2、尽量减少数据拷贝,数据拷贝也会浪费大量的时间。
3、就像别人说的,将缓存开大一点,你如果使用了ST的官方以太网库的话,有下面几个地方需要改打一点。
[C] 纯文本查看 复制代码
//STM32内部MAC发送和接收BUF个数#define ETH_RXBUFNB         10#define ETH_TXBUFNB10[C] 纯文本查看 复制代码
#define MEM_SIZE                20000 //内存堆heap大小#define MEMP_NUM_PBUF           30 //MEMP_NUM_PBUF:memp结构的pbuf数量,如果应用从ROM或者静态存储区发送大量数据时                                        //这个值应该设置大一点#define MEMP_NUM_TCP_SEG        300//MEMP_NUM_TCP_SEG:最多同时在队列中的TCP段数量#define PBUF_POOL_SIZE          30//PBUF_POOL_SIZE:pbuf内存池个数#define PBUF_POOL_BUFSIZE       512//PBUF_POOL_BUFSIZE:每个pbuf内存池大小#define TCP_MSS                 (1500 - 40)  //最大TCP分段,TCP_MSS = (MTU - IP报头大小 - TCP报头大小#define TCP_SND_BUF          (25*TCP_MSS)//TCP发送缓冲区大小(bytes).#define TCP_SND_QUEUELEN        (10* TCP_SND_BUF/TCP_MSS)//TCP_SND_QUEUELEN: TCP发送缓冲区大小(pbuf).这个值最                                                                //小为(2 * TCP_SND_BUF/TCP_MSS)#define TCP_WND                 (8*TCP_MSS)        //TCP发送窗口注意:TCP_WND是发送窗口,这个值对于LWIP的速度影响非常大。
以下是我们在STM32F407探索者开发板上的LWIP网速测试,可以给你参考一下。
平台:STM32F407+LAN8720 RMII接口
协议栈:LWIP
系统:UCOSII
测试方法:netio测试TCP速度,开发板做netio服务器。电脑端为netio客户端
下图为未经过优化的测试结果。

可以从上图中看出,发送和接收的速度基本维持在1M左右,但是按照我上面说的方法进行设置以后测试的结果如下图

    从上图可以看出这时的速度发送和接收基本快到了2M,说明效果还是很明显的,但是据我了解RTT优化到了开发板接收2.5M,发送7.5M的恐怖速度!!!
下面附上我的针对STM32F407探索者开发板的LWIP网速测试工程和netio组件,还有RTT关于netio组件的使用说明netio组件.zip (157.61 KB )
实验7_6TCPIP网络组件Lwip之netio网速测试.pdf (246.53 KB )
LWIP优化测试.zip (1.39 MB )
举报

王博

2019-9-27 03:10:21
表示暂时慢得无所谓了。
举报

王彬

2019-9-27 03:29:31
多谢大神的回复,但是这些我都改了的,结果用TCP&UDP测试工具测试,发送和接受速度还是最多125k左右啊,1M完全没有啊,太伤感了。我没上系统,裸机跑的,而且就是用的ST的官方以太网库。请教大神,还能怎么改啊?
举报

秦文汶

2019-9-27 03:47:42
你先用netio这个组件测试一下呗。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分