RS232基本概念
串口通信时串行通信里面的异步方式 UART是串口通信里面的一种协议,通俗的讲:
串口(基本上) = RS232 = UART = USART = U(S/A)RT
注:
①RS232是协议名称,而串口还应该包括了其它协议,如:RS485、RS422等;
②U是通用,A是异步,S是同步,所以,UART跟USRT区别在于有无同步时钟,所以有的串口会有三根线(地线除外),多了一根时钟线
距离稍微远一点,同步通信就不太合适了,通着通着就乱了;
③RS232发送是靠TXD和GND之间的电压来传数据(接收跟发送雷同),是共模电压,抗干扰能力差,导致传输距离非常有限;
④被广泛使用的原因:因为RS232的简单、低成本,所以不管是单片机、ARM、DSP都配了这种接口;
⑤真正设备间通信肯定是RS232电平的串口数据,抗干扰能力强,TTL电平是电路板上使用的电平,所以真正传输时,肯定会进行RS232和TTL之间的转换。

RS232的协议
因为是异步的通信,那么如何保证数据发送的可靠呢,那么就需要几个扛大旗的人,如起始位,停止位;
典型的其中一种消息协议主要分以下几个部分:起始位、数据位、校验位、停止位,注意:这里用的是位(bit)。
单纯地按照协议规定的去做,会出现一些问题。
1、奇偶校验的校验能力太差。
2、传错一个数据,没法重传。
3、在总线上挂了几个从机,主机如何区分是哪台从机发出的数据(有的设备不能把校验位当地址位用)。
4、如果没有成功发送停止位,那么接收端会不会一直等待。
5、总线上传错了一组数据,没法定位是哪个地方(哪个位)出问题。
鉴于以上诸多问题,我们想到了一种解决办法,就是封装成帧。一帧数据包含多个byte,而一个byte的数据包含多个bit(起始位、数据位等)。

自定义协议
根据实际需求自定义协议。下面举个例子(非通用协议/准则),并以“域”来表示协议里面各个功能模块。
1、帧起始。
帧起始,一般以0x55或者0xaa作为起始的标志,为什么要用这种数字?
十六进制的5,转为二进制是0101;十六进制的A,转为二进制是1010。这样,0x55,就是01010101了。
0和1交替出现,一来方便接收方实现自适应波特率,二来避免干扰
a、通过检测0和1之间的时间间隔,即可知道该帧数据的波特率。
b、如果设为0xff,那么,在总线上出现一个干扰,接收端很有可能误以为要接收数据。
2、命令域。
命令域,可以随意一点,如:设上行为0x1d,下行为0x3a,重传为0xb7,应答为0x89。
3、地址域(可选)。
地址域,也可以随意一点,如果所有设备的地址均不相同,那就只具备点对点的功能。
当然,你也可以视实际情况,把某几台设备的地址设为一样,这样就有点对多点的功能。
4、长度域(可选)。
如果是发送固定长度的帧,是可以不使用长度域;如果是不固定长度的帧,则可以加上。
4、数据域。
数据域,一般由数据个数和数据组成。
比如,你要传3个数,分别是0x00到0x02。那么数据域就是0x03 0x00 0x01 0x02。
5、校验域。
校验域,可以使用校验和或者CRC校验。如,使用CRC16算法话,校验域为2个byte。
一般除了帧起始和帧结束以外,都送进CRC校验。
好了,这样的话,我要发一个上行的数据,到地址为0x0a的设备,一共3个数据(固定长度),分别是0xa0,0xb0,0xc0。
那么一帧数据就是:0x55 0x1d 0x0a 0x03 0xa0 0xb0 0xc0 0x53 0xfb
只要把上面这一帧数据,一个byte一个byte地发送出去,即可。
使用CRC-16对该帧(除去帧起始)进行计算,可以得到0x53FB。如下图所示。
6、应答和重传。
如果接收端,收到一帧数据,经过CRC校验,数据正确,这时得传一帧简易的应答帧,以告诉主机,这个帧接收成功。
应答帧, 如:0x55 0x89 0xa6 0xc1。
如果接收端,收到一帧数据,经过CRC校验,发现数据有错,这时得传一帧简易的重传帧,以请求重传。
重传帧,如:0x55 0xb7 0x76 0x40。
这样,串口的功能就强大了很多

总结:

不管是RS232、或者其他协议,一般是都以byte为单位,传输数据的。如果你想把12位的ADC数据,通过串口发到PC机,那么,你得分成两个byte,高位补零。
从RS232到USB、以太网,不难看出,物理层/物理接口变化不大,而协议/数据链路层却越来越复杂。
这也说明了,传输数据的可靠性,不能过于依赖物理层,而应该依赖协议上的一些机制(校验、重传等)。

要是实现串口通讯,只许连接这三根线就好了:

如果地线不连(共地),两个设备识别出来的电压就会产生很大的误差,出现数据乱飘的情况。

详解RS232/UART/协议/串口通信相关推荐

  1. SOME/IP协议详解「2.0·服务化通信概述」

    SOME/IP协议详解「2.0·服务化通信概述」 点击返回雪云飞星的SOME/IP协议详解「总目录」 SOME/IP协议详解「2.0·服务化通信概述」 1 SOME/IP服务的组成 2 Method| ...

  2. 一篇文章带你详解 TCP/IP 协议(下)

    前面的第一二三章已在上篇讲解,还没看过的可以先看看:一篇文章带你详解 TCP/IP 协议(上) 本文继续讲解第四章. 四.网络层中的 IP 协议 IP(IPv4.IPv6)相当于 OSI 参考模型中的 ...

  3. 详解 TCP/IP 协议

    什么是TCP/IP协议 TCP/IP通信协议是目前最完整.最被广泛支持的通信协议,它可以让不同网络架构.不同操作系统的计算机之间通信,是Internet的标准通信协议. TCP的介绍 TCP也叫传输控 ...

  4. 虚拟串口最大传输速率_【干货】详解RS232、RS485、RS422、串口amp;amp;握手

    RS232.RS485和RS422基础知识 一.RS232基础知识计算机与计算机或计算机与终端之间的数据传送可以采用串行通讯和并行通讯二种方式.由于串行通讯方式具有使用线路少.成本低,特别是在远程传输 ...

  5. 详解RS232、RS485、RS485、串口握手

    一.RS232基础知识 计算机与计算机或计算机与终端之间的数据传送可以采用串行通讯和并行通讯二种方式.由于串行通讯方式具有使用线路少.成本低,特别是在远程传输时,避免了多条线路特性的不一致而被广泛采用 ...

  6. 一篇文章带你详解 TCP/IP 协议(上)

    本文篇幅也比较长,先来一张思维导图,带大家过一遍. 一图看完本文 一. 计算机网络体系结构分层 计算机网络体系结构分层 计算机网络体系结构分层 不难看出,TCP/IP 与 OSI 在分层模块上稍有区别 ...

  7. 【计算机网络面试高频】-HTTP协议详解,HTTP协议常见问题

    4.HTTP协议详解有关问题 4.1 HTTP请求 一个HTTP请求报文由请求行.请求头部.空行和请求数据四个部分组成. 1.请求行 请求行中有请求方法字段.URL字段和HTTP协议版本3个字段组成. ...

  8. 详解 - RS232、RS422、RS485 联系与区别

    博主福利:100G+电子设计学习资源包! http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5 ...

  9. 技术干货 | Libra 技术解读,详解Libra共识协议!

    01  Libra 区块链简介 Libra 区块链的目标是成为金融服务的基础,包括打造一种新的全球支付系统,满足数十 十亿人的日常金融需求.通过对现有区块链解决方案的评估, Libra 决定基于下列三 ...

最新文章

  1. 简单使用XPOSED实现一机多号
  2. 可能是全网首个前端源码共读活动,诚邀你加入一起学习
  3. java ==和equals的区别
  4. android intent服务器,使用android intent从服务器打开pdf文件
  5. 计算机应用的核心能力,应用能力为核心的高职计算机应用分析
  6. Turtlebot2 ROS配置超详细教程 ubuntu16.04
  7. 8086汇编语言程序设计典型题目
  8. 广数系统加工中心编程_数控加工中心编程师傅亲述:提升编程水平的建议
  9. svn 服务器端密码修改,svn服务器端设置密码
  10. ADC采样频率的计算
  11. C++ | 通讯录管理系统
  12. RStudio入门使用常见问题(1)
  13. 饥荒联机版服务器控制台本地和在线,饥荒联机版控制台操作教程 饥荒联机版控制台怎么使用-游侠网...
  14. 看完你就知道原因了,这3类人不适合做自媒体,看看是不是你自己
  15. ppt怎么把图片做成翻书效果_如何用PPT实现翻书效果?
  16. 喷墨打印机的使用 hp LaserJet 1010 HB 打印顺序
  17. 房产抵押贷款需要的资质有哪些
  18. 一、Storm是什么?
  19. 五子棋人机大战(Java菜鸟学习笔记)
  20. Android 截屏到桌面的最佳处理方案-无须ROOT-适用Android 8.0

热门文章

  1. 如何避免 iPhone 夏季发烫?
  2. iPhone 11用户体验:超级耐摔,发热严重,信号问题,咱们一起感受一下
  3. 转换uptime_linux 系统命令——uptime
  4. JavaScript实现同步Ajax请求的两种方式
  5. 关于设置disabled失效问题
  6. gcc编译过程,helloworld举例
  7. qtpython混合编程
  8. java 请求转发_javaweb之请求的转发和重定向
  9. 找出这个图形的规律,并输出一个n行m列的图形
  10. [gdc10][animphysics]《正当防卫2》的动画技术