RS232串口通信详解
串口是计算机上一种非常通用的设备通信协议。
---------------------------------
串口的引脚定义:
| 9芯 | 信号方向来自 | 缩写 | 描述 |
| 1 | 调制解调器 | CD | 载波检测 |
| 2 | 调制解调器 | RXD | 接收数据 |
| 3 | PC | TXD | 发送数据 |
| 4 | PC | DTR | 数据终端准备好 |
| 5 | GND | 信号地 | |
| 6 | 调制解调器 | DSR | 通讯设备准备好 |
| 7 | PC | RTS | 请求发送 |
| 8 | 调制解调器 | CTS | 允许发送 |
| 9 | 调制解调器 | RI | 响铃指示器 |
两个串口连接时,接收数据针脚与发送数据针脚相连,彼此交叉,信号地对应相接即可。
---------------------------------
串口的电气特性:
1)RS-232串口通信最远距离是50英尺=15m
2)RS232可做到双向传输,全双工通讯,最高传输速率20kbps
3)RS-232C上传送的数字量采用负逻辑,且与地对称
逻辑1:-3 ~-15V
逻辑0:+3~+15V
所以与单片机连接时常常需要加入电平转换芯片:
---------------------------------
串口通信参数:
a)波特率:RS-232-C标准规定的数据传输速率为每秒50、75、 100、150、300、600、1200、2400、4800、9600、19200波特。
b)数据位:标准的值是5、7和8位,如何设置取决于你想传送的信息。比如,标准的ASCII码是0~127(7位);扩展的ASCII码是0~255(8位)。
c)停止位:用于表示单个包的最后一位,典型的值为1,1.5和2位。由于数是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。
d)奇偶校验位:在串口通信中一种简单的检错方式。对于偶和奇校验的情况,串口会设置校验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验,校验位为0,保证逻辑高的位数是偶数个。如果是奇校验,校验位位1,这样就有3个逻辑高位。
---------------------------------
串口通信的传输格式:
串行通信中,线路空闲时,线路的TTL电平总是高,经反向RS232的电平总是低。一个数据的开始RS232线路为高电平,结束时Rs232为低电平。数据总是从低位向高位一位一位的传输。示波器读数时,左边是数据的高位。
例如,对于16进制数据55aaH,当采用8位数据位、1位停止位传输时,它在信号线上的波形如图1(TTL电平)和图2(RS-232电平)所示。
55H=01010101B,取反后10101010B,加入一个起始位1,一个停止位0,55H的数据格式为0101010101,55HaaH=10101010B,取反后01010101B,加入一个起始位1,一个停止位0,55H的数据格式为0010101011,aaH

---------------------------------
串口通信的接收过程:
(异步通信:接收器和发送器有各自的时钟;同步通信:发送器和接收器由同一个时钟源控制。RS232是异步通信)
(1)开始通信时,信号线为空闲(逻辑1),当检测到由1到0的跳变时,开始对“接收时钟”计数。
(2)当计到8个时钟时,对输入信号进行检测,若仍为低电平,则确认这是“起始位”,而不是干扰信号。
(3)接收端检测到起始位后,隔16个接收时钟,对输入信号检测一次,把对应的值作为D0位数据。若为逻辑1, 作为数据位1;若为逻辑0,作为数据位0。
(4)再隔16个接收时钟,对输入信号检测一次,把对应的值作为D1位数据。….,直到全部数据位都输入。
(5)检测校验位P(如果有的话)。
(6)接收到规定的数据位个数和校验位后,通信接口电路希望收到停止位S(逻辑1),若此时未收到逻辑1,说明出现了错误,在状态寄存器中置“帧错误”标志。若没有错误,对全部数据位进行奇偶校验,无校验错时,把数据位从移位寄存器中送数据输入寄存器。若校验错,在状态寄存器中置奇偶错标志。
(7)本幀信息全部接收完,把线路上出现的高电平作为空闲位。
(8)当信号再次变为低时,开始进入下一幀的检测。
---------------------------------
单片机常用11.0592M的的晶振,这个奇怪数字是有来历的:
波特率为9600BPS每位位宽t1=1/9600s
晶振周期t2=1/11.0592/1000000S
单片机机器周期t3=12*t2
t1/t3=96
即对于9600BPS的串口,单片机对其以96倍的速率进行采样。
如果单片机晶振用的不正确,会对串口接受产生误码。
---------------------------------
RS485和RS422
RS485总线,在要求通信距离为几十米到上千米时,广泛采用RS-485 串行总线标准。RS485采用平衡发送和差分接收,因此具有抑制共模干扰的能力。加上总线收发器具有高灵敏度,能检测低至200mV的电压,故传输信号能在千米以外得到恢复。RS485采用半双工工作方式,任何时候只能有一点处于发送状态,因此,发送电路须由使能信号加以控制。RS485用于多点互连时非常方便,可以省掉许多信号线。应用RS485可以联网构成分布式系统,其允许最多并联32台驱动器和32台接收器。
RS422总线,RS485和RS422电路原理基本相同,都是以差动方式发送和接受,不需要数字地线。差动工作是同速率条件下传输距离远的根本原因,这正是二者与RS232的根本区别,因为RS232是单端输入输出,双工工作时至少需要数字地线发送线和接受线三条线(异步传输),还可以加其它控制线完成同步等功能。RS422通过两对双绞线可以全双工工作收发互不影响,而RS485只能半双工工作,发收不能同时进行,但它只需要一对双绞线。RS422和RS485在19kpbs下能传输1200米。用新型收发器线路上可连接台设备。
三者的区别
① RS232是全双工的,RS485是半双工的,RS422是全双工的。
② RS485与RS232仅仅是通讯的物理协议(即接口标准)有区别,RS485是差分传输方式,RS232是单端传输方式,但通讯程序没有太多的差别。 PC机上已经配备有RS232,直接使用就行了,若使用RS485通讯,只要在RS232端口上配接一个RS232转RS485的转换头就可以了,不需要修改程序。
RS232串口通信详解的更多相关文章
- Java串口通信详解
http://blog.csdn.net/kabini/article/details/1601324 ———————————————————————————————————————————————— ...
- Linux串口编程详解(转)
串口本身,标准和硬件 † 串口是计算机上的串行通讯的物理接口.计算机历史上,串口曾经被广泛用于连接计算机和终端设备和各种外部设备.虽然以太网接口和USB接口也是以一个串行流进行数据传送的,但是串口连接 ...
- Android中实现java与PHP服务器(基于新浪云免费云平台)http通信详解
Android中实现java与PHP服务器(基于新浪云免费云平台)http通信详解 (本文转自: http://blog.csdn.net/yinhaide/article/details/44756 ...
- Android Socket通信详解
一.Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客 ...
- SSL握手通信详解及linux下c/c++ SSL Socket代码举例
SSL握手通信详解及linux下c/c++ SSL Socket代码举例 摘自:http://www.169it.com/article/3215130236.html 分享到:8 发布时 ...
- SSL握手通信详解及linux下c/c++ SSL Socket代码举例(另附SSL双向认证客户端代码)
SSL握手通信详解及linux下c/c++ SSL Socket代码举例(另附SSL双向认证客户端代码) 摘自: https://blog.csdn.net/sjin_1314/article/det ...
- 开源项目SMSS发开指南(五)——SSL/TLS加密通信详解(下)
继上一篇介绍如何在多种语言之间使用SSL加密通信,今天我们关注Java端的证书创建以及支持SSL的NioSocket服务端开发.完整源码 一.创建keystore文件 网上大多数是通过jdk命令创建秘 ...
- STM32—串口通讯详解
串口通讯目录 物理层 协议层 USART简介 开发板与上位机的连接 代码讲解: 一.初始化结构体 二.NVIC配置中断优先级 三.USART配置函数讲解 四.传输数据的函数: 1.发送一个字节 2.发 ...
- java网络编程Socket通信详解
Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术. ...
随机推荐
- 吴裕雄--天生自然MySQL学习笔记:MySQL 复制表
如果需要完全的复制MySQL的数据表,包括表的结构,索引,默认值等. 如果仅仅使用CREATE TABLE ... SELECT 命令,是无法实现的. 如何完整的复制MySQL数据表,步骤如下: 使用 ...
- [极客大挑战 2019]Http
0x00知识点 了解HTTP协议,使用bp伪造. 0x01 解题 首先查看源代码,找到Secret.php 访问 使用bp查看 提示我们需要来自该网址,直接改header头信息即可,我们可以通过使用r ...
- 使用java(jdbc)向mysql中添加数据时出现“unknown column……”错误
错误情况如题,出现这个错误的原因是这样的: 在数据库中,插入一个字符串数据的时候是需要用单引号引起来的. 而下面的代码,注意看: sta.executeUpdate("INSERT INTO ...
- Bug(1)
程序要求:内网之间客户端截屏(.bmp)并传送给服务端. server: #include <winsock2.h> // 为了使用Winsock API函数 #include <s ...
- Java开学测试感想
开学第一堂课就是测试,测试暑假的自学成果,老师说试卷适当提高了难度,所以允许查书和使用网络查询,经过近三个钟头的努力奋斗和痛苦挣扎,我只完成了一小部分的代码,只有简单的set()get()函数,以及简 ...
- 静态页面缓存(thymeleaf模板writer)
//前端html <!DOCTYPE html><html lang="en"> <head> <meta charset="U ...
- storm 机制
storm基础系列之二----zookeeper的作用 https://www.cnblogs.com/xyang/p/5643745.html Zookeeper+Storm集群搭建 https:/ ...
- C# 基础Array
一.Array的作用 连续定义多个相同类型的变量,比如我定义1000个学生的学生年龄,int[] age = new int[1000];不需要慢慢的一个一个变量的定义,数组是不是很方便. 需要注意的 ...
- PAT Advanced 1070 Mooncake (25) [贪⼼算法]
题目 Mooncake is a Chinese bakery product traditionally eaten during the Mid-Autumn Festival. Many typ ...
- Python重学记录2
这几天学的不多,只是看了一下相关的视频.最近看的部分比较难,装饰器没有搞懂,__slots__和property也不太明白(这两个知识点是在公交车上看的视频,因为1.5倍速度放的视频,看得快,不太明白 ...