[技术问答] HC32F4A0基于DMA的串口高速循环接收数据丢包问题

[复制链接]
 楼主| eyesmall 发表于 2025-4-3 11:12 | 显示全部楼层 |阅读模式
使用循环数组接收外部数据,串口波特率614400,单帧数据33个字节,数据频率200HZ。DMA配置为repeat模式,接收完成中断内执行重置DTCNT和使能通道操作,重置过程中频繁出现丢数据现象,统计中断内执行时间为800ns,离1个字节的传输时间还差很多,不清楚数据丢在哪个环节。
使用官方例程链表形式数据接收完整不会丢数,但链表的配置代码看的不是很明白,不过通过数据手册发现链表重置只能使用单一通道,单个DMA多通道无法同时使用。

caigang13 发表于 2025-4-5 11:20 来自手机 | 显示全部楼层
DMA的读取时序逻辑很重要
chenjun89 发表于 2025-4-5 16:33 来自手机 | 显示全部楼层
多半还是数据处理逻辑和时序没有配合好
 楼主| eyesmall 发表于 2025-4-15 16:44 | 显示全部楼层
丙丁先生 发表于 2025-4-6 05:20
根据你的描述和搜索结果,以下是可能的原因及解决建议:

多谢大佬回复
程序本身就使用了多缓冲机制,并不能解决这个问题,因为数据在重置后就已经不对了,因为哪怕我数据不做处理也会丢

链表确实复杂,但使用链表重置方式却还是比较简单的,虽然一个DMA只能有一个链表重置,但也只能忍了,目前也没有好办法不是吗,起码解决了两个串口接收的问题

降低波特率没有实质性效果,但是理论上速率低触发概率也低

制造商无法给与足够支持
huquanz711 发表于 2025-4-16 08:12 来自手机 | 显示全部楼层
可能是CPU处理不过来,丢数据了。
绝影孤狼 发表于 2025-4-20 19:49 | 显示全部楼层
看起来像是DMA配置的问题。你可以尝试调整DMA的优先级,或者检查一下DMA的源地址和目标地址是否正确配置。
Amazingxixixi 发表于 2025-4-24 15:22 | 显示全部楼层
学习一下啊!感觉有点知识慌了
和下土 发表于 2025-5-31 19:17 | 显示全部楼层
DMA 是“边收边丢”的,只要你失去 DMA 的“持续性”,RX 数据就有风险丢失
初级工程渣 发表于 2025-6-30 15:24 | 显示全部楼层
典型的 DMA 缓冲区管理不当导致的数据丢失。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:新手一个,干嘛嘛不行

17

主题

168

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部