收藏!了解UART总线工作原理看这一篇就够了!

2023-05-16

原文:玩转单片机

2019-08-24 16:50:29

越学到后面,基础知识更加不能忘记,温故而知新~~

还记得当年的打印机,鼠标和调制解调器吗?他们都有巨大笨重的连接器和粗电缆,并且必须拧到你的电脑上。这些设备正是使用UART协议与计算机进行通信。虽然USB几乎完全取代了旧的电缆和连接器,但UART绝对没有过时。您会发现目前许多项目中使用UART的GPS模块、蓝牙模块和RFID读卡器模块等连接到Raspberry Pi,Arduino或其他微控制器上。

通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART。它将要传输的资料在串行通信与并行通信之间加以转换。作为把并行输入信号转成串行输出信号的芯片,UART通常被集成于其他通讯接口的连结上。

它不是像SPI和I2C这样的通信协议,而是微控制器中独立的物理电路或独立的IC。

UART最好的一点是它只使用两根线就可以在设备之间传输数据,UART背后的原理很容易理解。

UART通信简介

 

在UART通信中,两个UART直接相互通信。发送UART将来自CPU等控制设备的并行数据转换为串行形式,并将其串行发送到接收UART,接收UART然后将串行数据转换回接收设备的并行数据。在两个UART之间传输数据只需要两根线。数据从发送UART的Tx引脚流向接收UART的Rx引脚:

 

UART以异步方式发送数据,这意味着没有时钟信号将发送UART的位输出与接收UART的位采样同步。发送UART不是时钟信号,而是将开始和停止位添加到正在传输的数据包中。这些位定义数据包的开始和结束,因此接收UART知道何时开始读取位。

当接收UART检测到起始位时,它开始以称为波特率的特定频率读取输入位。波特率是数据传输速度的度量,以每秒位数(bps)表示。两个UART必须以大致相同的波特率运行。发送和接收UART之间的波特率只能相差10%左右。

两个UART还必须配置为发送和接收相同的数据包结构。

 

UART如何工作

UART传输数据依靠的是UART总线,数据总线用于通过CPU,存储器或微控制器等其他设备将数据发送到UART。数据以并行形式从数据总线传输到发送UART。在发送UART从数据总线获得并行数据之后,它将添加起始位,奇偶校验位和停止位,从而创建数据包。接下来,数据包在Tx引脚上逐位串行输出。UART接收端则在其Rx引脚上逐位读取数据包。然后,接收UART将数据转换回并行形式,并删除起始位,奇偶校验位和停止位。最后,接收UART将数据包并行传输到接收端的数据总线:

UART传输的数据被组织成数据包。每个数据包包含1个起始位,5到9个数据位(取决于UART),可选的奇偶校验位以及1或2个停止位:
 

开始位
当UART数据传输线不传输数据时,它通常保持在高电压电平。为了开始数据传输,发送UART将传输线从高电平拉至低电平一个时钟周期。当接收UART检测到高电压到低电压转换时,它开始以波特率的频率读取数据帧中的位。

数据框
数据框包含要传输的实际数据。如果使用奇偶校验位,则它可以是5位到8位长。如果不使用奇偶校验位,则数据帧可以是9位长。在大多数情况下,数据首先以最低有效位发送。

奇偶校验位
奇偶校验描述数字的均匀性或奇数。奇偶校验位是接收UART在传输过程中判断是否有任何数据发生变化的一种方法。电磁辐射、不匹配的波特率或长距离传输时,数据都有可能发生变化。接收UART读取数据帧后,它会计算值为1的位数,并检查总数是偶数还是奇数。如果奇偶校验位为0(偶校验),则数据帧中的1位应总计为偶数。如果奇偶校验位是1(奇校验),则数据帧中的1位应总计为奇数。当奇偶校验位与数据匹配时,UART知道传输没有错误。但如果奇偶校验位为0,然而1位应总计为奇数;或者奇偶校验位是1,并且1位应总计是偶数,则数据帧中的位已经改变。

停止位
为了通知传输数据包的结束,UART发送端会将数据传输线从低电压驱动至高电压至少两位持续时间。

UART传输步骤

 

1.发送UART从数据总线并行接收数据:

 

2.发送UART将起始位,奇偶校验位和停止位添加到数据帧:
 

 

3.整个数据包从发送UART串行发送到接收UART。接收UART以预先配置的波特率对数据线进行采样:
 

4.接收UART丢弃数据帧中的起始位,奇偶校验位和停止位:

5.接收UART将串行数据转换回并行并将其传输到接收端的数据总线:
 

UART的优点和缺点

没有任何一种通信协议是完美的,以下是一些优点和缺点,可帮助您确定它们是否符合您项目的需求:

优点
只使用两根电线
不需要时钟信号
有一个奇偶校验位
只要双方设置后,就可以改变数据包的结构
有完整的文档并且具有广泛的使用

缺点
数据帧的大小限制为最多9位
不支持多个从属或多个主系统
每个UART的波特率必须在10%之内

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

收藏!了解UART总线工作原理看这一篇就够了! 的相关文章

  • Jetson nano串口的使用——UART

    UART串口使用两条杜邦线就可以实现数据发送和接收 xff0c 可以很方便的与其他扩展进行数据连接 xff0c 比如微雪的L76X GPS HAT就可以直接连接40Pin的GPIO接口通过UART串口进行数据传递 接下来具体说明Jetson
  • 03-串口(UART)的使用

    目录 第一节 UART概述1 1 UART的用处 xff1a 1 2 UART的优点1 3 UART原理与概念1 4 UART数据传输原理与过程1 5 关于电平转换1 6 UART内部具体机制 第二节 UART编程 第一节 UART概述 1
  • UART、RS232 、RS485 区别

    UART RS232 RS485 区别 UART RS232 RS485这些物理层的串口通信 xff0c 它们都是在同一时间发送一位 RS232 RS485只是串口通讯的变种 xff0c 理解了UART串口通讯 xff0c 那么RS232和
  • 串口、UART、USART、COM、USB、TTL、RS232、RS485、RS422简介

    串口 COM口 USB口是指的物理接口形式 xff08 硬件 xff09 xff1b TTL RS 232 RS 485 USB电平是指的电平标准 xff08 电信号 xff09 串口 UART口 USART口 COM口 USB口 xff0
  • DSP:TMS320C6657 之 UART波特率问题

    6657 设置串口波特率 以614400为例 xff08 1 xff09 根据公式计算分频系数 xff08 2 xff09 1GHz 主频下 UART 输入频率 166666666Hz xff08 1 6 xff09 xff08 3 xff
  • UART+DMA数据传输

    DMA的概念 DMA xff08 Direct Memory Access xff09 即直接内存访问 xff0c DMA传输方式无需CPU直接控制传输 xff0c 通过硬件为RAM I O设备开辟一条直接传输数据的通路 xff0c 能使C
  • UART通信中流控RTS和CTS的理解

    一 流控 xff0c 顾名思义就是流量控制的意思 目的是协调收发双方 xff0c 使数据不会丢失 如果UART只有RX TX两个信号 xff0c 要流控的话只能是软流控 xff1b 如果有RX xff0c TX xff0c CTS xff0
  • UART详解

    UART 通用异步收发传输器 xff08 Universal Asynchronous Receiver Transmitter xff0c 通常称作UART xff09 是一种串行异步收发协议 xff0c 应用十分广泛 UART工作原理是
  • UART串口通信

    目录 一 通信特点二 通信应用三 接线示意图三 UART通信协议四 STM32F4 串口使用1 资源分布2 特性3 UART框图4 使用方法5 相关库函数6 函数实例 五 实战 上位机控制开发板小灯 一 通信特点 异步 串行 全双工 一般描
  • UART波形分析

    1 逻辑分析仪解码配置 波特率 xff1a 9600 2 逻辑分析仪结果 3 波特率计算 1除以9600 xff0c 结果如下 xff08 e 4表示10的负4次方 xff09 表示 0 00010416秒 61 104 16 微秒 找到发
  • 4.RTT-UART-中断接收及轮询发送

    本期博客开始分享RTT的UART xff0c 利用战舰V3的uart2来输入输出一些字符串 UART xff08 Universal Asynchronous Receiver Transmitter xff09 通用异步收发传输器 xff
  • Node.js笔记:SerialPort(串口)模块使用(基于9.x.x)

    文章目录 目的 模块安装 基础使用 扫描端口 打开端口 发送数据 接收数据 错误处理 数据解析器 SerialPort类 构造方法 属性 事件 方法 命令行工具 总结 目的 上位机与各种电路模块间常常采用串口进行通讯 Node js中可以使
  • 51单片机串口通信(UART)

    项目描述 1 串口工作方式为1 8位UART 波特率可变 无校验位 2 通信数据格式为 1位起始位 8位数据位 1位停止位 3 上电后MCU给上位机发送问候语 之后等待上位机的信息 MCU和上位机的通信为收发交替进行 MCU接收到的信息会实
  • GD32E23x的USART被断点打断后重新运行,会一直进入中断的问题

    GD32E23x的USART被断点打断后重新运行 会一直进入中断的问题 GD32E230K8单片机USART0连接一个从机芯片 该芯片每100ms发来一串16Bytes的数据 MCU中断接收 没有开启FIFO 只开启了RBNE 接收缓存非空
  • UART通信原理

    UART 通信格式 串口全称叫做串行接口 通常也叫做 COM 接口 串行接口指的是数据一个一个的顺序传输 通信线路简单 使用两条线即可实现双向通信 一条用于发送 一条用于接收 串口通信距离远 但是速度相对会低 串口是一种很常用的工业接口 I
  • ESP32-C3入门教程 基础篇(三、UART模块 — 与Enocean无线模块串口通信)

    测试第三课 ESP32 C3的串口通信测试 老样子 使用Enocean无线模块和ESP32 C3进行串口通信 目录 前言 1 UART示例测试 1 1 UART 基础测试 1 2 与Enocean无线模块串口通信测试 2 ESP32 C3
  • Android Things:连接到串行调试控制台

    我一直在尝试连接到串行控制台树莓派 3 with 安卓事物 using USB to TTL cable从我的Linux Ubuntu 机器 尽管我按照文档连接了电缆 但执行时我得到的只是minicom命令如下 with 没有机会输入任何字
  • Gem5 中与 ARM 裸机的 UART 通信

    我目前正在使用 Gem5 我必须通过 UART 从我的主机访问 ARMv8 裸机选项 所以我尝试了很多方法 但我还没有准备好 您能否让我知道 如何在裸机类型编程中将主机的串行端口映射到 ARMv8 的串行端口 任何帮助 将不胜感激 工作设置
  • 使用 read(...) 时在换行符处停止

    我需要从通过 UART 连接的 GPS 读取 NMEA 语句 操作系统是Debian 语言必须是C 为此 我使用以下命令打开文件open 并读取一个字符串read 但是 这样我必须指定字符串长度 这会分解句子 相反 我想读到 NMEA 句子
  • 使用 /dev/tty* 进行 9 位 uart 仿真

    我有一个不常见的协议 它需要 9600 波特率 9 位和 1 个停止位 我找不到任何可以实现此发送 接收的驱动程序 我可以寄东西到 dev tty 用于模拟这些查询 我应该发送什么 如何模拟 9600 波特率 您可以使用粘性奇偶校验 也称为

随机推荐

  • 笔记:VSCode C/C++ 格式化修改设置

    VSCode安装C C 43 43 插件后 xff0c 就有了格式化代码的能力 xff0c 这个功能很好用 xff0c 一般来说不用改就可以用的很嗨皮 为啥要改默认设置 xff0c 只因不喜欢函数内大括号独占一行 xff0c 如此一屏显示的
  • NEMA 协议:GPRMC数据格式

    NEMA协议的由来 NMEA协议是为了在不同的GPS xff08 全球定位系统 xff09 导航设备中建立统一的BTCM xff08 海事无线电技术委员会 xff09 标准 xff0c 由美国国家海洋电子协会 xff08 NMEA The
  • 大小端(网络字节序)等概念

    1 大小端定义 大端存储模式 xff1a 是指数据的低位字节序保存在内存的高地址中 xff0c 而数据的高位字节序保存在内存的低地址中 小端存储模式 xff1a 是指数据的低位字节序保存在内存的低地址中 xff0c 而数据的高位字节序保存在
  • [李景山php]RHEL\CentOS 7\ubuntu16.04 下 MySQL 连接数被限制为214个

    问题 项目中 xff0c 由于连接数过多 xff0c 提示 Too many connections xff0c 需要增加连接数 我在 etc my cnf中修改了 max connections 61 2000 但是 xff0c 实际连接
  • 关系型数据库和非关系型数据库的特性以及各自的优缺点

    数据库 类型特性优点缺点关系型数据库 SQLite Oracle mysql1 关系型数据库 xff0c 是指采用了关系模型来组织 数据的数据库 xff1b 2 关系型数据库的最大特点就是事务的一致性 xff1b 3 简单来说 xff0c
  • 采用libuv的epoll方式实现的异步高性能libcurl发送数据的方法

    Libcurl较为基本的用法是easyinterface xff0c 它是最简单的同步接口 xff0c 容易理解 xff0c 实现代码简单 xff0c 但是性能低下 curl multi perform 43 select xff1a 可以
  • 各种浏览器语言包、国际化如何配置

    size 61 large 如果web项目使用了国际化多语言包 xff0c 切换浏览器语言包可以切换语言 xff1a color 61 red Firefox如何中英文切换 color 首先得下载语言包 xff0c 网址 xff1a url
  • libcurl采用curl_multi_perform() + curl_multi_wait()方式实现异步高性能l发送数据的方法

    前两篇文章 c c 43 43 调用libcurl库发送http请求的两种基本用法 采用libuv的epoll方式实现的异步高性能libcurl发送数据的方法 讲述了采用libcurl发送数据的基础方法和高性能方法 xff0c 基础方法较为
  • 网络库libevent、libev、libuv对比

    Libevent libev libuv 三个网络库 xff0c 都是c 语言实现的异步事件库Asynchronousevent library xff09 异步事件库本质上是提供异步事件通知 xff08 Asynchronous Even
  • 记flume部署过程中遇到的问题以及解决方法(持续更新)

    项目需求是将线上服务器生成的日志信息实时导入kafka xff0c 采用agent和collector分层传输 xff0c app的数据通过thrift传给agent xff0c agent通过avro sink将数据发给collector
  • c++11多线程编程(一):创建线程的三种方法

    c 43 43 11线程库 原始的c 43 43 标准仅支持单线程编程 xff0c 新的c 43 43 标准 xff08 c 43 43 11或c 43 43 0x xff09 于2011年发布 xff0c 引入了新的线程库 编译器要求 L
  • c++11多线程编程(六):事件处理

    本节讨论在多线程环境下的事件处理 有时 xff0c 线程需要等待某事件发生 xff0c 比如一个条件变为true xff0c 或者某任务被另一个线程完成 例如 xff0c 我们创建一个基于网络的应用程序 xff0c 处理如下的任务 xff1
  • C++11智能指针(六):unique_ptr介绍与例子

    本节介绍下c 43 43 11提供的智能指针实现 std unique ptr lt gt 什么是std unique ptrunique ptr lt gt 是c 43 43 11提供的智能指针实现之一 xff0c 用于防止内存泄漏 un
  • RabbitMQ图解

    RabbitMQ是一个消息队列软件 xff0c 称为消息代理或队列管理器 简单地说 xff0c 这是一个可以定义队列的软件 xff0c 应用程序可以连接到队列并将消息传输到队列中 消息可以包括任何类型的信息 例如 xff0c 它可以具有从另
  • RabbitMQ C 客户端收发数据实例解析

    rabbitmq c客户端 xff0c github地址 xff1a https github com alanxz rabbitmq c rabbitmq c是一个C语言操作的AMQP客户端库 xff0c 用来与RabbitMQ brok
  • php curl知识点

    如果不支持https可以试试关掉ssl curl setopt ch CURLOPT SSL VERIFYHOST 0 curl setopt ch CURLOPT SSL VERIFYPEER 0 编译curl的时候开启ssl with
  • 大小端字节序知识详解

    计算机硬件有两种储存数据的方式 xff1a 大端字节序 xff08 big endian xff09 和 小端字节序 xff08 little endian xff09 举例 xff1a 数值0x2211使用两个字节储存 xff1a 高位字
  • URL转义及编码

    js对文字进行编码涉及3个函数 xff1a escape encodeURI encodeURIComponent xff0c 相应3个解码函数 xff1a unescape decodeURI decodeURIComponent url
  • 从C到C++高级过渡

    当做速学笔记使用 简写 基础篇 环境设置 g 43 43 有些系统默认是使用 C 43 43 98 xff0c 我们可以指定使用 C 43 43 11 来编译 main cpp 文件 xff1a g span class token ope
  • 收藏!了解UART总线工作原理看这一篇就够了!

    原文 xff1a 玩转单片机 2019 08 24 16 50 29 越学到后面 xff0c 基础知识更加不能忘记 xff0c 温故而知新 还记得当年的打印机 xff0c 鼠标和调制解调器吗 xff1f 他们都有巨大笨重的连接器和粗电缆 x