打印
[应用相关]

LAT1315 串口DMA接收不定长数据的一种方法

[复制链接]
409|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
laocuo1142|  楼主 | 2024-3-19 10:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1. 前言
使用串口接收不定长数据时,可以有多种方法,比如最常见的有额外使能一个定时器,在
超过定时范围未收到后续的字节时,认为此帧结束;或者利用 IDLE 中断,当数据空闲时,自
动产生中断;亦或每接收到一个字节后都通过应用程序进行一次处理。这次我们介绍另外一种
方法,在 DMA 方式下利用硬件接收超时中断(Receiver timeout interrupt)实现不定长数据
的接收。
2. 实现原理
首先,并非所有的 STM32 系列的 MCU,也并非所有的 USART/UART 外设都支持
Receiver timeout (RTO)特性,具体的支持情况,可以通过对应芯片的参考手册去查询。
对于 MCU 的配置,可以通过 USART_RTOR 寄存器的 RTOEN 位使能接收超时功能,通
过 RTO 位域配置超时时间,时间单位为传输一个数据位的时间(即波特率)。
接收超时在停止位设置不同的情况下,计时的起始位置不同:
1. 如果 stop = ' 00 '或 stop = ' 11 ',从停止位的末尾开始。
2. 如果 stop = ' 10 ',则从第二个停止位的末尾开始。
3. 如果 stop = ' 01 ',则从停止位的起始开始。
当计数超过 RTO 位域的设定值时,且使能了 RTOIE 位,就会产生一个错误中断,此时我
们就可以认为此帧结束,进而进行处理。
LAT1315 串口DMA接收不定长数据的一种方法_V1.0.pdf (472.1 KB)

使用特权

评论回复
沙发
呐咯密密| | 2024-3-19 16:29 | 只看该作者
有IDLE中断就用IDLE,没用可以设计成超时中断

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1191

主题

5220

帖子

12

粉丝