串口通信协议--UART、RS-232、RS-485、RS-422

news/2024/10/23 12:36:00/

近期学习了单片机及数电相关知识,故决定系统地学习一些通信协议。手边书本仅介绍了串口低速接口的相关协议。

串行通信
是指通过使用一条数据线(需要地线或控制线),将数据一位一位地一次传输,每一位数据占据一个固定的时间长度。
特点:抗干扰,节省数据线,但速度慢

串行通信时:数据一位一位地排列,按照时序信号控制发送与接收,发送端通过发送始终确定数据位的开始与结束,接收端需要在适当的时间间隔对数据流进行采样并解码。
分为:同步串行通信异步串行通信

同步串行通信的信息帧由同步信号字符(SYNC)、数据字符和校验字符(CRC)组成。在传输数据时需要保持发送时钟与接收时钟的严格同步,但受限于不同厂家间的同步字符不统一,使用范围小。
异步串行通信有两个重要的指标:字符帧格式和波特率。数据通常以字符或者字节为单位组成字符帧传输,字符帧被逐帧发送、接收。发送和接收时钟源彼此独立。
字符帧格式为:一位起始位,八位数据位,一位奇偶校验位,一位停止位。
数据位、奇偶校验位在不同协议中存在不同类别。


串行通信按照工作模式可以分为单工、半双工、双工。
单工 — 发送端、接收端的角色固定;
半双工(RS-485) — 既可以发送也可以接收数据,在各端口存在收发切换电子开关,一般不可以同时发生;
全双工(PS-232)— 由两根可以同时发送和接收的传输线进行通信。


通信端口的初始化
明确编码、解码方式,设置波特率等操作。
波特率:每秒钟发送的位的个数。发送设备与接收设备的波特率不同,会导致解码错误。波特率为9600bps时发送每位的时间约为0.1ms。
数据位:通信中实际数据的位数。如何选择数据位,取决于想传输数据的位数。
停止位:用于表示数据帧的发送结束及设备矫正时钟同步,典型值是1位。停止位的位数越多,不同设备时钟同步的容忍度越大。
奇偶校验位:有三种检验模式,奇校验、偶校验和无校验。奇、偶校验的思想均不是统计数据位中0\1的个数,而是出奇、偶的规律。现大多选择无校验。


RS – (Recommend Standard)
RS-232标准(DB-9)
在这里插入图片描述
一般有9个引脚,通信范围在15m以内,属于单端信号传输,存在共地噪声和不能抑制共模干扰等问题,工作时需要保证电平在±(3-15)V以内,各信号线分别代表的含义是:
CD (Carried Detect):载波侦听。表示调制解调器是否检测到了通信设备发出的载波信号。
RD (Receive Data):接收数据。表示从外部设备接收数据的信号线。
TD (Transmit Data):发送数据。表示将数据发送到外部设备的信号线。
DTR (Data Terminal Ready):数据终端就绪。表示计算机已准备好接收或发送数据。
GND (Ground):地线。连接电路的共同接地点。
DSR(Data Set Ready):数据集就绪。表示调制解调器已经启动并可以进行通信。
RTS(Ready to Send):准备好发送。表示计算机已准备好发送数据并要求外部设备做好接收准备。
CTS(Clear to Send):清除发送。表示外部设备已经准备好接收来自计算机的数据
RI(Ring Indicator):振铃指示。表示当电话线路上有来电时的信号。

RS-232的主要缺陷是:
①接口的信号电平较高,容易损坏接口电路的芯片,与TTL电路不相同;
②传输速率较低,波特率<115kbps;
③单端驱动,容易产生共模干扰,需要增加滤波器;
④传输距离有限。


RS-485标准
最高传输速率为10Mb/s,采用平衡驱动器和差分接收器的组合,抗噪声干扰性好,具有多机通信能力,传输距离达1200m(差分传输)
单端驱动与平衡驱动的区别详见度娘


RS-422标准
与RS-485几乎一样,区别在于:
RS-422有四根信号线,可以实现全双工模式;主机从机比可达32,从机之间不可通信,为点对多的双向通信;接收段需要接120Ω的终端电阻,发送端可以不接。


RS-232与RS-485的区别
唯一的区别是,RS-485有发送器的控制信号DE(Drive Enable)而RS-232不需要此信号。

RS-485不能同时接收和发送,需要切换收发。RS-232的发送信号TXD与接收信号RXD各用一根线,不会矛盾。
在进行RS-232 到RS-485的转化时,可以选择将握手信号RTS改造成DE控制信号,同时进行电平转换。在每次编写串行通信程序时,必须先置RTS有效,,当接收完信号后,置RTS无效,避免同一个总线上,多个主机同时处于发送状态的冲突。
在这里插入图片描述


UART串口
Universal Asynchronous Receiver\Transmitter,通用异步接发设备,用于支持多机通信,通过设置SCON寄存器的参数可实现。

多机通信需要多传输一个地址码(ID)。在主机传输数据前,每个从机处于待机接收的状态。主机发送数据流中包含地址码,每个从机的串口都会收到主机发出的地址码,程序会判断是否与自己的地址码相同,若相同则会开始启动程序。

在串行传输线上,每次数据流包含11位。第十位用于区分地址和数据。当单片机需要进行多机传输时,传输时包含TB8位,接收包含RB8位,当TB8=1时,表示正在传输一个地址码,含八位,可以连接256个从机。当TB8 =0 时,表示传输数据。接收端可以通过格式判断传输的地址还是数据。

在从机中,通常以串行中断的方式来对待进来的数据,若把 SCON 寄存器的 SM2 位设置成为 1时,即允许串行接口进行多从机的地址判断,在这个模式下,从机只在接收地址值 (其 RB8=1) 时才产生中断请求。

在串行中断的服务程序上,只要由 SBUF 内读回地址值,就做一个判断是否被调用。若为 YES 时则跳去执行程序设置的操作,若为 NO 时则不做任何操作,随即结束此中断服务程序并返回主程序,特定的从机先设置成 SM2,然后开始发送或者接收数据,而其他的从机并未启动传输。

在此瞬间仍然是一对一的通信,当主机在最初的发送地址阶段却是一对多的通信。

单片机的串口是 TTL 电平的,也就是 5 V,传输距离最远只有 5 m。如果想要远距离传输,还应将 TTL 电平转换为 RS-485 电平。


改日学ModBus协议。


http://www.ppmy.cn/news/541699.html

相关文章

数据库管理-第八十四期 X10M来了(20230624)

数据库管理 2023-06-24 第八十四期 X10M来了1 Intel -> AMD2 PMEM -> XRMEM3 DDR4 -> DDR54 Flash cards总结 第八十四期 X10M来了 在第四十三期的时候&#xff0c;我曾经憧憬过Exadata X10M的到来&#xff0c;Oracle于6月22日正式公布Exadata X10M系列。其实5月已经…

Stable-Diffusion-webui mac m1安装

Stable-Diffusion-webui mac m1安装 推荐下载器&#xff1a;neat download manager 安装git python 3.10 下载地址&#xff1a;https://github.com/AUTOMATIC1111/stable-diffusion-webui 我这边是通过pycharm 通过git直接拉取到本地的&#xff0c;下载的&#xff0c;最好先建…

C语言:使用指针使字符串逆序

题目&#xff1a; 链接&#xff1a;字符逆序__牛客网 来源&#xff1a;牛客网 将一个字符串str的内容颠倒过来&#xff0c;并输出。 输入描述: 输入一个字符串&#xff0c;可以有空格 输出描述: 输出逆序的字符串 示例1 输入 I am a student 输出 tneduts a ma I …

内存空间3种扩容方式(含虚拟内存)

内存空间扩容 思考&#xff1a;GTA游戏60GB&#xff0c;讲道理运行前应该把60GB数据放入内存&#xff0c;然而我的电脑只有4GB&#xff0c;但是为什么游戏可以正常运行&#xff1f; 1.覆盖技术&#xff08;单个进程&#xff09; 覆盖技术的思想&#xff1a;将程序分为多个段&am…

虚拟内存技术的实现

虚拟内存技术的实现需要建立在离散分配的内存管理方式的基础上。虚拟内存的实现有以下三种方式&#xff1a; 1. 请求分页存储管理&#xff1a;建立在分页管理之上&#xff0c;为了支持虚拟存储器功能而增加了请求调页功能和页面置换功能。请求分页是目前最常用的一种实现虚拟存…

2020-09-05:虚拟内存知道么?什么时候使用虚拟内存?虚拟内存除了扩大内存还有什么用?

福哥答案2020-09-05&#xff1a; 答案来自此链接 我们平时使用的电脑中有一个虚拟内存&#xff0c;但是大家对虚拟内存的了解不是很多&#xff0c;今天小编就大家说一说这个虚拟内存&#xff0c;让大家明白什么是虚拟内存&#xff0c;虚拟内存有什么用&#xff0c;以及虚拟内…

688-内存管理和虚拟内存讲解大全

为什么要进行内存管理&#xff1f; &#xff08;1&#xff09;仓库管理 对于仓库来说&#xff0c;如果没有合理地管理&#xff0c;随意的乱堆乱放&#xff0c;大量的空间会因为无法被充分利用而浪费&#xff0c;但如果对仓库空间进行合理的规划和分配&#xff0c;物体移走后也…

虚拟内存设置(可扩展板载内存)

一、作用和原理 1、原理&#xff1a;在硬盘上划分出一个空间模拟成内存空间来使用&#xff0c;可以使得应用程序认为拥有连续的可用的内存&#xff08;一个连续完整的地址空间&#xff09;&#xff0c;而实际上&#xff0c;虚拟内存通常是被分隔成多个物理内存碎片&#xff0c…