STM32/STM8技术论坛
直播中

刘艳芳

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

STM32F407-LwIP_TCP_Echo_Server移植累积多个数据包

我是参考LwIP_TCP_Echo_Server这个例子,用的STM32F407移植的,网络连接正常,通信都通了,但是最近严格测试的时候发现个奇怪的问题。
测试环境:1。电脑端打开网络助手,用tcp_client模式连接板子(tcp_server),并成功建立连接
2。用网络助手向板子(tcp_server)发送数据


出现问题现象如下:当我手动发送数据或自动发送间隔大于250ms时,板子(tcp_server)端接收数据正常,但当我自动发送间隔小于100ms时,板子(tcp_server)端接收一包数据,我解析出来会是我发送的两包或三包。问题例子如下,当我电脑端发送“01 03 00 20 00 08 45 C6”这包数据时,出现问题时板子会接收到“01 03 00 20 00 08 45 C6 01 03 00 20 00 08 45 C6 01 03 00 20 00 08 45 C6”这样一组数据,正好是我发送数据的整包数,这样我的应用程序就没法解析啦,整了两天了也没弄出来,望高手指点下。


我对问题的分析:因为例子中,对以太网包用的是轮询模式,所以我怀疑是轮询模式慢,当我发送数据包间隔小于100ms时,以太网DMA的收数据快于我处理接收数据的速度,所以会累积多个数据包,导致上述现象的发生,但没找到解决办法。

回帖(10)

刘艳芳

2019-4-30 14:23:58
不知我的问题说明白了没?有看了的跟我说下,不行,我再补充说明
举报

何珊

2019-4-30 14:37:11
如果不改变轮询的方式,可以在包的数据里头增加格式定义,例如帧头帧尾、每帧的字节数、异或校验等等,这就相当于你们自定义一个简单的协议。

如果没法定义数据格式,那可以试试中断的方式,那就是 MCU 端的事情,还是得写不少的代码,以及对这款 MCU 网络部分各个寄存器的理解,或许还可以加上 PHY 层 IC 的寄存器。

我记得 PHY 层 IC 也是可以设置中断输出的,但不知道能不能在收到一个包之后就输出一个 IO 信号。如果可以的话,那 MCU 就需要有一个 IO 口与之配合。

总之,为了整个系统稳定运行,工作量都不会小。
举报

刘艳芳

2019-4-30 14:45:43
引用: ji5687 发表于 2019-4-30 19:27
如果不改变轮询的方式,可以在包的数据里头增加格式定义,例如帧头帧尾、每帧的字节数、异或校验等等,这就相当于你们自定义一个简单的协议。

如果没法定义数据格式,那可以试试中断的方式,那就是 MCU 端的事情,还是得写不少的代码,以及对这款 MCU 网络部分各个寄存器的理解,或许还可以加上 PHY 层 IC 的寄存器。

首先感谢您的热心答复。对于您说的在数据里增加协议字段,这个不太适合我这个项目。要是采用中断方式,DMA收到一包数据触发中断,但STM32F4的demo程序里都是轮询的,没有中断的例子,在网上查了下也没找到。不知您那有这方面资料,最好是例程。PHY层IC这个倒没怎么注意过,回头看看手册。
举报

刘艳芳

2019-4-30 14:56:13
    问题解决了,发现不是我程序的问题,是网络助手的问题,网络助手要是发送数据间隔小于100ms,会把两包或更多数据一起打包发送出去,用wireshark抓包抓到的,希望大家以后也注意这个问题啊
举报

郑聪

2019-4-30 15:02:54
引用: 秦翙栀610 发表于 2019-4-30 19:46
    问题解决了,发现不是我程序的问题,是网络助手的问题,网络助手要是发送数据间隔小于100ms,会把两包或更多数据一起打包发送出去,用wireshark抓包抓到的,希望大家以后也注意这个问题啊

谢谢楼主提醒
举报

陈小红

2019-4-30 15:18:00
好问题,谢谢楼主的分享。
我在使用过程中,发现407的tcp,总是出现中断的现象,不知为何?
不知道楼主使用网络的过程中,有没有ping包掉包的情形?
谢谢。
举报

陈平

2019-4-30 15:31:04
楼主您好!我在st官网找了好久它的例程,一直没有找到,请问在官网的哪里啊?
举报

李天氍

2019-4-30 15:41:31
举报

石玉兰

2019-4-30 15:59:05
楼主你好,我也遇到同样问题,我从客户端每次发送512字节,自定义了包头。但是板子接收到的大小不等,用wareshark抓包发现包大小由1460的,78长度的等等,不是512整数倍。wareshark抓到的长度就是arm收到的包长度,这样等于好几包拼成一个,或者半个包之类的,导致接收端无法解析。
举报

小李

2019-5-9 17:10:11
楼主,我也在做那个通讯,请问哪里可以找到可以实现通讯那个的代码?可以回答一下吗?谢谢
举报

更多回帖

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