Clyde011 发表于 2025-10-5 07:18

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

串口通过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

我建议你加个标志位保护缓冲区操作。
页: [1]
查看完整版本: DMA接收UART数据时缓冲区偶尔乱序