我是参考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的收数据快于我处理接收数据的速度,所以会累积多个数据包,导致上述现象的发生,但没找到解决办法。 |
STM32F407 定时器触发DMA 求助大神
【MCU实战经验】基于STM32F407的音频播放器设计
盘古UE-STM32F407工控板原理图
【STM32F429心得\疑问】+STM32F4之FSMC和FMC
STM32F429读取IO口传输的数据速率
STM32F407ZGT6 手摸芯片背部重启
STM32F4 SPI 动作时,软件片选信号被拉高,IO口程序逻辑失控
STM32F401RE NUCLEO求助,串口一直不能进中断
读取STM32F407内部温度传感器值错误
STM32F429多路内部ADC独立采集的办法
如果没法定义数据格式,那可以试试中断的方式,那就是 MCU 端的事情,还是得写不少的代码,以及对这款 MCU 网络部分各个寄存器的理解,或许还可以加上 PHY 层 IC 的寄存器。
我记得 PHY 层 IC 也是可以设置中断输出的,但不知道能不能在收到一个包之后就输出一个 IO 信号。如果可以的话,那 MCU 就需要有一个 IO 口与之配合。
总之,为了整个系统稳定运行,工作量都不会小。
首先感谢您的热心答复。对于您说的在数据里增加协议字段,这个不太适合我这个项目。要是采用中断方式,DMA收到一包数据触发中断,但STM32F4的demo程序里都是轮询的,没有中断的例子,在网上查了下也没找到。不知您那有这方面资料,最好是例程。PHY层IC这个倒没怎么注意过,回头看看手册。
谢谢楼主提醒
我在使用过程中,发现407的tcp,总是出现中断的现象,不知为何?
不知道楼主使用网络的过程中,有没有ping包掉包的情形?
谢谢。