0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

常见的UART收发方式

星星科技指导员 来源:亿佰特 作者:亿佰特 2024-02-19 16:23 次阅读

在很多单片机系统中,都会提供UART Read和UART Write这样的接口函数。一些高级的单片机甚至还有UART Read Callback和UART Write Callback这样的回调函数来收发数据。通常很多单片机的数据处理能力相对UART通信来说要快得多,因此像采用上述接口函数的单片机系统都使用了数据缓存来辅助UART收发。常见的UART收发方式有这几种:

1、数据队列(Queue)收发

这种方式适合大多数单片机,只要有中断就行。使用UART Write发送数据时,数据并不是直接写入到UART发送器,而是放进了一个环形缓冲区中。然后在UART TX发送完毕中断服务函数中读取环形缓冲区并把读到的字节送入UART发送器,然后等待TX发送完毕中断服务函数再次执行时送入下一个字节,直到把环形缓冲区的数据送完为止。环形缓冲区通常有一个标记头和尾的变量,只要头和尾的变量值不相等就说明缓冲区有数据。使用UART Read接收数据时,也不是直接从UART接收器中获取数据,而是从环形缓冲区中获取数据。UART RX收到中断服务函数中把UART接收器收到的字节送进环形缓冲区,单片机执行UART Read时获取到的数据是环形缓冲区的数据,这样可以保证单片机程序不用一直等待UART接收器。这种设计的优点是可以有效地处理实时数据,避免了数据的丢失。但是,如果Queue的大小设置不当,可能会导致数据的溢出。因此,我们需要根据实际的应用场景来合理地设置Queue的大小。

2、带硬件FIFO的UART收发

很多先进的单片机的UART收发用上了硬件FIFO。没有硬件FIFO的单片机在收发数据时每收发一个字节就要执行一次中断函数,在高波特率通信时单片机会频繁进入中断,从而影响单片机主任务的处理。而硬件FIFO则可以缓解这种矛盾。例如单片机的UART FIFO是16字节,单片机在发送数据时一次最多可以传输16字节数据,等16字节数据发送完毕后才产生UART TX发送完毕中断。接收数据时通常是“半满”中断和“超时”中断,即接收FIFO中的字节数超过8字节,或者接收FIFO不为空但是超过1字节的时间内没有收到新的字节数据,产生一次UART RX接收中断。通常带硬件FIFO的UART会和数据队列的方式相结合使用,在高波特率通信下传输效率更高。

3、带DMA的UART收发

DMA(Direct Memory Access)是一种可以将计算机的某个存储区域直接映射到内存地址空间的技术,从而实现对内存和其他外设的统一访问。当UART接收到数据时,数据会被直接写入到DMA控制的内存区域中,然后触发中断。在中断服务程序中,我们可以从DMA控制的内存区域中取出数据,进行必要的处理,然后再通过UART发送出去。

使用DMA进行UART传输对连续多条数据的传输帮助特别大,例如前面提到的UART Read Callback和UART Write Callback回调函数的方式。连续发送多条数据流时,可以把数据流放在单片机的多个不同的缓冲区,然后DMA直接指向缓冲区地址,待DMA传输完毕后产生UART Write Callback,然后在UART Write Callback中把DMA指向下一个缓冲区地址。接收数据时也可以预约一个接收缓冲区,DMA传输的数据传输到该缓冲区,传输满了后产生UART Read Callback再指向下一个接收缓冲区,同时可以让单片机主程序处理已收满数据的缓冲区的内容。

审核编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6001

    文章

    43978

    浏览量

    620863
  • uart
    +关注

    关注

    22

    文章

    1159

    浏览量

    99969
  • 数据缓存
    +关注

    关注

    0

    文章

    22

    浏览量

    6950
  • 发送器
    +关注

    关注

    1

    文章

    237

    浏览量

    26563
收藏 人收藏

    评论

    相关推荐

    uart通信的详细讲解

    UART通信的基本原理、工作模式、波特率计算以及常见使用方式,帮助有一定单片机开发能力的人群更好地理解和应用UART通信。01UART通信的
    的头像 发表于 09-22 08:22 1701次阅读
    <b class='flag-5'>uart</b>通信的详细讲解

    RS485和RS232uart中断方式的半双工收发数据 接到数据原样返回

    RS485和RS232 uart中断方式的半双工收发数据 接到数据原样返回的c语言代码有什么区别吗???我现在有一个RS232C语言执行的uart中断
    发表于 09-18 16:59

    UART阻塞方式收发

    博主能力有限,有错误望大佬指出0x00 文章内容:UART阻塞方式收发UART中断方式收发
    发表于 08-10 07:32

    STM32 UART串口收发与中断方式接收环境

    STM32 UART串口收发与中断方式接收环境:1、STM32CubeMX 5.32、Atollic TrueSTUDIO for STM32 9.3.03、战舰迷你板(stm32f103rb)(一
    发表于 08-13 08:49

    如何去实现UART阻塞方式收发数据呢

    如何去实现UART阻塞方式收发数据呢?如何去实现UART中断方式收发数据呢?
    发表于 12-08 06:50

    UART异步通信方式引脚连接方法是什么?

    常见的串行通信接口有哪些?UART异步通信方式引脚连接方法是什么?UART异步通信方式特点是什么?
    发表于 12-16 07:16

    HAL库中UART的三种收发方式是什么?

    HAL库中UART的三种收发方式是什么?
    发表于 02-18 06:33

    UART收发器设计实例

    UART(Universal Asynchronous Receiver Transmitter,通用异步收发器)是广泛使用的异步串行数据通信协议。下面首先介绍 UART 硬件接口及电平转换电路,分析
    发表于 07-22 11:24 113次下载
    <b class='flag-5'>UART</b><b class='flag-5'>收发</b>器设计实例

    通用异步收发器(UART)

    串行通信又分为异步与同步两类。UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)正是设备间进行异步通信的关键模块。
    发表于 01-13 16:36 15次下载

    通用异步收发器(UART

    通用异步收发器(UART
    发表于 10-11 14:53 21次下载
    通用异步<b class='flag-5'>收发</b>器(<b class='flag-5'>UART</b>

    UART收发数据操作介绍

    Curiosity PIC32MZEF学习教程之:如何通过UART收发数据PIC32MZEF一共有6个UART端口,资源还是比较丰富的。UART是比较常用的外设,特别是在调试的时候,串
    的头像 发表于 02-01 03:27 1.3w次阅读
    <b class='flag-5'>UART</b>的<b class='flag-5'>收发</b>数据操作介绍

    UART收发器的设计实例详细说明

    UART(Universal Asynchronous Receiver Transmitter,通用异步收发器)是广泛使用的异步串行数据通信协议。下面首先介绍 UART 硬件接口及电平转换电路
    发表于 12-27 08:00 4次下载
    <b class='flag-5'>UART</b><b class='flag-5'>收发</b>器的设计实例详细说明

    STM8S_ 004_UART基本收发数据

    STM8S_004_UART基本收发数据
    的头像 发表于 03-20 10:41 3921次阅读
    STM8S_ 004_<b class='flag-5'>UART</b>基本<b class='flag-5'>收发</b>数据

    【CubeIDE】STM32 HAL库史上最详细教程(一):UART串口收发

    博主能力有限,有错误望大佬指出  0x00 文章内容:UART阻塞方式收发UART中断方式
    发表于 11-23 17:51 12次下载
    【CubeIDE】STM32 HAL库史上最详细教程(一):<b class='flag-5'>UART</b>串口<b class='flag-5'>收发</b>

    UART通用异步收发器原理是什么

    UART通用异步收发器(串口通信) 一般来说,开发过程中我们通常使用串口进行DEBUG调试。 原理 通用异步收发传输器(Universal Asynchronous Receiver
    的头像 发表于 11-09 17:32 332次阅读
    <b class='flag-5'>UART</b>通用异步<b class='flag-5'>收发</b>器原理是什么