简介
这篇文章介绍了串口+DMA的发送过程:记群内因串口DMA发送而引发的讨论_哈士奇去买菜的博客-优快云博客
本文将介绍基于串口+DMA循环模式+循环队列的接收过程。其最大的优点是每次接收完成后不需要禁止MDA通道然后重新配置接收长度。并且还支持接收不定长数据。
USART的IDLE中断
我已经写过IDLE中断的解释,请参考:GD32F130之USART串口通信_哈士奇去买菜的博客-优快云博客_gd32f130串口
这里需要补充强调的是,当本机串口检测到IDLE中断时,只是说明对方已经结束了一串连续的串口帧发送过程,而不一定说明对方已经完成了一包应用层数据的发送。首先串口通信本身没有规定串口帧之间的间隔时间,可以没有间隔,或者可以有任意长间隔。其次,对方在发送一包应用层数据的时候,可能在发送过程中被中断打断,导致发送产生间隔,从而会让本机产生IDLE中断。
在DMA接收方式下,IDLE中断用于告诉应用程序,对方已经完整发送了一包数据,或者,对方只发送了一包数据的一部分。因此,在IDLE中断发生时,应该检查收到数据的完整性,只有收到了完整的数据,才去分析处理这个数据。最好的做法是在应用层设计
本文介绍了基于STM32的串口USART结合DMA的循环模式,利用IDLE中断实现接收不定长数据的方法。通过设置循环队列缓冲区,即使在接收过程中CPU未介入,也能避免数据丢失。IDLE中断用于判断数据包的完整性,循环模式确保DMA自动启动新的接收任务,而无需每次手动配置。
订阅专栏 解锁全文
7309

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



