首先,打扰大家一下,现在人工智能非常火爆,薪资待遇都很高,许多朋友都想学,但是一般的教程都比较难懂。最近写了一个这方面的教程,非常适合小白入门,不仅通俗易懂而且还很风趣幽默。大家感兴趣的话可以点进去看一下。如果能够点击多个页面且停留3分钟以上,就是对我写作的最大支持!会给我带来更大的写作动力!点这里可以跳转到教程。

串口

串口是串行接口(serial port)的简称,也称为串行通信接口或COM接口。串口通信是指采用串行通信协议(serial communication)在一条信号线上将数据一个比特一个比特地逐位进行传输的通信模式。 串口按电气标准及协议来划分,包括RS-232-C、RS-422、RS485等。

在串行通信中,数据在1位宽的单条线路上进行传输,一个字节的数据要分为8次,由低位到高位按顺序一位一位的进行传送。串行通信的数据是逐位传输的,发送方发送的每一位都具有固定的时间间隔,这就要求接收方也要按照发送方同样的时间间隔来接收每一位。不仅如此,接收方还必须能够确定一个信息组的开始和结束。常用的两种串行通信方式包括同步通信和异步通信。

#TTL电平和RS232电平
TTL电平:+5V等价于逻辑"1",0V等价于逻辑"0";

RS232电平: 串口的一个标准,采用负逻辑。

  1. 在TXD和RXD上:逻辑"1" = -15V ~ -3V,逻辑"0" = +3V ~ +15V

  2. 在RTS、CTS、DSR、DTR和DCD等控制线上:信号有效(接通,ON状态,正电压,高电平)= +3V~+15V,信号无效(断开,OFF状态,负电压,低电平) = -3V~-15V

#9针串口(DB9)

管脚功能说明如下:

#串行同步通信与串行异步通信
(PS:本节中电平为TTL电平)

同步通信(SYNC:synchronous data communication)是指在约定的通信速率下,发送端和接收端的时钟信号频率和相位始终保持一致(同步),这样就保证了通信双方在发送和接收数据时具有完全一致的定时关系。

异步通信(ASYNC:asynchronous data communication),是以字符为单位进行传输的,字符之间没有固定的时间间隔要求,而每个字符中的各位则以固定的时间传送。 异步通信中,收发双方取得同步是通过在字符格式中设置起始位和停止位的方法来实现的。具体来说就是,在一个有效字符正式发送之前,发送器先发送一个起始位,然后发送有效字符位,在字符结束时再发送一个停止位,起始位至停止位构成一帧。停止位至下一个起始位之间是不定长的空闲位,并且规定起始位为低电平(逻辑值为0),停止位和空闲位都是高电平(逻辑值为1),这样就保证了起始位开始处一定会有一个下跳沿,由此就可以标志一个字符传输的起始。而根据起始位和停止位也就很容易的实现了字符的界定和同步。
显然,采用异步通信时,发送端和接收端可以由各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,可以互不同步。
#异步通信的数据格式
(PS:本节电平为TTL电平)

一个数据帧包括:1个起始位(低电平),8个数据位,1个校验位,1个停止位(高电平,表示数据帧结束),如下图所示。

  1. 在信号线上共有两种状态,可分别用逻辑1(高电平)和逻辑0(低电平)来区分。在发送器空闲时,数据线应该保持在逻辑高电平状态

  2. 起始位(Start Bit):发送器是通过发送起始位而开始一个字符传送,起始位使数据线处于逻辑0状态,提示接受器数据传输即将开始;

  3. 数据位(Data Bits):起始位之后就是传送数据位。数据位一般为8位一个字节的数据(也有6位、7位的情况),标准的ASCII码是0127(7位),扩展的ASCII码是0255(8位),低位(LSB)在前,高位(MSB)在后

  4. 校验位(parity Bit):校验位一般用来判断接收的数据位有无错误,分为NONE(无校验位)/ODD(奇校验)/EVEN(偶校验)/MASK(标志位,校验位一直为1)/SPACE(空白,校验位一直为0),例如,如果数据是1011,那么对于偶校验,校验位为1,保证逻辑高的位数是偶数个,如果是奇校验,校验位为0,保证逻辑低的位数是奇数个。一般是奇偶校验,在使用中,该位常常取消;

  5. 停止位:停止位在最后,用以标志一个字符传送的结束,它对应于逻辑1状态

  6. 位时间:即每个位的时间宽度,起始位、数据位、校验位的位宽度是一致的,停止位有1位、1.5位、2位格式,一般为1位。
    #异步数据的数据发送过程
    发送数据的具体步骤如下:

  7. 初始化后或者没有数据需要发送时,发送端输出逻辑1,可以有任意数量的空闲位;

  8. 当需要发送数据时,发送端首先输出逻辑0,作为起始位;

  9. 接着开始输出数据位,发送端首先输出数据的最低位D0,然后是D1,最后是数据的最高位;

  10. 如果设有奇偶检验位,发送端输出检验位;

  11. 最后,发送端输出停止位(逻辑1);

  12. 如果没有信息需要发送,发送端输出逻辑1(空闲位),如果有信息需要发送,则转入步骤2;

  13. 如果是以232电平发送的,示波器上看到的发送端信号应是上述数据包取反后的结果(负逻辑)。
    #异步通信的数据接收过程
    在异步通信中,接收端以接收时钟和波特率因子决定每一位的时间长度。下面以波特率因子等于16(接收时钟每16个时钟周期使接收移位寄存器移位一次)为例来说明:

  14. 开始通信,信号线为空闲(逻辑1),当检测到由1到0的跳变时,开始对接收时钟计数;

  15. 接收端检测到起始位后,隔16个接收时钟对输入信号检测一次,把对应的值作为D0位数据;

  16. 再隔16个接收时钟,对输入信号检测一次,把对应的值作为D1位数据,直到全部数据位都输入;

  17. 检验奇偶检验位;

  18. 接收到规定的数据位个数和校验位之后,通信接口电路希望收到停止位(逻辑1),若此时未收到逻辑1,说明出现了错误,在状态寄存器中置“帧错误”标志;若没有错误,对全部数据位进行奇偶校验,无校验错时,把数据位从移位寄存器中取出送至数据输入寄存器,若校验错,在状态寄存器中置“奇偶错”标志;

  19. 本帧信息全部接收完,把线路上出现的高电平作为空闲位;

  20. 当信号再次变为低时,开始进入下一帧的检测。
    (PS1:接收时钟和发送时钟与波特率有如下关系:
    f = n × B 这里f 是发送时钟或接收时钟的频率; B 是数据传输的波特(Baud)率; n 称为波特率因子。设发送或接收时钟的周期为Tc,发送一个波形所需要的传输时间为Td,则: Tc = 1/f , Td = 1/B ,得到: Tc = Td /n,从而n代表发送一个波形需要几个时钟周期。 在实际串行通信中,波特率因子可以设定。在异步传送时,n = 1,16,64,常采用n = 16,即发送或接收时钟的频率要比数据传送的波特率高n倍。在同步通信时,波特率因子n必须等于1。
    **PS2:**波特率与比特率的关系:
    波特率代表1秒钟发送波形的个数,而比特率代表1秒钟发送比特的个数。在采用二进制传输的情况下,发送的波形一共有两种波形,即高电平和低电平,那么一个波形代表一个比特,因此波特率和比特率相等;在采用四进制传输的情况下,发送的波形一共有4种波形,此处假设发送的最高电平为3V,发送00的波形为0V,发送01的波形为1V,发送10的波形为2V,发送11的波形为3V,那么一个波形代表两个比特,因此比特率是波特率的两倍;同理,在采用八进制传输的情况下,比特率是波特率的三倍,以此类推。)

#串口助手通过DB9串口发送数据剖析
波特率115200bps,每个比特时间:1s/115200 = 1000000us/115200=8.68us。
##发送5C4E,偶校验
1.串口调试助手

2.5C4E对应二进制:0101_1100_0100_1110,分别对2个字节加起始位、校验位、停止位(data的LSB先发):
      b |<–data–>| ps
0101_1100:0_0011_1010_0_1

b |<–data–>| ps
0100_1110:0_0111_0010_0_1
合起来为:0_0011_1010_0_1_0_0111_0010_0_1
3.转换为负逻辑:1_1100_0101_1_0_1_1000_1101_1_0,波形如下图,可以看到数据流的1逻辑为-11V,0逻辑为+11V:

##发送7B3D2A,无奇偶校验位
1.串口调试助手

2.7B3D2A对应二进制:0111_1011_0011_1101_0010_1010,分别对3个字节加起始位、停止位(data的LSB先发):
       b |<–data–>| s
0111_1011:0__11011110__1

b |<–data–>| s
0011_1101:0__10111100__1

b |<–data–>| s
0010_1010:0__01010100__1
合起来为:0_1101_1110_1_0_1011_1100_1_0_0101_0100_1
3.转换为负逻辑:1_0010_0001_0_1_0100_0011_0_1_1010_1011_0,波形如下图,可以看到数据流的1逻辑为-11V,0逻辑为+11V:

#参考文献
https://wenku.baidu.com/view/83fc202b19e8b8f67d1cb93e.html
https://wenku.baidu.com/view/681e210aba1aa8114431d9d4.html

深入剖析串口通信数据格式相关推荐

  1. 串口通信数据格式与解析

    串口通信的传输格式: 串行通信中,线路空闲时,线路的 TTL 电平总是高,经反向 RS232 的电平总是低.一个数据 的开始 RS232 线路为高电平,结束时 Rs232 为低电平.数据总是从低位向高 ...

  2. LabviewRS232串口通信数据格式问题解析

    1.最近在开发一款Labview串口通信软件,功能是实现PC与sony摄像机云台的数据通信.主要是通过PC发送16进制指令控制云台的转动,方便做一些测试. 遇到的问题:一开始没注意格式问题,只是纯粹的 ...

  3. 为什么UART串口通信要16倍过采样数据

    增强抗干扰是原因之一 标准UART可以选16倍采样,也可以选64倍采样,个人觉得应该是方便分频设计. 标准UART的RXD前端有一个"1到0跳变检测器",当其连续接受到8个RXD上 ...

  4. 准备篇--串口通信概述

    前言 最近家里有些事情所以这个系列的文章一直耽搁了,现在开始进行编写希望各位看官见谅,这个系列是我对之前一段时间工作的总结也是我自己的复习和重构,本着互相学习的目的,如果我在其中有理解错误和方向不对的 ...

  5. Labview 串口通信之——PC控制云台方向

    一.项目需求: 1.      完成上位机与下位机的串口通信 2.      上位机电脑给下位机发送16进制指令,控制摄像机云台的各个方向. 3.      该程序用Labview开发 二.开发过程: ...

  6. AKI-H8串口通信

    串口通信是一种通信接口简写SCI,它可是实现异步和同步两种传输模式.可以思考一下同步和异步的区别. 所谓同步就是接收方和发送方使用的是同一个时钟,步调一致的处理数据.典型的就是CPU和内存,通过总线存 ...

  7. 串口通信与编程:串口基础知识

    *************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com ****** ...

  8. s5pv210——串口通信的基础概念

    以下内容源于朱友鹏<物联网大讲坛>课程的学习,如有侵权,请告知删除. 总结 1.同步异步:是否同一时钟,数据格式 2.电平信号.差分信号:有无参考电平(有,无) 3.串行接口和并行接口:信 ...

  9. TQ210——S5PV210串口通信

    TQ210--S5PV210串口通信 1.  串行与并行通信 串行通道中,有效信息被编码后串行的从单根传输线上传送出去.譬如发送ASCII字符'a',我们可以将'a'对应的ASCII码97(0x61) ...

最新文章

  1. 宝峰uv5r怎么设置信道_极蜂D301对讲机和宝峰UV5R 半月评
  2. Java 9 尝鲜之JShell交互式编程环境
  3. Spring,SpringMvc初始化监听配置
  4. 不用也要知道的几种算法(PHP版本)
  5. 真的假的?LiFi或将取代WiFi
  6. 机器学习算法总结之K近邻(KNN)
  7. golang解析嵌套yaml配置(局部解析)
  8. 大三下,第一次前端面试经历
  9. 服务器返回状态码说明,关于服务器返回的十四种常见HTTP状态码详解
  10. 【Python程序设计(七)】文件和数据格式化
  11. 洛谷试炼场 普及常见模板
  12. android root查看目录权限,Android真机获取root权限,进入data目录
  13. RocketMQ中文文档(译)
  14. 基于Struts的网上书店设计毕业论文(含源文件)
  15. 【win7黑屏终结者】win7电脑登录账户后黑屏(只有鼠标箭头)问题
  16. Verilog编程之道 - Verilog语言特性
  17. 【locust】使用locust + boomer实现对接口的压测
  18. 【LabVIEW串口编程】03 串口接收
  19. 无线充电仿真 simulink llc谐振器实现恒压输出 WPT
  20. 求二叉树的叶子节点数目

热门文章

  1. SQL Server收缩数据库
  2. 三层架构编程、DAO层、Entity层、Service层、Controller层
  3. 闲鱼疯转 6800 份!大厂内部数据分析资料首度公开!
  4. Android读书笔记---View基础
  5. 用Javascript开发《三国志曹操传》-开源讲座(四)-用地图块拼成大地图
  6. 可疑进程描述(二)----rundll32.exe进程详述
  7. 瑕瑜互见的网易新财报
  8. 微信支付 生成付款二维码链接 并生成支付二维码图片 .net C#
  9. 什么时候在子类构造方法中必须调用super构造方法?
  10. 小米AI魔法分身解密(二)