单片机串行通信全解析

1.什么是串行通信?

串行通信(英语:Serial communication)是指在计算机总线或其他数据通道上,每次传输一个位元数据,并连续进行以上单次过程的通信方式。与之对应的是并行通信,它在串行端口上通过一次同时传输若干位元数据的方式进行通信。

简言之:串行通讯就是排成一队走,并行就是排成一列走,如下图

2.同步串行通信(Synchronous serial communication)和异步串行通信(Asynchronous serial communication)

1)发送端在发送串行数据的同时,提供一个时钟信号,并按照一定的约定(例如在时钟信号的上升沿的时候,将数据发送出去)发送数据,接收端根据发送端提供的时钟信号,以及大家的约定,接收数据。这就是常说的同步串行通信(Synchronous serial communication),I2C、SPI等有时钟信号的协议,都属于这种通信方式。
2)发送端在数据发送之前和之后,通过特定形式的信号(例如START信号和STOP信号),告诉接收端,可以开始(或者停止)接收数据了。与此同时,收发两方会约定一个数据发送的速度(就是大名鼎鼎的波特率),发送端在发送START信号之后,就按照固定的节奏发送串行数据,与此同时,接收端在收到START信号之后,也按照固定的节奏接收串行数据。这就是常说的异步串行通信(Asynchronous serial communication)。

3.单片机上常用的串行通讯接口

  • SPI:高速同步串行口。3~4线接口,收发独立、可同步进行串行外围设备接口,是Motorola公司推出的一种同步串行通讯方式,是一种三线同步总线,因其硬件功能很强,与SPI有关的软件就相当简单,使CPU有更多的时间处理其他事务。SPI通常有SCK时钟,STB片选,DATA数据信号三个信号。 I2C通常有 SDA数据和SCL时钟两个信号。SPI总线真正实现了全双工数据传输,SPI 有3线跟4线两种,4线的话,就是多了一条叫SDC的线,用来告知从设备现在传输的是数据还是指令。这个接口较快,可以传输较连续的数据。SPI的速度要大于IIC,一般用在产品内部元件之间的高速数据通信上面,如大容量存储器等。
  • UART:通用异步串行口,一般我们说的单片机上的“串口”大多是特指UART。可以全双工通信,线数也比较少。数据是异步传输的,对双方的时序要求比较严格,通信速度也不是很快。在多机(单片机与单片机之间)通信上面用的最多。
  • IIC:一种串行传输方式,三线制,网上可找到其通信协议和用法的,IIC 接口的协议里面包括设备地址信息,可以同一总线上连接多个从设备,通过应答来互通数据及命令。但是传输速率有限,标准模式下可达到100Kbps,快速模式下可达到400Kbps,高速模式下达到Mbps,不能实现全双工,不适合传输很多的数据。
  • USB:这个肯定是很熟悉的了,几乎每天都打交道。通用串行总线(英语:Universal Serial Bus,缩写:USB)是连接计算机系统与外部设备的一种串口总线标准,也是一种输入输出接口的技术规范,被广泛地应用于个人电脑和移动设备等信息通讯产品,并扩展至摄影器材、数字电视(机顶盒)、游戏机等其它相关领域。很多单片机上也带有USB接口例如ST的STM32。

以上各种接口的通讯协议是不一样的,如UART最简单的协议是一个起始位一个终止位中间八个数据位,而USB的话通讯协议就复杂的多的多。

4.串行接口电气标准。

TTL电平:TTL电平指的是低电平为0,高电平为1(+5V电平),大多数的单片机自带的串口用的就是这种电平。一般用于芯片之间通信,TTL电平通信距离较短。

UART使用的是单片机自带的电平,单片机是什么电平标准那么该单片机上的UART就是什么电平标准,例如51单片机的UART就是用的TTL电平。而这种电平是没办法用于远程数据传输的,为了能让串行数据能够传输的更远,我们需要更加强大的传输标准,于是就有了RS-232、RS-422、RS485等。

  • RS-232-C
也称标准串口,是目前最常用的一种串行通讯接口。它是在1970年由美国电子工业协会(EIA)联合贝尔系统、 调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”。传统的RS-232-C接口标准有22根线,采用标准25芯D型插头座。自IBM PC/AT开始使用简化了的9芯D型插座。至今25芯插头座现代应用中已经很少采用。电脑一般有两个串行口:COM1和COM2,9针D形接口通常在计算机后面能看到。现在有很多手机数据线或者物流接收器都采用COM口与计算机相连。
  • RS-422
为改进RS-232通信距离短、速率低的缺点,RS-422定义了一种平衡通信接口,将传输速率提高到10Mb/s,传输距离延长到4000英尺(速率低于100kb/s时),并允许在一条平衡总线上连接最多10个接收器。RS- 422是一种单机发送、多机接收的单向、平衡传输规范,被命名为TIA/EIA-422-A标准。
  • RS-485
为扩展应用范围,EIA又于1983年在RS-422基础上制定了RS-485 标准,增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了总线共模范围,后命名为 TIA/EIA-485-A标准。

下图是一般传输过程:单片机匹配电平到RS-232,通过RS-232传输,再从RS-232匹配到TTL再给另一个单片机。

 

5.其他

各种串行通讯是可以相互转换的,如下图中我们最经常使用的CH340芯片就能够把USB转成TTL电平的UART串口通讯

 

 

参考资料:

【1】http://blog.sina.com.cn/s/blog_62dd0b350100qyey.html

【2】http://www.cnblogs.com/lucky-apple/archive/2008/07/03/1234581.html

【3】http://www.wowotech.net/basic_tech/serial_intro.html

【4】http://www.ing10bbs.com/forum.php?mod=viewthread&tid=437

 

转载于:https://www.cnblogs.com/feipeng8848/p/6877089.html

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

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

相关文章

java type 类型,java中的泛型类型与Type接口

假设我们定义了一个Room的类,表示一个房间public classRoom(){}由于我们建造好房间是,不知道房间以后的用途,他可能用来住人,也有可能用来放货物,因此需要用到泛型。但是我们可能想获取Room这个房间里面进来的的东西的…

centos7下操作防火墙

引言 最近使用centos7系统比较频繁,在配置服务器的时候,总是遇到能够ping通服务器,但是就是没有办法访问80端口,这个时候我的直觉告诉我,肯定是防火墙的原因,但是使用iptables却怎么都找不到命令&#xff0…

其他团队对本团队评价的总结

我们小组在看了其他小组的评价后,对自己的程序有了新的看法。转载于:https://www.cnblogs.com/bk1246788/p/6879691.html

Java:使用Fork / Join框架的Mergesort

此项的目的是显示一个Fork / Join RecursiveAction的简单示例,而不是过多地研究合并合并的可能优化方法,或者比使用Exkutor / Join Pool优于现有的基于Java 6的现有实现(例如ExecutorService)的相对优势。 以下是使用Java的自上而…

php的异常处理方式,php异常处理基本方法

当一个php脚本运行时,为了防止脚本运行崩溃,亦或是当php作为webserver,为了防止php程序出错,抛出httpcode500错误,我们常常需要对php程序做异常处理。今天介绍的是最基本的异常处理方法:一般而言&#xff0…

关系型数据库的三范式

第一范式:确保每列的原子性. 如果每列(或者每个属性)都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式. 例如:顾客表(姓名、编号、地址、……)其中"地址"列还可以细分为国家、省、市、区等。第二范式:在第一范式的基础上更进一层,目标是确保表…

vray学习笔记(3)-多维子材质是个什么东西

多维子材质是个什么东西?为什么出现这个概念? 在3dsmax官方网站,我们可以看到它的定义: The Multi/Sub-Object material lets you assign different materials at the sub-object level of your geometry. 意思是多维子材质这个概…

Hello JavaFX 2.0:命令行介绍

我从博客文章Hello JavaFX 2.0:NetBeans 7.1 beta的介绍中,从NetBeans 7.1 beta的角度看了一个无处不在的Hello World示例的简单JavaFX版本。 在本文中,我将介绍仅使用命令行工具通过JavaFX实现的Hello World版本。 JavaFX 2.0 API文档包括ja…

matlab空格会消失了,如何在Matlab中自动删除保存的尾随空格?

我有同样的需求,并写了一个小脚本来做一些接近的事情.将以下内容放在MATLAB desktop shortcut中.每当您单击快捷方式按钮时,它将从编辑器中的活动文件中删除尾随空格.不如在保存时自动执行它 – 你需要记住在保存之前按下按钮 – 但差不多.测试在11b,12a和13b,但在12b也应该没问…

object to 字符串json

1 package com.beijxing.TestMain;2 3 import com.beijxing.entity.Student;4 import com.google.gson.Gson;5 import com.google.gson.annotations.SerializedName;6 7 /** 8 * 9 * author 作者 : ywp 10 * version 创建时间:2016年10月30日 下午9:21:33 11 */ 12…

JS 对象(Object)和字符串(String)互转

var jsObj {}; jsObj.testArray [1,2,3,4,5]; jsObj.name CSS3; jsObj.date 8 May, 2011; var str JSON.stringify(jsObj); var str1 JSON.parse(str); var str2 JSON.stringify(str1);alert(str);alert(str1); alert(str2);对象拷贝:var newObj JSON…

php 后退按钮事件,php – 后退按钮的会话问题

我在php文件中有这个代码,它包含在我要共享的所有页面中并保护我的页面.session_name("login");session_start();if (!isset($_SESSION[UserId])) {if(!header("Location: https://subdomain.mywebsite.com/")){ die("Unauthorized access"); }}…

异常:java lang AbstractMethodError

通常在尝试调用抽象方法时抛出此java.lang.AbstractMethodError。通常,此错误是在编译时本身识别的,如果在运行时抛出此错误,则该类必须不兼容(与先前存在的类不兼容) )更改。因此,它是Incompat…

05.while循环的练习

练习1:namespace _05.while循环练习01{ class Program { static void Main(string[] args) { //打印100次"努力学习.net技术" int i 0; while (i < 100) //当i小于100就执行循环体的内容 { Console.WriteLine("{0}.努力学习.net技术",i); i; } Console…

oracle列分区,Oracle数据库分区--实例

分区表通过对分区列进行判断&#xff0c;把满足不同条件的分区列对应的记录保存在不同的分区中。一、何为分区表什么情况下会使用分区表&#xff1f;表中已有大量数据&#xff0c;或预计到表中将会保存大量的数据可以按照预期(月份、区域、dml)对表中的数据执行查询和更新什么是…

ZK实际应用:MVVM –与ZK客户端API一起使用

在之前的文章中&#xff0c;我们使用ZK的MVVM实现了以下功能&#xff1a; 将数据加载到表中 使用表单绑定保存数据 删除条目并以编程方式更新视图 ZK MVVM和ZK MVC实现方式之间的主要区别是&#xff0c;我们不直接在controller&#xff08;ViewModel&#xff09;类中访问和操…

RPC框架Dubbo分析

1&#xff0c;背景随着互联网的发展&#xff0c;网站应用的规模不断扩大&#xff0c;常规的垂直应用架构已无法应对&#xff0c;分布式服务架构以及流动计算架构势在必行&#xff0c;亟需一个治理系统确保架构有条不紊的演进单一应用架构当网站流量很小时&#xff0c;只需一个应…

定时器、计时器。

//第一种 每一秒执行一次&#xff08;重复性&#xff09;double delayInSeconds 1.0;timer dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0));dispatch_source_set_timer(timer, DISPATCH_TIME_NO…

mybatis oracle trim,Mybatis trim标签

trim代替where/set标签trim是更灵活用来去处多余关键字的标签&#xff0c;它可以用来实现where和set的效果。SELECT *FROM user uu.username LIKE CONCAT(CONCAT(%, #{username, jdbcTypeVARCHAR}),%)AND u.sex #{sex, jdbcTypeINTEGER}AND u.birthday #{birthday, jdbcTypeD…

自己初学时的随笔记录

如果富文本编辑器 jsp....文件可以找到但是就是显示不出来&#xff0c;可能是Controller控制器中RequestMapping后边没有写路径 ---------------------------------------------------------------------------------------------------------------------------- iframe框架内…