中级会员
- 积分
- 262
- 金钱
- 262
- 注册时间
- 2017-2-8
- 在线时间
- 35 小时
|
5金钱
标题有点绕额,情况是这样子的。用的STM32串口空闲中断的方式通过DMA连ESP8266,之前一直用都比较正常,就是最近在做Wifi更新程序的时候用TCP透传发BIN文件(测试用文件9k)过来,发现有时候接收的数据丢包了。
于是自己找原因,调波特率,发现波特率9600的时候就不会有问题,波特率115200多发几次就可以成功,但波特率到了256000就怎么都成功不了了。
检查数据收不全的时候接收到的数据长度,是1460,正好是一个TCP包的长度。
于是我猜测,由于BIN文件太大,拆分了多个TCP包,而网络原因,第一个包发完后第二个包还没有到,DMA已经完成了8266到32之间的数据传输进入了空闲中断,于是后面的包就没了。波特率低的时候传得慢,网络中第二个包来了这边还没空闲因此不会有问题。
百度说加上硬件流控能解决,但我对此不太了解,感觉不是这个原因。而且串口硬件流控没理解错是要多接两个口,目前硬件上暂时测试不了。
因此请教大神,问题是否如我的猜测,是否有解决办法?不调低波特率情况下,一次把整个文件收完再进入中断。
|
|