近期学习了单片机及数电相关知识,故决定系统地学习一些通信协议。手边书本仅介绍了串口低速接口的相关协议。
串行通信
是指通过使用一条数据线(需要地线或控制线),将数据一位一位地一次传输,每一位数据占据一个固定的时间长度。
特点:抗干扰,节省数据线,但速度慢
串行通信时:数据一位一位地排列,按照时序信号控制发送与接收,发送端通过发送始终确定数据位的开始与结束,接收端需要在适当的时间间隔对数据流进行采样并解码。
分为:同步串行通信与异步串行通信
同步串行通信的信息帧由同步信号字符(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.dgrt.cn/a/2175363.html
如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!
相关文章:
串口通信协议–UART、RS-232、RS-485、RS-422
近期学习了单片机及数电相关知识,故决定系统地学习一些通信协议。手边书本仅介绍了串口低速接口的相关协议。
串行通信 是指通过使用一条数据线(需要地线或控制线),将数据一位一位地一次传输,每一位数据占据一个固定的……
【Ruby学习笔记】10.Ruby 数组(Array)
Ruby 数组(Array)
Ruby 数组是任何对象的有序整数索引集合。数组中的每个元素都与一个索引相关,并可通过索引进行获取。
数组的索引从 0 开始,这与 C 或 Java 中一样。一个负数的索相对于数组的末尾计数的,也就是说&……
Vue中的props详解
最基础和最常用的用法:
子组件中: App.vue主组件中: const player1 reactive({name: "梅西",img: "/images/flowers.png",rate: 1,hot: 433760})const player2 reactive({name: "梅西",img: "/images/……
记录学习MySQL相关操作
(1).查看MySQL服务器下所有数据库 SHOW DATABASES; (2) 创建数据库 CREATE DATABASE [IF NOT EXISTS] 数据库名称[库选项]; (3)选择数据库 USE 数据库名称;
(4),删除数据库 DROP DATABASE [IF EXISTS] 数据库名称;
(5) . 当前表进行升序 select * from studen……
【BIM入门实战】Revit安装失败的常见问题及解决办法汇总
本文总结一下Win7-Win11系统之上,Revit安装失败的常见问题及解决办法,期望能帮到大家。 文章目录 1. Revit2018安装完成,某些产品无法安装2. Revit打开启动时候闪退完美解决3. 软件安装的路径问题4. 电脑系统版本问题1. Revit2018安装完成,某些产品无法安装
查看安装日志,……
STM32F4_时钟系统精讲
目录
1. 什么是系统时钟
2. 时钟树
2.1 LSI
2.2 LSE
2.3 HSI
2.4 HSE
2.5 PLLCLK
2.6 SYSCLK
2.7 HCLK
2.8 PCLK1
2.9 PCLK2
2.10 RTC/AWU
3 SysTick定时器
3.1 为什么会有Systick定时器?
3.2 SysTick定时器的作用
3.3 SysTick定时器的寄存器
4.……
如何使用Git(大型项目必用)
一:Git是目前世界上最先进的分布式版本控制系统。 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务……
Spring mvc 数据绑定
1 RequestParam 参考这个链接
https://blog.csdn.net/a447332241/article/details/76714148?utm_mediumdistribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_sourcedistribute.pc_relevant.none-task-blog-BlogCommendFr……
java泛型以及 通配符 的应用
一.泛型的概念 二通配符…
Spring AOP (面试必问)
Spring aop 概念 Spring AOP 切点表达式 <aop:aspect ref"aopAdvice"><!–配置通知的类型:前置操作,并且建立通知的方法和切入点方法的关联的方法和切入点方法的关联 –><aop:before method"before" pointcut-ref&qu……
【Linux基础】常用命令整理
ls命令
-a选项,可以展示隐藏的文件和文件夹-l选项,以列表形式展示内容-h,需要和-l搭配使用,可以展示文件的大小单位ls -lah等同于la -a -l -h
cd命令(change directory)
语法:cd [Linux路径]……
客快物流大数据项目(一百一十二):初识Spring Cloud
文章目录
初识Spring Cloud
一、Spring Cloud简介
二、SpringCloud 基础架构图…
C和C++中的struct有什么区别
区别一: C语言中: Struct是用户自定义数据类型(UDT)。 C语言中: Struct是抽象数据类型(ADT),支持成员函数的定义。
区别二:
C中的struct是没有权限设置的,……
docker的数据卷详解
数据卷 数据卷是宿主机中的一个目录或文件,当容器目录和数据卷目录绑定后,对方修改会立即同步
一个数据卷可以同时被多个容器同时挂载,一个容器也可以被挂载多个数据卷
数据卷作用:容器数据持久化 /外部机器和容器间接通信 /容器……
13、Qt生成dll-QLibrary方式使用
Qt创建dll,使用QLibrary类方式调用dll
一、创建项目
1、新建项目->其他项目->Empty qmake Project->Choose 2、输入项目名,选择项目位置,下一步 3、选择MinGW,下一步 4、完成 5、.pro中添加TEMPLATE subdirsÿ……
基于mapreduce 的 minHash 矩阵压缩
Minhash作用: 对大矩阵进行降维处理,在进行计算俩个用户之间的相似度。
比如: 俩个用户手机下载的APP的相似度,在一个矩阵中会有很多很多的用户要比较没俩个用户之间的相似度是一个很大的计算任务 如果首先对这个矩阵降维处理&am……
关于hashmap使用迭代器的问题
keySet获得的只是key值的集合,valueSet获得的是value集合,entryset获得的是键值对的集合。 package com.test2.test;import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;public class mapiterator……
Hadoop入口FileSystem HDFS操作 本地文件合并到HDFS和HDFS文件合并
Hadoop 文件API的起点是FileSystem类。这是一个与文件系统交互的抽象类。存在不同的具体实现子类来处理HDFS和本地文件系统。
HDFS接口的FileSystem对象:
Configuration conf new Configuration();
FileSystem hdfs FileSystem.get(conf); HDFS直接操作&#x……
combiner partitioner
combine是在map端进行的,是在patition之后 partitioner也是在map端进行的 combine 适用在每个map端进行简单的合并,同样也是继承Reduce类。…
toString.indexOf(:)和subsTring
package com.test2.test;public class subStirngTest {public static void main(String[] args) {String sb"abcdefgh";String sc"abcd:efgh";int splitIndexsc.indexOf(":");//找到标识符的位置System.out.println(splitIndex);sb.substring(1)……
编程日记2023/4/16 14:50:35