精华内容
下载资源
问答
  • 异步同步通信数据帧格式

    千次阅读 2020-07-10 13:52:52
    串行通信可以分为两种类型:同步通信、异步通信. 1. 异步通信的特点及信息帧格式: 以起止式异步协议为例,下图显示的是起止式一帧数据格式: 图1 起止式异步通信的特点是:一个字符一个字符地传输,每个字符一位一位...
    串口扫盲六:异步通信方式
    </div>
    

    串行通信可以分为两种类型:同步通信、异步通信.

    1. 异步通信的特点及信息帧格式:

    以起止式异步协议为例,下图显示的是起止式一帧数据的格式:

    图1

    起止式异步通信的特点是:一个字符一个字符地传输,每个字符一位一位地传输,并且传输一个字符时,总是以"起始位"开始,以"停止位"结束,字符之间没有固定的时间间隔要求.每一个字符的前面都有一位起始位(低电平,逻辑值),字符本身由5-7位数据位组成,接着字符后面是一位校验位(也可以没有校验位),最后是一位或一位半或二位停止位,停止位后面是不定长的空闲位.停止位和空闲位都规定为高电平(逻辑值1),这样就保证起始位开始处一定有一个下跳沿.

    从图中可看出,这种格式是靠起始位和停止位来实现字符的界定或同步的,故称为起止式协议.

    异步通信可以采用正逻辑或负逻辑,正负逻辑的表示如下表所示:

     

    逻辑0

    逻辑1

    正逻辑

    低电平

    高电平

    负逻辑

    高电平

    低电平

    异步通信的信息格式如下边的表所示:

    起始位

    逻辑0

    1位

    数据位

    逻辑0或1

    5位、6位、7位、8位

    校验位

    逻辑0或1

    1位或无

    停止位

    逻辑1

    1位,1.5位或2位

    空闲位

    逻辑1

    任意数量

    注:表中位数的本质含义是信号出现的时间,故可有分数位,如1.5.

    例:传送8位数据45H(0100,0101B),奇校验,1个停止位,则信号线上的波形象图2所示那样:异步通信的速率:若9600bps,每字符8位,1起始,1停止,无奇偶,则实际每字符传送10位,则960字符/秒.

    图2

    2. 异步通信的接收过程

    接收端以"接收时钟"和"波特率因子"决定一位的时间长度.下面以波特率因子等于16(接收时钟每16个时钟周期,使接收移位寄存器移位一次),正逻辑为例说明,如图3所示.

    图3

    1. 开始通信时,信号线为空闲(逻辑1),当检测到由1到0的跳变时,开始对"接收时钟"计数.
    2. 当计到8个时钟时,对输入信号进行检测,若仍为低电平,则确认这是"起始位"B,而不是干扰信号.
    3. 接收端检测到起始位后,隔16个接收时钟,对输入信号检测一次,把对应的值作为D0位数据.若为逻辑1, 作为数据位1;若为逻辑0,作为数据位0.
    4. 再隔16个接收时钟,对输入信号检测一次,把对应的值作为D1位数据.….,直到全部数据位都输入.
    5. 检测校验位P(如果有的话).
    6. 接收到规定的数据位个数和校验位后,通信接口电路希望收到停止位S(逻辑1),若此时未收到逻辑1,说明出现了错误,在状态寄存器中置"帧错误"标志.若没有错误,对全部数据位进行奇偶校验,无校验错时,把数据位从移位寄存器中送数据输入寄存器.若校验错,在状态寄存器中置奇偶错标志.
    7. 本幀信息全部接收完,把线路上出现的高电平作为空闲位.

    当信号再次变为低时,开始进入下一幀的检测.

    3. 异步通信的发送过程

    发送端以"发送时钟"和"波特率因子"决定一位的时间长度.

     

    1. 当初始化后,或者没有信息需要发送时,发送端输出逻辑1,即空闲位,空闲位可以有任意数量.
    2. 当需要发送时,发送端首先输出逻辑0,作为起始位.
    3. 接着,发送端首先发送D0位,直到各数据位发送完.
    4. 如果需要的话,发送端输出校验位.
    5. 最后,发送端输出停止位(逻辑1).
    6. 如果没有信息需要发送时,发送端输出逻辑1,即空闲位,空闲位可以有任意数量.如果还有信息需要发送,转入第(2)步.

    对于以上发送、接收过程应注意以下几点:

    1. 接收端总是在每个字符的头部(即起始位)进行一次重新定位,因此发送端可以在字符之间插入不等长的空闲位,不影响接收端的接收.
    2. 发送端的发送时钟和接收端的接收时钟,其频率允许有一定差异,当频率差异在一定范围内,不会引起接收端检测错位,能够正确接收.并且这种频率差异不会因多个字符的连续接收而造成误差累计(因为每个字符的开始(起始位处)接收方均重新定位).只有当发送时钟和接收时钟频率差异太大,引起接收端采样错位,才造成接收错误.
    3. 起始位,校验位,停止位,空闲位的信号,由"发送移位寄存器"自动插入.在接收方,"接收移位寄存器"接收到一帧完整信息(起始,数据,校验,停止)后,仅把数据的各位送至"数据输入寄存器",即CPU从"数据输入寄存器"中读得的信息,只是有效数字,不包含起始位,校验位,停止位信息.
    展开全文
  • 基于STM32F4(不是开发板),实现通过DMA接收串口收回的数据
  • 配合定时器中断,通过超时的方法,完成串口数据帧的接收。
  • 51串口通信 数据帧

    2014-11-01 07:36:19
    应用51 开发的 串口通信 带数据包格式
  • 串口通讯时的数据帧格式通讯协议区别为:作用层不同、用途不同、内容不同。 一、作用层不同 1、数据帧格式数据帧格式的作用层为数据链路层。 2、通讯协议:通讯协议的作用层为应用层。 二、用途不同 1、...

    串口通讯时的数据帧格式和通讯协议区别为:作用层不同、用途不同、内容不同。

    一、作用层不同

    1、数据帧格式:数据帧格式的作用层为数据链路层。

    2、通讯协议:通讯协议的作用层为应用层。

    二、用途不同

    1、数据帧格式:数据帧格式规定了传递数据的帧的格式。

    2、通讯协议:通讯协议为连接不同操作系统和不同硬件体系结构的互联网络提供通信支持,定义了在互联网络中如何传递、管理信息(文件传送、收发电子邮件、远程登录等),并制定了在出错时必须遵循的规则。

    三、内容不同

    1、数据帧格式:数据帧格式包括帧头,数据部分,帧尾三部分,帧头和帧尾包含一些必要的控制信息,比如同步信息、地址信息、差错控制信息等;数据部分则包含网络层传下来的数据,比如IP数据包,等等。

    2、通讯协议:通讯协议包括对数据格式,同步方式,传送速度,传送步骤,检纠错方式以及控制字符定义等问题的统一规定。

    数据帧格式和通讯协议最大的区别是:数据帧格式属于数据链路层协议;通讯协议属于应用层协议。按ISO/OSI模型观点,串口进行通信过程至少涉及三个层次的协议:物理层协议、数据路层协议和应用层协议。

    (1)物理层协议:规定串口硬件的通信方式。以异步串行通信为例,物理层协议包括串行接口的的波特率、数据位位数、停止位位数以及奇偶校验方式。
    (2)数据链路层协议:规定数据帧格式,包括数据帧的起始定义、帧的字节数、帧结束定义。有时,数据帧格式中还包括垂直校验和,如CRC校验和等。
    (3)应用层协议:也称为通信协议,规定双方在通信过程中的交互方式,谁先发起通信,是否对方需要应答、是否需要出错重发等。

    展开全文
  • 串口通信数据格式

    千次阅读 2020-09-17 12:21:38
    串行通信中数据在1位宽的单条线路上进行传输,一个字节的数据要分为8次,由低位到高位按顺序一位一位的进行传送。 串口收发数据的单位:字节 (Byte) '', 1Byte = 8 bits , 串口收发数据格式一般为 :1bit ...

    串行接口的定义:

    • 串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口)
    • 是指数据一位一位地顺序传送
    • 特点是通信线路简单,只要一对传输线就可以实现双向通信;成本低,适用于远距离通信,但传送速度较慢

     串口通信的定义:

    • 串口按位(bit)发送和接收字节。

    串口通讯的定义:

    • 串口通讯(Serial Communication), 是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式。一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯。

    在串行通信中,数据在1位宽的单条线路上进行传输,一个字节的数据要分为8次,由低位到高位按顺序一位一位的进行传送。

    串口收发数据的单位:字节 (Byte) '',   1Byte = 8 bits , 串口收发数据格式一般为  :1bit 起始位(一般为0)   8bits 数据位(一字节)  1bit 校验位(可有可无)  + 1bit结束位(一般为1)

     

    • 奇校验是指每帧数据中,包括数据位和奇偶校验位的全部9个位中1的个数必须为奇数;
    • 偶校验是指每帧数据中,包括数据位和奇偶校验位的全部9个位中1的个数必须为偶数。
    展开全文
  • 本程序是一个arduino例程,能实现电子表的基本功能(包括闰年检测、时间校对等),另外,其串口通信功能可以方便使用者用数据线、蓝牙模块等对arduino的时间进行重置、保存。串口通信的数据包用头、尾字符识别...
  • 单片机程序是不是也可将上述协议帧中的每一个功能位模块化,做到一种完全的兼容,比如我用到了帧头我就调用一个添加程序添加帧头,用到了功能码就专门添加一个功能码位放功能码,外部再做一个大封装,这样会很容易一...

    前言

    最近串口用的多,感觉有必要简单列一下用过的通信协议帧,这样可以总结下来和大家交流一下,有需要的可以直接参考

    一、单片机串口简介

    单片机中的串口(UART)是一种单字节收发的通信方式一般三根线就够了,标准线序对接的话是九针DB9类型,常用的对三线(rx tx gnd | A B gnd)使用简单方便,常用于短距离,较少连接器件的通信。
    串口增加外部控制芯片会将串口变为RS232和RS485两种通信类型的电平,RS232的逻辑1和0分为对应+15V和-15V,RS485的逻辑1和0对应A B端口的电压差+2 ~ +6和-2 ~ -6。RS232不可以连接多个子设备,可实现全双工通信,RS485可实现多个器件的挂载,单双工通信。
    因为是单字节收发,所以就需要一个规定好的通信格式来实现解析与发送,这个就是通信协议。

    二、常用的通信协议类型

    1.没有格式

    没有格式有时候就是王道,许多器件厂商直接使用字符串命令式控制。比如

    /s1000 
    

    设置速度为1000

    /r0000
    

    回复出厂设置。
    这种有个好处就是在一些资源及性能一般的器件中可直接使用,不用队列,不用缓存,直接在中断中进行数据的读取与赋值,简单粗暴。switch case轻松解决。适用于简单短命令短数据场合。
    缺点就是通信数据不能太长,容易出现误操作(谁手残乱发送数据碰巧改了核心数据就完犊子了)。

    2.帧头帧尾+数据

    帧头数据长度数据校验位帧尾
    0XF50X40X01 0X02 0X03 0X040XC50X5F

    简单常用的就是这种带帧头帧尾或者校验位的格式。通常在单片机中进行数据的接收然后存放到缓存队列中,然后主循环中根据帧头帧尾对缓存队列数据进行提取,一帧一帧的进行赋值操作。
    校验的有很多,和校验、CRC等等,这里我觉得还可以实现加密,自己设置一个加密算法,校验位就用加密算法得出,别人拿不到加密算法只有通信协议也是不能驱动你的器件的。(骚操作,好多连校验位都没有,越简单越可靠)
    此种有点是简单可靠,上下位机容易根据通信格式进行数据的交互,适合较长数据的传输。

    3.帧头帧尾+数据+附加功能码

    帧头功能码数据长度数据校验位帧尾
    0XF50X010X40X01 0X02 0X03 0X040XC50X5F

    这种格式兼容第二种,可以处理不同类型的命令,比如读和写。
    功能码可以无限添加,比如使用两个功能码一个指示对哪个变量操作,另一个指示读还是写操作。这种应该是最广泛使用的了吧,工作量也不是很大,自己调试调试也很容易实现。

    4.帧头帧尾+数据+附加功能码+目标地址

    帧头地址功能码数据长度数据校验位帧尾
    0XF50XCC0X010X40X01 0X02 0X03 0X040XC50X5F

    这种加地址的就有意思了,具备了识别器件的能力。比如你随便拿了一个同类型不同地址的器件接入,你发送命令器件就不鸟你。这种适合用在485通信总线上,所有器件根据地址去识别是否去执行。
    优点是具备器件识别功能有命令执行唯一性,适合485通信。
    缺点是232使用的话有点鸡肋。目前我见过的大多是这种不管是485还是232通信(其实地址也算是一个功能码,问题不大)。

    5.帧头帧尾+数据+附加功能码+转发功能

    帧头源长度源地址目标长度目标地址功能码数据长度数据校验位帧尾
    0XF50X010XCC0X020XDD 0XBB0X010X40X01 0X02 0X03 0X040XC50X5F

    这个是我使用过的最厉害的串口通信协议了,通过地址长度及地址域实现判别是否是需要转发下一级还是进行操作命令。
    此条命令过程为:0XCC的器件发送命令帧给0XDD的器件,0XDD的器件发现自己不是最终目标,重新组帧发送给地址为0XBB的下一级器件,0XBB接收到命令后发现自己是最终目标因此执行命令。
    这种的通信协议优点是功能俱全,可实现转发。
    缺点就是解析帧的程序复杂,增加一个转发就会加一个重新组帧的时间,转发越多越费时间。(不过谁没事用串口串这么多子级呢,有病么,完全可以考虑使用其它通信方式了)
    这种应该是将串口适配了其它通信方式(比如can、tcp/ip等),这样程序处理得当的话应该可以实现不同通信方式的混搭,比如主板通过串口发送,下一级通过CAN总线发送给更多的器件,也许CAN总线发送完了子器件又有子器件用串口发送接收,总之来说具备了转发就具备了一定的通信兼容性。
    有点复杂串口还是用第4种方式就够了。

    6.MODBUS RTU

    这个很牛批,我没咋用过,简单说一下。这个单片机得用485通信了,牛就牛在是一种正规的统一标准,有现成的集成模块买过来就能用的那种,电气类工业控制中常用如PLC。
    Modbus-RTU模式是指当控制器设为在Modbus网络上以RTU(远程终端模式)模式通信,在消息中的每个8Bit包含两个4Bit的十六进制字符。Markdown将文本转换为 HTML1
    操作方式的话和4的差不多(但人家就是做成了认可的标准就是牛),多涉及一些寄存器的操作,寄存器一般都是按位操作,每一位都有每一位的功能,一下就扩展了很多用处。

    7.其它

    其它就是其它,可以混为一谈的一些方式,这些多半是上述几种的混搭型。有的有帧头,没有帧尾,有的有帧尾但用地址做帧头,有的不加校验,有的用固定长度实现帧尾的功能,有的奇葩还用地址做帧头,校验做帧尾还不固定长度。

    总结

    差不多了,一个串口基本的通信协议帧也就这些了,后续想到了再添加。不要一味的追求功能多,简单实用才是最可靠的。能不加通信协议就不加,最好。
    突然间想到了一个点子,单片机程序是不是也可将上述协议帧中的每一个功能位模块化,做到一种完全的兼容,比如我用到了帧头我就调用一个添加程序添加帧头,用到了功能码就专门添加一个功能码位放功能码,外部再做一个大封装,这样会很容易一个通信模板兼容所有通信协议。(也许也没必要,大多数都很简单,提取的数据也不多,何况我的C++还一塌糊涂,等我有实力了在考虑吧,不慌)

    参考文献


    1. Modbus通讯协议(二)—RTU. ↩︎

    展开全文
  • 深入剖析串口通信数据格式

    千次阅读 多人点赞 2019-05-10 21:43:05
    串口是串行接口(serial port)的简称,也称为串行通信接口或COM接口。串口通信是指采用串行通信协议...在串行通信中数据在1位宽的单条线路上进行传输,一个字节的数据要分为8次,由低位到高位按顺序一位一位的进...
  • 串口帧尾判断.vi

    2020-04-23 16:14:35
    数据帧格式为:帧头1、帧头2、数据1高、数据1低、数据2高、数据2低、数据3高、数据3低、数据4高、数据4低、帧尾1、帧尾2数据接收类似于堆栈的入栈操作,最新收到的数据始终在数组的第0个元素,当收到一帧数据后,...
  • MCU没有CAN或CAN接口数量不够怎么办?目前市面上有串口转CAN的相关模块...一是老产品面临升级,需要用到CAN总线通信,但硬件平台的MCU没有集成CAN总线的控制器。二是选用的MCU已经包含CAN总线接口,但数量上不能满...
  • 单片机接收数据帧帧头帧尾校验数据解析C语言,采用VS2010编译器书写,已经通过验证,单片机里面也十分实用。双向链表方法。
  • 文章目录 1 自定义帧格式 1.1 数据帧结构 1.2 填充数据帧 1.3 填充数发送缓冲区 1.4 通过串口发送数据 2 超时接收 2.1 串口中断服务程序 2.2 定时器中断服务函数: 2.3 数据处理 1 自定义帧格式 1.1 数据帧结构 定义...
  • 单片机串口发送数据帧

    千次阅读 2019-08-08 21:51:23
    很少看到有资料写如何以中断的方式发送一帧数据,如果以等待的发送数据帧,对高速运行的单片机来说是很浪费时间的,下面就介绍一种使用中断方式发送数据帧,操作平台采用51 mcu 首先定义一个数据帧的结构体,该...
  • 通常只有一个8位或16位的CPU,不仅要完成主流程的工作,同时还要处理随时发生的各种中断,因而嵌入式系统串口通信程序设计与PC机有很大的不同若嵌入式系统.中断服务子程序在系统运行过程占用了较多的时间,...
  • 引 言 串口通信是日前单片机和DSP等嵌入式系统之间,以及嵌入式系统与PC机或无线...所以,嵌入式系统串口通信虽然看似简单,但其中仍有许多问题值得研究,例如串口通信过程同步问题。本文针对该问题给出了逐
  • STM32串口接收一帧数据的写法,数据包括帧头,功能帧,数据帧,校验位!
  • 基于FPGA的串口帧数据通信实现
  • 图解CAN总线数据的组成和帧格式

    万次阅读 多人点赞 2020-05-18 19:20:26
    CAN 是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。CAN 的高性能和可靠性已被认同,并被广泛地应用于工业自动化、...下面就大致介绍一下CAN总线数据的组成以及帧格式的具体内容。
  • [STM32] 串口数据帧处理(第一弹)

    千次阅读 2021-09-06 19:10:08
    文章目录1 串口使用的常用场景2 字节处理总结 1 串口使用的常用场景 使用串口的主要目的是实现数据的交互,数据的交互的方法脱身于常用的场景。这里描述一个比较典型的场景: MCU作为主控制器通过串口和外部的...
  • 通俗易懂的UART协议帧格式

    千次阅读 2021-01-19 21:00:45
    今天的内容关于UART的帧格式,比较简单,玩过单片机的小伙伴应该都知道。 UART的英文全称是:Universal Asynchronous Receiver/Transmitter,意为通用异步收发传输器。 UART因为有两根线数据线TX和RX,可以以...
  • QSerialPort类的串口通讯例程,与单片机通信少不了使用串口进行通信,Qt 也提供了串口通信的类,使用的时候在 pro 添加这句导入模块 QT += serialport
  • Qt 和 MCU 的串口通讯(完整

    千次阅读 2019-09-12 18:03:59
    最近一段时间在做有关串口通讯的Qt项目,其中与MCU STM32那部分的通讯比较令人头疼,因为MCU处理的是HEX16进制数,而Qt应用更多的倾向于对字符串的处理,经过这段时间的痛苦而又煎熬的摸索,也算是有所新的认识。...
  • 基于FPGA的串口帧数据通信实现.zip
  • 串行通信是指计算机主机与外设之间以及主机系统与主机系统之间数据的串行传送。使用串口通信时,发送和接收到的每一个字符实际上都是一次一位的传送的,每一位为1或者为0。  串行通信的分类  串行通信可以分为...
  • 串口通信数据格式与解析

    万次阅读 2017-08-31 10:43:13
    串行通信中,线路空闲时,线路的 TTL 电平总是高,经反向 RS232 的电平总是低。一个数据 的开始 RS232 线路为高电平,结束时 Rs232 为低电平。数据总是从低位向高位一位一位的传 输。示波器读数时,左边是数据的...
  • 51单片机串口通信帧数据接收

    千次阅读 2015-12-12 21:35:42
    首先定义一个数据帧格式,Header :{ 0xAA 0x55} type:{ 0x01 | 0x02 | 0x03 } length:{ N } body :{____n个字节的数据___ } 数据的格式就是上面的定义 Header 为帧头 标记一个数据帧的开始,type 为类型 用来...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 33,175
精华内容 13,270
关键字:

串口通信中数据帧格式