打印
[STM32F3]

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

[复制链接]
540|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jiaxw|  楼主 | 2022-4-17 21:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教各位:使用串口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;

请问产生的原因是什么?如何处理能正确接收?

使用特权

评论回复
沙发
xxrs| | 2022-4-17 21:15 | 只看该作者
你是怎么产生ORE的?

使用特权

评论回复
板凳
jiaxw|  楼主 | 2022-4-17 21:17 | 只看该作者
DMA接收长度256个字节;我一次性发送400个字节;对DMA接收完成,空闲中断,Error回调都有清除ORE flag。

使用特权

评论回复
地板
juventus9554| | 2022-4-17 21:19 | 只看该作者
你每次都发送400字节?

使用特权

评论回复
5
jiaxw|  楼主 | 2022-4-17 21:22 | 只看该作者
是的,串口工具,每次400个字节,设置间隔1ms,循环发;停下来后,发正常的设备指令,就出现描述的那种情况。

使用特权

评论回复
6
heweibig| | 2022-4-17 21:25 | 只看该作者
1ms间隔发送400字节,你这串口速度是有多快,你的测试条件也够变态的

使用特权

评论回复
7
wyjie| | 2022-4-17 21:27 | 只看该作者
情形描述得还是不太清晰。UART收发都是DMA吗?感觉又不像.

使用特权

评论回复
8
stly| | 2022-4-17 21:29 | 只看该作者
还有,你产生ORE后对它做了清除,对相应DMA通道有重置吗?

使用特权

评论回复
9
jiaxw|  楼主 | 2022-4-17 21:31 | 只看该作者
您好,UART接收是DMA,发送不是。
产生ORE后有清除flag,代码在Idle中断和接收完成(达到DMA接收长度)中断中,有HAL_UART_DMAStop和HAL_UART_Receive_DMA,DMA通道重置是指?在什么地方添加?

使用特权

评论回复
10
stly| | 2022-4-17 21:37 | 只看该作者
重置就是指对相依的DMA通道重新初始化,即你这里说的HAL_UART_Receive_DMA()。

使用特权

评论回复
11
chuxh| | 2022-4-17 21:42 | 只看该作者
清除ORE然后重置DMA通道,后续不该有啥问题

使用特权

评论回复
12
supernan| | 2022-4-17 21:45 | 只看该作者
但是,你ORE发生的时机时随机的,上次数据到底传到哪里了你是怎么处理的?

使用特权

评论回复
13
jiajs| | 2022-4-17 21:47 | 只看该作者
另外,你的数据发送是靠什么触发的?好好理理程序逻辑。

使用特权

评论回复
14
jiaxw|  楼主 | 2022-4-17 21:50 | 只看该作者
好的,感谢,我再看看。

使用特权

评论回复
15
SantaBunny| | 2023-3-3 12:48 | 只看该作者
是否你在上一次最后一个字节还没有送出前,就更换了缓冲再看看错误是否有规律

使用特权

评论回复
16
Henryko| | 2023-3-3 23:12 | 只看该作者
1ms400字节太快了吧

使用特权

评论回复
17
Stahan| | 2023-3-5 20:05 | 只看该作者
有没有重置相应DMA通道?

使用特权

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

本版积分规则

825

主题

9762

帖子

4

粉丝