嵌入式五大通信协议详解 (一) UART

news2024/11/25 2:32:50

嵌入式C语言学习进阶系列文章

GUN C编译器拓展语法学习笔记(一)GNU C特殊语法部分详解
GUN C编译器拓展语法学习笔记(二)属性声明
GUN C编译器拓展语法学习笔记(三)内联函数、内建函数与可变参数宏
数组存储与指针学习笔记(一)数据类型与存储、数据对齐、数据移植、typedef


文章目录

  • 嵌入式C语言学习进阶系列文章
    • 一、定义
    • 二、数据协议
      • 2.1 电气连接形式
      • 2.2 帧格式
      • 2.3 存在问题
    • 三、协议常见应用
      • 3.1 RS232通信接口(全双工通信)
      • 3.2 RS485通信接口(半双工通信)


一、定义

  通用异步收发传输器UART(Universal Asynchronous Receiver/Transmitter)。是一种串行、异步、全双工的通用数据通信协议。其特点是通信线路简单,只需要一对TX、RX的传输线即可实现双向通信,根据约定时序进行传输,但是相对而言传输速率不高。其衍生实体如基于TTL的UART通讯、基于RS232的UART通讯以及基于RS485的UART通讯等。
  注:USART是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换。USART是指单片机的一个端口模块,可以根据需要配置成同步模式(增加了同步时钟),也可以将其配置为异步模式,后者就是UART。所以说UART姑且可以称之为一个与SPI,I2C对等的“协议”,而USART则不是一个协议,而是更应该理解为一个实体。

二、数据协议

2.1 电气连接形式

  UART通信协议包含两根数据线分别为RX、TX,两个UART通信设备通信过程交错连接,实现全双工独立通信。双方通信设备通过约定好波特率、起始位、校验位、停止位等核心配置参数,实现数据传输。
在这里插入图片描述

2.2 帧格式

在这里插入图片描述
  帧格式详解:

  • 起始位:在开始一次通信传输时,发送方先发送一个逻辑0的低电平信号,表示传输字符开始。因为总线空闲时为高电平,所以开始一次通信时先发送一个明显区别于空闲状态的信号即低电平。

  • 数据位:起始位发送完成后,接收方开始接收数据。起始位后面就是数据位,数据位可以是5、6、7、8,9位等,构成一个字符(一般都是8位),发送顺序为先发送最低位,最后发送最高位,使用低电平表示0高电平表示1完成数据位的传输。

  • 奇偶校验位:数据位加上这一位后,使得1的位数应为偶数(偶校验)或奇数(奇校验),以此来校验数据传送的正确性。串口校验模式分为以下几种:

    • 无校验(no parity)。
    • 奇校验(odd parity):如果数据位中1的数目是偶数,则校验位为1,如果1的数目是奇数,校验位为0
    • 偶校验(even parity):如果数据为中1的数目是偶数,则校验位为0,如果为奇数,校验位为1
    • mark parity:校验位始终为1(不常用)。
    • parity:校验位始终为0(不常用)。
  • 停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。 由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备之间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟的机会。停止位个数越多,数据传输越稳定,但是数据传输速度也越慢。

  • 空闲位:UART协议规定,当总线处于空闲状态时信号线的状态为1即高电平,表示当前线路上没有数据传输。

  • 波特率: 波特率是UART协议,或者说所有异步串行协议,非常重要的一个概念,波特率表示一秒内传输了多少个码元数量,一般波特率为300,1200,2400,9600,19200,38400,115200等。例如9600 Baud表示一秒内传输了9600个码元信息,当一个码元只含1 bit信息时,波特率=比特率。
    在这里插入图片描述

2.3 存在问题

  • 电气接口不统一。UART在通信过程中一般使用处理器的电平信号,即TTL电平,但不同处理器的电平一般存在差异,在通信时需要转换电平
  • 抗干扰能力差。UART 在使用过程中使用TTL来表示逻辑0和逻辑1,但是TTL抗干扰能力差,传输数据过程容易出错。
  • 通信距离短。因为TTL的抗干扰能力差,因此传输距离很短,一般用于短距离传输。

三、协议常见应用

  面对UART存在的问题,工业上对串口协议做出了改进,增强了其电气特性。如常用的RS232和RS485串行通信标准。我们来认识一下它们。

3.1 RS232通信接口(全双工通信)

  RS232通讯又叫串口通讯方式,是指计算机通过RS232国际标准协议用串口连接线和单台设备(控制器)进行通讯的方式。

  • 电气接口:通常 RS-232 接口以9个引脚 (DB-9) 或是25个引脚 (DB-25) 的型态出现,一般个人计算机上会有两组 RS-232 接口,分别称为 COM1COM2
  • 通讯距离:9600波特率下建议在13米以内。
  • 通讯速率(波特率 Baud Rate):缺省常用的是 9600 bps,常见的还有 1200 2400 4800 19200 38400等。波特率越大,传输速度越快,但稳定的传输距离越短,抗干扰能力越差。传输速率较低,在异步传输时,波特率为20Kbps。
  • 电平特性:传输电平信号接口的信号电平值较高(信号1-3V至-15V,信号03至15V),易损坏接口电路的芯片,又因为与TTL电平(0~<0.8v,1~2.0V)不兼容故需使用电平转换电路方能与TTL电路连接。另外抗干扰能力差。
  • 抗干扰性:接口使用一根信号线和一根信号返回线而构成共地的传输形式, 这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。
  • 多点通讯RS232接口在总线上只允许连接1个收发器,不能支持多站收发能力,所以只能点对点通信,不支持多点通讯。

3.2 RS485通信接口(半双工通信)

  RS485通讯RS-232一样,都是串行通信标准,现在的标准名称是TIA485/EIA-485-A,但是人们会习惯称为RS-485标准,RS-485常用在工业、自动化、汽车和建筑物管理等领域。RS-485总线弥补了RS-232通信距离短,速率低的缺点,RS-485的速率可高达10Mbit/s,理论通讯距离可达1200米;RS-485和RS-232的单端传输不一样,是差分传输,使用一对双绞线,其中一根线定义为A,另一个定义为B

  • 电气接口:通常 RS-485 接口以9个引脚 (DB-9) 或是25个引脚 (DB-25) 的型态出现。
  • 通讯距离RS485最大无线传输距离为1200米。最大传输速率为10Mbps,在100Kb/S的传输速率下,才可以达到最大的通信距离。采用阻抗匹配、低衰减的专用电缆可以达到1800米!超过1200米,可加中继器(最多8只),这样传输距离接近10Km。
  • 通讯速率(波特率 Baud Rate):缺省常用的是 9600 bps,常见的还有 1200 2400 4800 19200 38400等。波特率越大,传输速度越快,但稳定的传输距离越短,抗干扰能力越差。传输速率较低,在异步传输时,波特率为20Kbps。
  • 电平特性:传输差分信号逻辑1以两线间的电压差为+(2—6) V表示;逻辑0以两线间的电压差为-(2—6)V表示。接口信号电平比RS-232降低了,就不易损坏接口电路的芯片,且该电平与TTL电平兼容,可方便与TTL电路连接。
  • 抗干扰性:接口使用一根信号线和一根信号返回线而构成共地的传输形式, 这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。
  • 多点通信:RS485接口在总线上是允许连接多达128个收发器。即具有多站通讯能力,这样用户可以利用单一的RS485接口方便地建立起设备网络。
      补充:共模传输和差模传输:
    在这里插入图片描述
      采用共模传输方式时,共模噪声将会叠加在最终的输出信号上面,污染了原始的信号。
    在这里插入图片描述
      采用差模传输方式,则源端发出的信号+与信号-相位是相反的,而对于共模噪声而言在+/-两条线上都会存在,理想情况是等幅同相的,而接收端,相当于一个减法器,有用信号由于相位相反则经过减法器仍然保留,而噪声则会被抵消。而实际电路中,则会大幅度削弱。
      由此可见,差模传输相对于共模传输方式,优势在于差模方式可以有效抵消共模干扰。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/514069.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring MVC 和 WebFlux 上传文件

WebFlux 上传文件 1. 表单上传方式1.1 Spring MVC1.2 Spring WebFlux 2. 二进制流2.1 Spring MVC2.2 Spring WebFlux 开发环境&#xff1a;jdk 11 WebFlux&#xff1a;jdk 8 1. 表单上传方式 1.1 Spring MVC multipart大小限制 spring:servlet:multipart:max-file-size: 512…

IS220PPRFH1B输电线路的先导继电器保护

​ IS220PPRFH1B输电线路的先导继电器保护 导引线差动继电器是专为保护配电线路和输电线路而设计的高速继电器&#xff0c;主要用于40公里以内的短线路。它是开关设备继电器中速度最快的功率继电器&#xff0c;该方案的工作需要通信通道&#xff0c;以便它可以将系统电压和电流…

2023.05.11-使用纯CPU来运行RWKV大语言模型

1. 简介 使用CPU来运行C版本的RWKV rwkv.cpp 可以将 RWKV 原始模型的参数转化为 float16&#xff0c;并量化到 int4&#xff0c;可以在 CPU 上更快地运行&#xff0c;也可以节省更多的内存。 2. 下载项目 ## git clone --recursive https://github.com/saharNooby/rwkv.cpp…

PostgreSQL11 | 视图

上一篇讲了索引&#xff0c;索引提高了表查询的速度&#xff0c;这一篇讲视图。 视图 视图&#xff0c;数据库中的一个虚拟表。 目录 视图 视图概述 前期准备 创建视图 单表视图 多表视图 查询视图 删除视图 视图概述 视图同真实表一样具有表的功能&#xff0c;但是…

spring事务失效的12种场景

前言 对于从事java开发工作的同学来说&#xff0c;spring的事务肯定再熟悉不过了。 在某些业务场景下&#xff0c;如果一个请求中&#xff0c;需要同时写入多张表的数据。为了保证操作的原子性&#xff08;要么同时成功&#xff0c;要么同时失败&#xff09;&#xff0c;避免…

H. Binary Craziness

题目链接 2023 Hubei Provincial Collegiate Programming Contest Examples input 6 6 1 3 2 3 1 4 2 5 3 6 4 6 output 30 input 6 4 1 2 3 5 2 4 3 6 output 0 题目大意&#xff1a; 给出结点个数 n n n和边的个数 m m m 下面依此给出 m m m个边&#xff0c;边是无向的&am…

Linux三种网络模式 | 仅主机、桥接、NAT

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; Linux三种网络模式 仅主机模式&#xff1a;虚拟机只能访问物理机&#xff0c;不能上网 桥接模式&#xff1a;虚拟机和物理机连接同一网络&#xff0c;虚拟机和物理机…

字典核心底层原理

字典对象的核心是散列表。散列表是一个稀疏数组&#xff08;总是有空白元素的数组&#xff09;&#xff0c;数组的每个单元叫做bucket。每个bucket有两部分&#xff1a;一个是键对象的引用&#xff0c;一个是值对象的引用。 由于&#xff0c;所有bucket结构和大小一致&#xf…

服装厂的管理系统如何选?内行人:这4点一定要注意!

服装厂管理水平偏低&#xff0c;耗费大量时间和资金成本&#xff0c;导致利润越来越低&#xff0c;是现在很多中小服装厂普遍面临的痛点。 依靠传统的管理模式&#xff0c;口头询问生产进度&#xff0c;手写统计数量&#xff0c;很显然不适合现代工厂的管理模式&#xff0c;服装…

java开发记录V1

编辑器vscode 在vscode中安装配置springboot 下载安装jdk oracle jdk BellSoft Liberica JDK version 17 在vscode编辑器中安装相关组件Extension Pack for Java、Spring Boot Extension Pack、Spring Initializr Java Support 创建springboot项目&#xff1a;ctrlshiftp后…

【Midjourney】Midjourney 辅助工具 ① ( 自定义命令工具 | 设置描述词 | 设置风格 | 设置灯光 | 设置相机 | 设置艺术家 )

文章目录 一、Midjourney Prompt Tool 自定义命令工具1、设置描述词2、设置风格3、设置灯光4、设置相机参数5、设置艺术家参数 Midjourney 提示词命令 可以使用 辅助工具 进行生成 , 辅助工具如下 : Midjourney Prompt Tool 自定义命令工具Midjourney Prompt Generator 命令生…

软件测试踏入这三个误区,就离滚蛋不远了

误区一&#xff1a;测试都是女生&#xff0c;男生不适合 误区二&#xff1a;这个职位很简单&#xff0c;不需要很多技术含量&#xff0c;每天很闲 误区三&#xff1a;起步即巅峰&#xff0c;薪资提升空间不大&#xff0c;一线才八九千 如果你听到这样的言论&#xff0c;赶紧走…

AssetBundle加载与卸载时的内存变化

AssetBundle.LoadFromFile加载一个80MB的assetbundle会分配1MB左右的pss内存 adb分析&#xff1a;private-otherUnityProfiler分析&#xff1a;有3块 1.Other/AssetBundle/LoadingCache 2.Other/SerializedFile/archive:/CAB-e42axxxxxxx 3.NotSaved/AssetBundle/xxxxxx.ab …

陷入“产品纠结”的王振滔,与学不来波司登的奥康

文|螳螂观察 作者| 青月 曾经的一代“鞋王”奥康&#xff0c;正在走下神坛。 4月底&#xff0c;奥康国际披露了2022年的年报&#xff0c;数据显示&#xff0c;公司归母净利润亏损3.7亿元&#xff0c;同比下滑1185.93%。此外&#xff0c;公司年报还被出具了保留意见的审计报告…

Revit创建装饰纹路柱及CAD生成柱

一、Revit中如何创建装饰纹路的柱子 在罗马柱的外观中&#xff0c;很少存在圆滑的柱身&#xff0c;在Revit中&#xff0c;可以用阵列的方式&#xff0c;更快的装饰柱子。 在族样板中&#xff0c;采用拉伸的方式先创建一个柱子 采用空心拉伸为柱子绘制花纹 选择圆形工具绘制&…

C语言的数据类型

数据类型 变量和常量 常量的2种定义方式&#xff1a; 1、关键字const const 数据类型 常量名 值; 如&#xff1a;const float pi 3.14159; 2、宏定义 #define 常量名 值 PS: 这里没有"“和”;" 如&#xff1a;#define PI 3.14159 推荐用宏定义的方式定义常量。 整…

Thradlocal底层原理

java引用&#xff1a;强软弱虚 软引用空间不足时会被回收 软引用非常适合做缓存 弱引用&#xff1a;只要有垃圾回收&#xff0c;就会被回收 虚引用回不回收都拿不到 他只有一个作用&#xff0c;管理直接内存 也是只要有垃圾回收就会被回收 ThreadLocal Spring事务&#x…

【职场新人备忘录】新人职场生存指南:快速适应、持续成长和个人提升

新人职场生存指南&#xff1a;快速适应、持续成长和个人提升 引言 职场对于新人来说充满了新的挑战和机遇。作为一名新人&#xff0c;如何在职场中快速适应、获得成长和提升自己是至关重要的技能。本备忘录旨在为职场新人提供实用的职场tips&#xff0c;帮助他们在职场中取得…

Ubuntu 20.04 安装 mysql 并配置远程访问

文章目录 一、使用 apt-get 安装 mysql 服务二、初始化 mysql 数据库管理员用户密码三、配置远程访问 一、使用 apt-get 安装 mysql 服务 # 更新软件源 apt-get install update# 安装mysql服务 apt-get install mysql-server# 使用mysqladmin工具查看mysql版本 mysqladmin --v…

Set和Map学习笔记

参考链接&#xff1a;https://blog.csdn.net/weixin_43359799/article/details/123131917 Set 集合&#xff0c;存储的是value值,以对象形式存储,并且不会存储重复的值&#xff0c;可以用来数组去重。 const s new Set() [1, 2, 3, 4, 3, 2, 1].forEach(x > s.add(x)) c…