注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
emmnn的个人空间 http://home.eeworld.com.cn/space-uid-1253968.html [收藏] [复制] [分享] [RSS]
日志

【GD32L233C-START评测】5、UART+DMA接收不定长数据

已有 208 次阅读2022-3-28 17:23 |个人分类:【GD32L233C-START评测】

前言

在嵌入式开发领域,USART外设可以说是被应用最广的片上外设。从最基础的作为调试输入输出口使用外,USART也常被用于各种功能模块的交互接口。例如市面上常见的串口屏,各种WiFi、蓝牙等无线模组等。

 

在使用USART作为通讯接口应用过程中,我们经常会使用USART口接收外部数据帧解析并做进一步的接收处理。在这个过程中,如果USART数据帧不是特别长,并且交互次数不是很频繁的情况下,我们可以通过串口接收中断一个字节一个字节地做接收处理(放到代码缓存中),在接收到一帧数据后,给个标志位并主程序中做解析处理。但是在实际的应用中,我们遇到的,更多的是需要接收不定长数据,并且频繁交互的情况。今天,我们要介绍的,就是如何使用USART+DMA去接收一帧不定长的数据。

 

USART+DMA接收不定长数据

  • DMA是什么?

DMA,直接存储器访问控制器。同USART一样,这也是一种片上硬件外设。它的主要功能是能在CPU不参与的前提下进行数据的传输。关于DMA的介绍可以直接阅读用户手册第十章《直接存储器访问控制器》,这里也不再进行赘述。

对于采用DMA方式实现USART数据接收的配置,在手册上也能找到相关的配置流程图

  • USART+DMA的接收处理流程

除了以上配置外,我们还需要思考两个问题:

  • 如何得知一帧数据是否传输完毕?
  • 当一帧传输完成后,如何得知接收的字节数?

这里我们介绍下USART中的IDLE线检测中断和DMA中的通道计数寄存器。

IDLE线检测中断

也叫空闲中断。在开始接收串口数据后,当检测总线上出现空闲的时候,USART状态寄存器上的IDLEF标志位会被置位,同时会产生中断。利用此中断,我们可以获知一帧不定长的数据的传输是否完成。

DMA通道计数寄存器

关于此寄存器,手册上说明如下  

在进行DMA的相关配置时,我们可以预先往这个寄存器写一个足够大的数,而在接收完每一帧数据包后,我们可以在IDLE中断中再去读这个寄存器的值,前后读这个寄存器值相减,就可以得到接收的这一帧数据包的字节数。

综上所述,USART+DMA的接收处理流程如下:

 

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册