串口通信——串口通信的基础概念

以下内容源于朱友鹏嵌入式课程的学习与整理,如有侵权请告知删除。

参考博客

同步通信与异步通信区别_wind19的博客-CSDN博客

SPI、I2C、UART(即串口)三种串行总线详解_天糊土的博客-CSDN博客_串口总线

一、电子通信相关的概念

1、同步通信和异步通信

(1)同步通信

发送方和接收方按照同一个时钟节拍工作就叫同步通信。

同步通信中,通信双方按照统一节拍工作,所以配合很好。发送方给接收方发送信息的同时,会发送时钟信号,接收方根据发送方给它的时钟信号来安排自己的节奏。

当双方通信的频率固定(比如3ms收发一次)或者经常通信时,适合同步通信方式。

(2)异步通信

发送方和接收方按照自己的节拍工作就叫异步通信,异步通信又叫异步通知。

异步通信时,接收方不必一直在意发送方,发送方需要发送信息时,会首先给接收方一个表示信息开始的起始信号,接收方接收到起始信号后就认为后面紧跟着的就是有效信息,才会开始接收信息,直到收到发送方发过来的结束标志。

当双方通信的频率不固定时(比如有时3ms收发一次,有时3天才收发一次),适合异步通信方式。

2、电平信号和差分信号

这两个概念用来描述如何在通信线路上表达1和0。

(1)电平信号

电平信号的传输线中有一个参考电平线(一般是GND)。信号线上的信号值是由信号线电平和参考电平线的电压差决定。

(2)差分信号

差分信号的传输线中没有参考电平,所有传输线都是信号线,1和0的表达依靠信号线之间的电压差。

(3)两者区别

电平信号的2根通信线之间的电平差异容易受到干扰,传输容易失败。差分信号不容易受到干扰,因此传输质量比较稳定。现代通信一般都使用差分信号

3、并行通信和串行通信

(1)两者的概念

串行、并行主要是考虑通信线的根数,就是发送方和接收方同时可以传递的信息量的多少。

比如在电平信号下,1根参考电平线+1根信号线可以传递1位二进制(这就是串行);如果我们有3根线(2根信号线+1根参考线)就可以同时发送2位二进制(这就是并行);如果想同时发送8位二进制就需要9根线。在差分信号下,2根线(彼此差分)可以发送1位二进制(这就是串行);如果需要同时发送8位二进制,需要16根线(这就是并行)。

(2)串行的优点

串行接口一次只能发送1位二进制,而并行接口一次可以发送多位二进制,看起来并行接口似乎比串行接口要快与优秀,但实际上串行接口用得更广泛。这是因为串行通信更省信号线,而且对传输线的要求更低、成本更低。另外串行时可以通过提高通信速度来提高总体通信性能。经过这么多年发展,最终胜出的是异步、差分、串行,比如USB和网络通信。

二、串口通信的基本概念

1、串口通信的特征

串口通信的特点是:异步、电平信号、串行。

(1)异步:串口通信的发送方和接收方之间没有统一的时钟信号。

(2)电平信号:串口通信出现时间早,速率较低,传输的距离较近,所以干扰还不太明显,因此当时使用了电平信号传输,但是后期出现的传输协议都改成差分信号传输了。

(3)串行通信:串口通信每次同时只能传输1个二进制位。

2、RS232电平与TTL电平

电平信号是用信号线电平减去参考线电平得到电压差,再由这个电压差决定传输值是1还是0。但是在电平信号时多少V代表1,多少V代表0不是固定的,取决于电平标准。有两个电平标准,即RS232电平标准和TTL电平标准。

RS232电平标准中,-3V~-15V表示1;+3~+15V表示0。

TTL电平标准中,+5V表示1,0V表示0。

由此可知,RS232的电平定义比较大,适合干扰大、距离远的情况;TTL电平电压范围小,适合距离近且干扰小的情况。比如台式电脑后面的串口插座就是RS232接口的,在工业上用串口时都用这个,传输距离小于15米;TTL电平一般用在电路板内部两个芯片之间。

对编程来说,RS232电平传输还是TTL电平是没有差异的。所以电平标准对硬件工程师更有意义(把TTL电平和RS232电平混接是不可以的),而软件工程师只要略懂即可。

3、波特率

(1)波特率(bandrate),指的是串口通信的速率,也就是串口通信时每秒钟可以传输多少个二进制位。比如每秒种可以传输9600个二进制位(传输一个二进制位需要的时间是1/9600秒,也就是104us),波特率就是9600。

(2)串口通信的波特率不能随意设定,而应该选择某些特定的值,一般最常见的波特率是9600或者115200(低端单片机如51常用9600,高端单片机和嵌入式SoC一般用115200)。为什么波特率不可以随便指定呢?第一,通信双方必须事先设定相同的波特率这样才能成功通信,如果发送方和接收方按照不同的波特率通信则根本收不到,因此波特率最好是大家熟知的而非随意指定的。第二,常用的波特率经过长久发展,就形成了共识,常用就是9600或者115200。

4、起始位、数据位、奇偶校验位、停止位

串口通信时,一个通信单元由“起始位+数据位+奇偶校验位+停止位”组成。

(1)起始位

起始位表示发送方要开始发送一个通信单元。起始位的定义是串口通信标准事先指定的,是由通信线上的电平变化来反映的。

(2)数据位

数据位是一个通信单元中发送的有效信息位。数据位是本次通信真正要发送的有效数据,串口通信一次发送多少位有效数据是可以设定的(一般可选的有6、7、8、9,99%情况下我们都是选择8位数据位。因为我们一般通过串口发送的文字信息都是ASCII码编码的,而ASCII码中一个字符刚好编码为8位。)

(3)奇偶校验位

奇偶校验位是用来给数据位进行奇偶校验(把待校验的有效数据逐个位的加起来,总和为奇数奇偶校验位就为1,总和为偶数奇偶校验位就为0)的,可以在一定程度上防止位反转。

(4)停止位

停止位是发送方用来表示本通信单元结束标志的。停止位的定义是串口通信标准事先指定的,是由通信线上的电平变化来反映的。常见的有1位停止位,1.5位停止位,2位停止位等。99%情况下都是用1位停止位。

串口通信时因为是异步通信,通信双方必须约定好通信参数,这些通信参数包括:波特率、数据位、奇偶校验位、停止位(串口通信中起始位定义是唯一的,所以一般不用选择)。

5、单工通信、双工通信、半双工通信

对于通信双方A和B,如果只能A发送数据B接收数据,则叫单工通信。

对于通信双方A和B,如果同一时刻,只能由A发送数据B接收数据,或者由B发送数据A接收数据,则叫半双工通信。

对于通信双方A和B,如果同一时刻,A既可以发送数据也可以接收数据,B既可以发送数据也可以接收数据,则叫全双工通信。

三、串口通信的基本原理

1、三根通信线:Rx Tx GND

串口通信是有线通信,是通过串口线来通信的。通信线最少需要2根(GND和信号线),此时可以实现单工通信,也可以使用3根通信线(Tx、Rx、GND)来实现全双工。

一般开发板都会引出TTL电平的串口,每个串口引出3根线(Tx、Rx、GND),外观表现为插针式插座,可以用这些插座直接连接外部的TTL电平的串口设备,一般用来调试(比如海思开发板中的插针插座)。但是X210开发板没有引出TTL电平的串口。

2、收发双方事先规定好通信参数

串口通信本身不会去协商通信双方的通信参数,因此需要事先约定好通信参数,如波特率、数据位、奇偶校验位和停止位等等。任何一个关键参数设置错误都会导致通信失败,比如波特率调错了,发送方发送没问题,接收方也能接收,但是接收到的数据全是乱码。数据位、奇偶校验位、停止位也很重要,否则可能认不清数据。

3、信息以二进制流的方式在信道上传输

串口通信的发送方每隔一定时间(时间固定为1/波特率,单位是秒)将有效信息(1或者0)放到通信线上去,逐个比特位进行发送。

接收方通过定时(起始时间由读到起始位标志开始,间隔时间由波特率决定)读取通信线上的电平高低来区分内容是1还是0。依次读取数据位、奇偶校验位、停止位,停止位就表示这一个通信单元(帧)结束,然后中间是不定长短的非通信时间(发送方有可能紧接着就发送第二帧,也可能半天都不发第二帧,这就叫异步通信),然后接下来就是第二帧……

无论发送什么内容,都要事先对发送的内容进行二进制编码,然后再逐个比特位发送。串口发送的都是ASCII码编码后的字符(将各字符按照ASCII码编码成二进制),因此一般将数据位设为8位,方便一帧发送1个字符。

四、DB9接口介绍

串行通信在早期是计算机与外界通信的主要手段,当时的计算机都配置有串口,以实现和外部的通信。当时就定义了一套标准的串口规范,DB9接口就是标准接口。

DB9接口中有9根通信线,其中3根很重要,为GND、Tx、Rx,必不可少,剩余6根都是和流控有关的。我们现在一般使用串口来做调试,需要禁用流控,不然可能发生未知问题。

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

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

相关文章

MS CRM 2011 RC中的新特性(9)—全新的工作流 脚本设计模式

MS Dynamics CRM 2011中,在流程处理方面,除了以往版本中具有的工作流之外,又加入了新的内容——脚本Dialog。脚本Dialog,是同步的、需要用户输入内容的流程。当启动了脚本后,系统会弹出向导风格的对话框,用…

前端开发中那些不招人“待见”的功能

互联网上优秀的Web开发案例不胜枚举,但也有一些开发者费劲心血开发出的网站仅因为某些功能就遭到吐槽的也屡屡不鲜。这不,原文作者Scott Hanselman发表的这篇文章《Stop Doing Internet Wrong 》就例举了互联网上那些不招人“待见”的功能。当然&#xf…

串口通信——S5PV210串口通信接口详解

以下内容源于 朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 参考博客 s5pv210——串口通信 - biaohc - 博客园 一、S5PV210的串口控制器 S5PV210的串口控制器的相关内容,在用户手册的section8.1章节。 (1)串口控制器包含…

网上看到的一个百度实习生笔试题

编写函数,统计在某段英文文本完整句子的数目,文本只包括大小写英文字母,空格,点号(.),逗号(,),完整句子必须包含至少一个字母并以一个点号结束。 实现了一下,不知道可有漏…

javascript学习(11)——[设计模式]工厂模式

其实学过java的人基本都知道,工厂模式,我们是基本每天都在用,只不过工厂模式也分为几种情况:简单工厂,抽象工厂和智能工厂。 简单工厂其实,大家时时刻刻都在用,个人理解,当我们在一个…

串口通信——S5PV210串口通信的简单案例

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 参考博客:s5pv210——串口通信 - biaohc - 博客园 一、代码与测试 1、代码文件 完整的案例文件见链接。 (1)start.S文件 /* * 演示串口通信 */#define WTCON …

iOS学习系列 - 扩展机制category与associative

category与associative作为objective-c的扩展机制的两个特性,category即类型,可以通过它来扩展方法;associative,可以通过它来扩展属性;在iOS开发中,可能category比较常见,相对的associative&am…

Spring Boot JWT 快速入门

本章节讨论 jwt 在 spring boot 中的应用。意在快速入门 jwt。 java jdk1.8maven 3.2spring boot 2.0JSON Web Token(JWT) 他是一个用于 Web 身份验证的令牌。 1 JWT 概述 1.1 什么是JWT 直观的理解 JWT 就是一串字符串,如下(来自…

Flex与Java通信之HttpService方式

2019独角兽企业重金招聘Python工程师标准>>> Flex用RemoteObject方式与Java通信是最常用的方式,这是一种最直观的方式。当然Flex也可以用HttpService与服务器类如servlet通信,这也是本次学习的重点。 这次学习是在上节的基础上进行的。本节学…

常用数据验证正则表达式释义(附:正则表达式常用符号)

正则表达式,要想完全掌握,几乎是不可能的。而且,正则表达式,也并不是万能的,很多情况,并不能做倒完全的匹配。如果我们仅仅是做网站,在数据验证、简单查询的时候使用,我们只需要掌握…

中断——S5PV210的中断体系简介

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 参考博客 s5pv210的中断体系 - biaohc - 博客园 我的RTOS 之一 --S5PV210 异常向量表基址和软中断测试_liujia2100的博客-CSDN博客 从0开始学ARM-异常及中断处理、异常向量表、swi_一口Linux的技术…

模板vs定制 门店小程序该如何选择?

越来越多的门店商户已经意识到小程序在新零售里扮演的重要角色。随着需求的爆发,市场上出现了不少服务商,提供门店小程序定制开发服务。所以,商户们也面临着小程序模板与定制的多重选择。下面就和大家分享一下模板vs定制门店小程序该如何选择…

Shell的 for 循环小例子

上例子 for i in f1 f2 f3; doecho $i; done 执行结果: f1 f2 f3 但是,请注意:如果是在makefile 中写,要写成这个样子: all:for i in f1 f2 f3; do\echo $$i; \done 如果 echo $$i; 后面没有反斜线,则会出现&#xff1…

现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数...

现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数。 方法1:Hash链表 方法2:使用两个变量A和B,其中A存储某个数组中的数,B用来计数。开始时将B初始化为0。 遍历数组&am…

中断——S5PV210的中断案例

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 参考博客 s5pv210——中断 - biaohc - 博客园 S5PV210的中断体系简介_天糊土的博客-CSDN博客 一、S5PV210的中断流程 第一部分是我们为中断响应而做的预备工作。 1、初始化中断控制器 比如先关闭所…

oracle 如何查看当前用户的表空间名称

如何查询当前用户的表空间名称?因为oracle建立索引,需要知道当前用户的表空间,查找了一下资料 --查询语法--select default_tablespace from dba_users where username登录用户如,我的登录用户是TMS21,那么查询语法是 /* 查看用户…

powerdesigner15(pd)+Oracle 11g 开发小问题

这几天使用powerdesigner15(pd)Oracle 11g 做数据库,中途遇到几个问题。 虽然很快都解决了但是还是记一下吧,提醒自己,也也遇到同样问题的人以帮助。 1、问题一 在设计的时候我的文本字段设计的是 nvarchar 长度是40…

PHP多种形式发送邮件

1. 使用 mail() 函数 没什么好讲的,就是使用系统自带的smtp系统来发送,一般是使用sendmail来发。这个按照各个系统不同而定。使用参考手册。 2. 使用管道的形式 昨天刚测试成功,使用本地的qmail来发送邮件。 1 /* 使用qmail发送邮件函数 */ …

按键——S5PV210的按键简介(轮询方式+中断方式)

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 参考博客 s5pv210——按键 - biaohc - 博客园 一、按键的简介 1、按键的物理特性 按钮没有被按下时,内部是断开的。按钮被按下时,内部保持接通状态;放手后由于弹…

Platform Invoke and Marshaling Data: [1/3]

Moved to http://blog.tangcs.com/2008/06/15/pinvoke-and-marshaling-data-1/转载于:https://www.cnblogs.com/WarrenTang/archive/2008/06/15/1222750.html