0 问题引出
在一些场合下,我们需要使用到串口通信,最常见的做法就是开启串口收发DMA、串口空闲中断,串口中断负责处理接收到的串口DMA数据,大致的操作为临时停止接收DMA,然后拷贝本次DMA接收到的数据,这可以应付串口速度比较慢的情况。如果串口速度很快,则在临时关闭DMA期间就可能发生丢失数据的问题。为了规避这一问题,本文提出使用GPDMA循环链表+双环形buffer实现高速串口接收不丢包,理论上支持任意高波特率。本文使用的实验平台如下:
硬件平台:STM32H503RBT6
HAL库版本:STM32Cube_FW_H5_V1.3.0
1 GPDMA循环链表+双环形buffer实现高速串口接收不丢包(理论支持任意高波特率)
1.1 核心思想
整个操作的核心可以用下图表示:

原理介绍:开启1ms中断,在1ms中断内计算接收DMA尾指针位置,和接收DMA头指针位置进行计算,得出这1ms内接收DMA接收到的数据量。然后根据DMA头指针位置,将接收到的串口数据拷贝到目标buffer中

订阅专栏 解锁全文
165

被折叠的 条评论
为什么被折叠?



