欢迎来到华体会app网页版登录入口_华体绘最近登录网址

182-0397-0789 182-0399-7789
首页 > 新闻资讯 > 华体绘最近登录网址

常见的UART收发方式

浏览 时间 2024-02-28 作者 华体绘最近登录网址

  k和UART Write Callback这样的回调函数来收发数据。通常很多单片机的数据处理能力相对UART来说要快得多,因此像采用上述接口函数的单片机系统都使用了数据缓存来辅助UART收发。常见的UART收发方式有这几种:

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

  很多先进的单片机的UART收发用上了硬件FIFO。没有硬件FIFO的单片机在收发数据时每收发一个字节就要执行一次中断函数,在高波特率通信时单片机会频繁进入中断,进而影响单片机主任务的处理。而硬件FIFO则可以缓解这种矛盾。例如单片机的UART FIFO是16字节,单片机在发送数据时一次最多可以传输16字节数据,等16字节数据发送完毕后才产生UART TX发送完毕中断。接收数据时通常是“半满”中断和“超时”中断,即接收FIFO中的字节数超过8字节,或者接收FIFO不为空但是超过1字节的时间内没有收到新的字节数据,产生一次UART RX接收中断。通常带硬件FIFO的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再指向下一个接收缓冲区,同时能让单片机主程序处理已收满数据的缓冲区的内容。

上一篇:荣耀发布MagicOS 80初次完成目的辨认人机交互 下一篇:2019年民主生活会个人对照检查材料怎么写