最详尽的——解析串口通信数据
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
--------------------------------RS485 和 RS422 RS485 总线,在要求通信距离为几十米到上千米时,广泛采用 RS-485 串行总线标准。RS485 采 用平衡发送和差分接收,因此具有抑制共模干扰的能力。加上总线收发器具有高灵敏度,能 检测低至 200mV 的电压,故传输信号能在千米以外得到恢复。RS485 采用半双工工作方式, 任何时候只能有一点处于发送状态,因此,发送电路须由使能信号加以控制。RS485 用于多 点互连时非常方便,可以省掉许多信号线。应用 RS485 可以联网构成分布式系统,其允许最 多并联 32 台驱动器和 32 台接收器。
3
PC
TXD
发送数据
4
PC
DTR
数据终端准备好
5
GND
信号地
6
调制解调器 DSR
通讯设备准备好
7
PC
RTS
请求发送
8
调制解调器 CTS
允许发送
9
调制解调器 RI
响铃指示器
两个串口连接时,接收数据针脚与发送数据针脚相连,彼此交叉,信号地对应相接即可。
--------------------------------串口的电气特性: 1)RS-232 串口通信最远距离是 50 英尺 2)RS232 可做到双向传输,全双工通讯,最高传输速率 20kbps 3)RS-232C 上传送的数字量采用负逻辑,且与地对称 逻辑 1:-3 ~-15V
解析串口通信数据格式
DB-9 针连接头(从计算机连出的线的截面,公头)。 ------------\12345/ \6789/ ----------RS-232 针脚的功能:(红色的线是常用的)
数据: TXD(pin 3):串口数据输出 RXD(pin 2):串口数据输入 握手: RTS(pin 7):发送数据请求 CTS(pin 8):清除发送 DSR(pin 6):数据发送就绪 DCD(pin 1):数据载波检测 DTR(pin 4):数据终端就绪 地线: GND(pin 5):地线 其他 RI(pin 9):铃声指示 典型地,串口用于 ASCII 码字符的传输。通信使用 3 根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数 据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口, 这些参数必须匹配: a,波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的 bit 的个数。例如 300 波特表示每秒钟发送 300 个 bit。当我们提到时钟周期时,我们就是指 波特率例如如果协议需要 4800 波特率,那么时钟是 4800Hz。这意味着串口通信在数据线上的采样率为 4800Hz。通常电话线的波特率为 14400,28800 和 36600。 波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是 GPIB 设备的通信。 b,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是 8 位的,标准的值是 5、7 和 8 位。如何设置取决于你想传送的 信息。比如,标准的 ASCII 码是 0~127(7 位)。扩展的 ASCII 码是 0~255(8 位)。如果数据使用简单的文本(标准 ASCII 码),那么每个数据包使用 7 位 数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。 c,停止位:用于表示单个包的最后一位。典型的值为 1,1.5 和 2 位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台 设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程 度越大,但是数据传输率同时也越慢。 d,奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校 验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是 011,那么对于偶校验,校验位为 0,保证逻辑高的位数是 偶数个。如果是奇校验,校验位位 1,这样就有 3 个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道 一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。 本人实例波形分析:串口发送字符串“AT 回车 ”,16 位码为 41540D。示波器波形如下: 41H(01000001B)->TTL 电平(0)10000010(1)->RS232 电平(1)01111101(0) 原始波形
例如,对于 16 进制数据 55aaH,当采用 8 位数据位、1 位停止位传输时,它在信号线上的波 形如图 1(TTL 电平)和图 2(RS-232 电平)所示。
55H=01010101B,取反后 10101010B,加入一个起始位 1,一个停止位 0,55H 的数据格式为 1010101010B; aaH=10101010B,取反后 01010101B,加入一个起始位 1,一个停止位 0,55H 的数据格式为 1101010100B;
--------------------------------串口通信的接收过程:(异步通信:接收器和发送器有各自的时钟;同步通信:发送器和接收 器由同一个时钟源控制。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)当信号再次变为低时,开始进入下一幀的检测。
逻辑 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 为低电平。数据总是从低位向高位一位一位的传 输。示波器读数时,左边是数据的高位。
进制数及 0、1 电平)然后传输。 字节型文件传输本身就是二进制文件,本身就是二进制等 0、1 电平,不需要像文本文件那 样进行数据转换,直接传输便可。 举例: 传输字节型文件 0X55,对应二进制位 0101 0101 就是一个字节,串口从低位开始 1010 1010 这样高低电平即可传输出去。 文本文件“0A”“0”对应 ASCLL 码 48,即二进制 0011 0000 一个字节,“A”对应 ASCLL 码 65,即二进制 0100 0001 一个字节;将这个文本文件传输出去共发送两个字节。
--------------------------------单片机常用 11.0592M 的的晶振,这个奇怪数字是有来历的: 波特率为 9600BPS 每位位宽 t1=1/9600s 晶振周期 t2=1/11.0592/1000000S 单片机机器周期 t3=12*t2 t1/t3=96 即对于 9600BPS 的串口,单片机对其以 96 倍的速率进行采样。 如果单片机晶振用的不正确,会对串口接受产生误码。 关于单片机晶振的选择和寄存器设置详见: www.cainiao8.com/embedded/51danpianji/danpianji06_chuankou.html
RS422 总线,RS485 和 RS422 电路原理基本相同,都是以差动方式发送和接受,不需要数字地 线。差动工作是同速率条件下传输距离远的根本原因,这正是二者与 RS232 的根本区别,因 为 RS232 是单端输入输出,双工工作时至少需要数字地线发送线和接受线三条线(异步传输), 还可以加其它控制线完成同步等功能。RS422 通过两对双绞线可以全双工工作收发互不影响, 而 RS485 只能半双工工作,发收不能同时进行,但它只需要一对双绞线。RS422 和 RS485 在 19kpbs 下能传输 1200 米。用新型收发器线路上可连接台设备。
invert 之后的波形(由于 RS232 使用的是负逻辑,要按常规逻辑分析,需要将电平 0、1 调换,示波器有这个功能) 稍后我来写具体数据结构分析。
TTL 电平的起始位为 0,终止位为 1 RS232 电平起始位为 1,终止位为 0;由 TTL 到 RS232 输出时需要电平转换,
串口通信传输的数据格式实际上都是二进制,这也是计算机中处理数据的格式。 一般说串口可以传输文本文件和二进制文件,归根到底都是二进制的数据。 串口传输文本文件,实际上是传输该文本文件对应的 ASCLL 码文件,ASCLL 码是十进制数, 将该十进制数转换为十六进制(对应二
RS232串口通信详解(引脚定义,电气特性,传输格式,接收过程, 单片机晶振,RS485,RS422)
串口是计算机上一种非常通用的设备通信协议。
--------------------------------串口的引脚定义:
信号方向来
9芯 自
缩写
Hale Waihona Puke Baidu描述
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 英尺 2)RS232 可做到双向传输,全双工通讯,最高传输速率 20kbps 3)RS-232C 上传送的数字量采用负逻辑,且与地对称 逻辑 1:-3 ~-15V
解析串口通信数据格式
DB-9 针连接头(从计算机连出的线的截面,公头)。 ------------\12345/ \6789/ ----------RS-232 针脚的功能:(红色的线是常用的)
数据: TXD(pin 3):串口数据输出 RXD(pin 2):串口数据输入 握手: RTS(pin 7):发送数据请求 CTS(pin 8):清除发送 DSR(pin 6):数据发送就绪 DCD(pin 1):数据载波检测 DTR(pin 4):数据终端就绪 地线: GND(pin 5):地线 其他 RI(pin 9):铃声指示 典型地,串口用于 ASCII 码字符的传输。通信使用 3 根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数 据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口, 这些参数必须匹配: a,波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的 bit 的个数。例如 300 波特表示每秒钟发送 300 个 bit。当我们提到时钟周期时,我们就是指 波特率例如如果协议需要 4800 波特率,那么时钟是 4800Hz。这意味着串口通信在数据线上的采样率为 4800Hz。通常电话线的波特率为 14400,28800 和 36600。 波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是 GPIB 设备的通信。 b,数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是 8 位的,标准的值是 5、7 和 8 位。如何设置取决于你想传送的 信息。比如,标准的 ASCII 码是 0~127(7 位)。扩展的 ASCII 码是 0~255(8 位)。如果数据使用简单的文本(标准 ASCII 码),那么每个数据包使用 7 位 数据。每个包是指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。 c,停止位:用于表示单个包的最后一位。典型的值为 1,1.5 和 2 位。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台 设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程 度越大,但是数据传输率同时也越慢。 d,奇偶校验位:在串口通信中一种简单的检错方式。有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于偶和奇校验的情况,串口会设置校 验位(数据位后面的一位),用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是 011,那么对于偶校验,校验位为 0,保证逻辑高的位数是 偶数个。如果是奇校验,校验位位 1,这样就有 3 个逻辑高位。高位和低位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接收设备能够知道 一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接收数据是否不同步。 本人实例波形分析:串口发送字符串“AT 回车 ”,16 位码为 41540D。示波器波形如下: 41H(01000001B)->TTL 电平(0)10000010(1)->RS232 电平(1)01111101(0) 原始波形
例如,对于 16 进制数据 55aaH,当采用 8 位数据位、1 位停止位传输时,它在信号线上的波 形如图 1(TTL 电平)和图 2(RS-232 电平)所示。
55H=01010101B,取反后 10101010B,加入一个起始位 1,一个停止位 0,55H 的数据格式为 1010101010B; aaH=10101010B,取反后 01010101B,加入一个起始位 1,一个停止位 0,55H 的数据格式为 1101010100B;
--------------------------------串口通信的接收过程:(异步通信:接收器和发送器有各自的时钟;同步通信:发送器和接收 器由同一个时钟源控制。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)当信号再次变为低时,开始进入下一幀的检测。
逻辑 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 为低电平。数据总是从低位向高位一位一位的传 输。示波器读数时,左边是数据的高位。
进制数及 0、1 电平)然后传输。 字节型文件传输本身就是二进制文件,本身就是二进制等 0、1 电平,不需要像文本文件那 样进行数据转换,直接传输便可。 举例: 传输字节型文件 0X55,对应二进制位 0101 0101 就是一个字节,串口从低位开始 1010 1010 这样高低电平即可传输出去。 文本文件“0A”“0”对应 ASCLL 码 48,即二进制 0011 0000 一个字节,“A”对应 ASCLL 码 65,即二进制 0100 0001 一个字节;将这个文本文件传输出去共发送两个字节。
--------------------------------单片机常用 11.0592M 的的晶振,这个奇怪数字是有来历的: 波特率为 9600BPS 每位位宽 t1=1/9600s 晶振周期 t2=1/11.0592/1000000S 单片机机器周期 t3=12*t2 t1/t3=96 即对于 9600BPS 的串口,单片机对其以 96 倍的速率进行采样。 如果单片机晶振用的不正确,会对串口接受产生误码。 关于单片机晶振的选择和寄存器设置详见: www.cainiao8.com/embedded/51danpianji/danpianji06_chuankou.html
RS422 总线,RS485 和 RS422 电路原理基本相同,都是以差动方式发送和接受,不需要数字地 线。差动工作是同速率条件下传输距离远的根本原因,这正是二者与 RS232 的根本区别,因 为 RS232 是单端输入输出,双工工作时至少需要数字地线发送线和接受线三条线(异步传输), 还可以加其它控制线完成同步等功能。RS422 通过两对双绞线可以全双工工作收发互不影响, 而 RS485 只能半双工工作,发收不能同时进行,但它只需要一对双绞线。RS422 和 RS485 在 19kpbs 下能传输 1200 米。用新型收发器线路上可连接台设备。
invert 之后的波形(由于 RS232 使用的是负逻辑,要按常规逻辑分析,需要将电平 0、1 调换,示波器有这个功能) 稍后我来写具体数据结构分析。
TTL 电平的起始位为 0,终止位为 1 RS232 电平起始位为 1,终止位为 0;由 TTL 到 RS232 输出时需要电平转换,
串口通信传输的数据格式实际上都是二进制,这也是计算机中处理数据的格式。 一般说串口可以传输文本文件和二进制文件,归根到底都是二进制的数据。 串口传输文本文件,实际上是传输该文本文件对应的 ASCLL 码文件,ASCLL 码是十进制数, 将该十进制数转换为十六进制(对应二
RS232串口通信详解(引脚定义,电气特性,传输格式,接收过程, 单片机晶振,RS485,RS422)
串口是计算机上一种非常通用的设备通信协议。
--------------------------------串口的引脚定义:
信号方向来
9芯 自
缩写
Hale Waihona Puke Baidu描述
1
调制解调器 CD
载波检测
2
调制解调器 RXD
接收数据