DMA接收UART数据时缓冲区偶尔乱序
串口通过DMA接收上位机数据包,长度固定为64字节,但偶尔发现缓冲区内后半部分会被覆盖或顺序错乱。怀疑和空闲中断或内存对齐有关。上位机如果发包太密,也容易重叠出错。 我碰到过这种情况,是因为空闲中断触发太频繁。 你是不是在回调里直接操作DMA缓冲?那容易错序。 LL库下用双缓冲DMA接收效果更好。 HAL库的空闲中断要先停DMA再重启,否则会乱。 检查下缓存区是不是没按字对齐。 我感觉可能是ISR里数据复制太慢。 也可能是DMA缓存被优化,volatile没加。 我换成环形缓冲后再配合空闲中断就没问题了。 我建议你加个标志位保护缓冲区操作。
页:
[1]