打印
[STM32F3]

STM32F302串口DMA接收多出部分字节

[复制链接]
1368|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cyc2009|  楼主 | 2020-3-30 17:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教各位:使用串口DMA+空闲中断,实现数据通信。
其中发现,产生ORE后(故意压力测试),清除ORE标识;
接下来可能会出现以下问题,不一定每次都复现:
1,第1次通信成功;如发送0x12,0x13,0x14;回复:0x12,0x34,0x56,0x78,0x9a;
2,第2次通信失败;断点调试,发现第二次通信接收到的字符不正确,在发送的数据前,多了几个0x00;
3,第3次通信,及以后通信都成功

其中第2次通信中,多的0x00个数,是第一次通信回复的字节数;
如果第1次通信回复了5个字节,那接收就多了5个0x00;如果回复的是10个字节,接收就多10个0x00;

请问产生的原因是什么?如何处理能正确接收?
谢谢~烦请指教!

使用特权

评论回复
沙发
yklstudent| | 2020-3-30 19:01 | 只看该作者
你是怎么产生ORE的?

使用特权

评论回复
板凳
cyc2009|  楼主 | 2020-3-30 19:03 | 只看该作者
yklstudent 发表于 2020-3-30 19:01
你是怎么产生ORE的?

DMA接收长度256个字节;我一次性发送400个字节;对DMA接收完成,空闲中断,Error回调都有清除ORE flag。

使用特权

评论回复
地板
yklstudent| | 2020-3-30 20:49 | 只看该作者
cyc2009 发表于 2020-3-30 19:03
DMA接收长度256个字节;我一次性发送400个字节;对DMA接收完成,空闲中断,Error回调都有清除ORE flag。 ...

你每次都发送400字节?

使用特权

评论回复
5
cyc2009|  楼主 | 2020-3-30 21:11 | 只看该作者
yklstudent 发表于 2020-3-30 20:49
你每次都发送400字节?

是的,串口工具,每次400个字节,设置间隔1ms,循环发;停下来后,发正常的设备指令,就出现描述的那种情况。

使用特权

评论回复
6
yklstudent| | 2020-3-31 08:32 | 只看该作者
1ms间隔发送400字节,你这串口速度是有多快,你的测试条件也够变态的

使用特权

评论回复
7
香水城| | 2020-3-31 10:15 | 只看该作者
情形描述得还是不太清晰。UART收发都是DMA吗?感觉又不像.

还有,你产生ORE后对它做了清除,对相应DMA通道有重置吗?

使用特权

评论回复
8
cyc2009|  楼主 | 2020-3-31 16:19 | 只看该作者
香水城 发表于 2020-3-31 10:15
情形描述得还是不太清晰。UART收发都是DMA吗?感觉又不像.

还有,你产生ORE后对它做了清除,对相应DMA通道 ...

您好,UART接收是DMA,发送不是。
产生ORE后有清除flag,代码在Idle中断和接收完成(达到DMA接收长度)中断中,有HAL_UART_DMAStop和HAL_UART_Receive_DMA,DMA通道重置是指?在什么地方添加?谢谢!

使用特权

评论回复
9
香水城| | 2020-3-31 17:40 | 只看该作者
cyc2009 发表于 2020-3-31 16:19
您好,UART接收是DMA,发送不是。
产生ORE后有清除flag,代码在Idle中断和接收完成(达到DMA接收长度)中断 ...

嗯,有所了解。
我说的重置就是指对相依的DMA通道重新初始化,即你这里说的HAL_UART_Receive_DMA()。

你清除ORE然后重置DMA通道,后续不该有啥问题。 但是,你ORE发生的时机时随机的,上次数据到底传到哪里了你是怎么处理的? 另外,你的数据发送是靠什么触发的?好好理理程序逻辑。

使用特权

评论回复
10
cyc2009|  楼主 | 2020-4-1 20:05 | 只看该作者
香水城 发表于 2020-3-31 17:40
嗯,有所了解。
我说的重置就是指对相依的DMA通道重新初始化,即你这里说的HAL_UART_Receive_DMA()。

好的,感谢,我再看看。

使用特权

评论回复
11
pattywu| | 2020-4-1 20:12 | 只看该作者
STM32的DMA+空闲,不是这么玩的。
DMA完成中断,是吃什么的?
你不会DMA接收完256字节,产生DMA完成中断吗?
脑子?
脑子?
脑子是个好东西,不用,可惜了。

使用特权

评论回复
12
cyc2009|  楼主 | 2020-4-15 19:15 | 只看该作者
pattywu 发表于 2020-4-1 20:12
STM32的DMA+空闲,不是这么玩的。
DMA完成中断,是吃什么的?
你不会DMA接收完256字节,产生DMA完成中断吗 ...

你牛,B!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

56

帖子

0

粉丝