[STM32U5] DMA接收UART数据时缓冲区偶尔乱序

[复制链接]
130|10
Clyde011 发表于 2025-10-5 07:18 | 显示全部楼层 |阅读模式
串口通过DMA接收上位机数据包,长度固定为64字节,但偶尔发现缓冲区内后半部分会被覆盖或顺序错乱。怀疑和空闲中断或内存对齐有关。
 楼主| Clyde011 发表于 2025-10-5 07:20 | 显示全部楼层
上位机如果发包太密,也容易重叠出错。
公羊子丹 发表于 2025-10-5 07:21 | 显示全部楼层
我碰到过这种情况,是因为空闲中断触发太频繁。
周半梅 发表于 2025-10-5 07:22 | 显示全部楼层
你是不是在回调里直接操作DMA缓冲?那容易错序。
帛灿灿 发表于 2025-10-5 07:23 | 显示全部楼层
LL库下用双缓冲DMA接收效果更好。
童雨竹 发表于 2025-10-5 07:24 | 显示全部楼层
HAL库的空闲中断要先停DMA再重启,否则会乱。
万图 发表于 2025-10-5 07:25 | 显示全部楼层
检查下缓存区是不是没按字对齐。
Wordsworth 发表于 2025-10-5 07:26 | 显示全部楼层
我感觉可能是ISR里数据复制太慢。
Bblythe 发表于 2025-10-5 07:27 | 显示全部楼层
也可能是DMA缓存被优化,volatile没加。
Pulitzer 发表于 2025-10-5 07:28 | 显示全部楼层
我换成环形缓冲后再配合空闲中断就没问题了。
Uriah 发表于 2025-10-5 07:29 | 显示全部楼层
我建议你加个标志位保护缓冲区操作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

155

主题

5872

帖子

0

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