精华内容
下载资源
问答
  • 串口通信字符传输时间计算方法

    千次阅读 2020-06-24 11:53:03
    串口字符发送时间可根据串口参数配置计算,计算示例如下: e.g.1. 固定起始位1位,数据位8位,奇校验位1位,停止位1位,波特率9600bps,计算单个字符传输时间为: (1+8+1+1)/9600=0.00114583s=1.1454583ms。 e....

    1、字符时间
    串口字符发送时间可根据串口参数配置计算,计算示例如下:

    e.g.1. 固定起始位1位,数据位8位,奇校验位1位,停止位1位,波特率9600bps,计算单个字符传输时间为:

    (1+8+1+1)/9600=0.00114583s=1.1454583ms。

    e.g.2. 固定起始位1位,数据位8位,无校验位,停止位1位,波特率115200bps,计算100个字符传输时间为:

    100*(1+8+1)/115200=0.0086805s=8.6805ms。

    2、MODBUS字符间隔
    modbus的RTU模式中,要求有1.5或3.5字符间隔,发送两帧数据之间要有一定的时间间隔,以保证接收方UART能够区分。

    因此,时间间隔可以计算为1.5*Ts 或3*Ts。为保证通信可靠,一般设置>5Ts。

    考虑线路影响、线路干扰、现场环境等因素,若项目不是特别要求,应给正常间隔时间*5-7

    展开全文
  • 数据的是这样的: 主机发出的呼叫命令之间的发送间隔不能小于100ms,一个命令字节间发送间隔不能大于5ms...”这样的一个字符,现在要发一的该怎么写?? 我是个菜鸟。。。 帮帮忙啊 说得详细些,谢谢了~
  • 串口通信帧的同步方法(识别一数据的起始结束) 转载地址:http://blog.163.com/ssou_1985/blog/static/2953203620126811121076/ 引言串口通信是日前单片机和DSP等嵌入式系统之间...

    串口通信帧的同步方法(识别一帧数据的起始结束)  

     
    转载地址:http://blog.163.com/ssou_1985/blog/static/2953203620126811121076/
     

     

    引 言
        串口通信是日前单片机和DSP等嵌入式系统之间,以及嵌入式系统与PC机或无线模块之间的一种非常重要且普遍使用的通信方式在嵌入式系统的硬件结构中,通常只有一个8位或16位的CPU,不仅要完成主流程的工作,同时还要处理随时发生的各种中断,因而嵌入式系统中的串口通信程序设计与PC机有很大的不同若嵌入式系统中.中断服务子程序在系统运行过程中占用了较多的时间,就有可能在中断眼务子程序正运行时,又产生一个同类型或其他类型的中断,从而造成主程序得不到执行或后续中断数据丢失所以,嵌入式系统中的串口通信虽然看似简单,但其中仍有许多问题值得研究,例如串口通信过程中的帧同步问题本文针对该问题给出了逐次比较、基于FIFO队列和基于状态机的3种帧同步方法通过测试、分析和比较得出,基于有限状态机的方法是嵌入式系统串口通信中很有效的帧同步方法,同时也是一种很不错的串口通信程序设计结构 。   1 串口通信的数据帧结构
        现代工业控制,往往需要由多个独立的控制模块来共同完成它们之间通过串口通信完成复杂的控制过程,必须在通信过程中加入必要的通信协议,以提高系统的可靠性和稳定性;而要完成特定的通信协议,就得有一定的同步机制下面介绍一下简化的串口通信数据帧结构,以便分析说明嵌入式系统串口通信过程中的帧同步方法。

        假定串口发送的数据帧结构为:
         

     

    图片

     

        其中:包头用于同步,一般是一个或多个ASCII字符,本文中假定数据帧同步头有2字节(0xAA0x55);包长表示数据包中除去包头和包长的字节数,一般用约定好的几个字节表示;类型为通信协议里规定的命令类型;数据为应发送的主要信息;校验通常采用单字节异或的方法。

    串口通信中的帧同步方法
    2逐次比较的帧同步方法
        首先等待串口数据,将接收到的第1个字节数据与约定好的包头信息的第1个字节进行比较如果不正确,则等待新字节,直到接收的数据与包头信息的第1个字节相同第1个字节比较正确以后,将收到的第2个字节与包头信息的第2个字节进行比较如果仍然正确,则说明串口接收已经同步,可以开始接收数据帧中的数据部分;否则,重新开始同步过程其程序流程如图1所示。

     

     

    图片

     

     

        此种方法代码量小,编程简单,一般用于在主程序中以非中断方式接收串口数据、实时性很差、数据帧较短的场合但是,在串口速度过快且包头字节数比较多的情况下,串口实现同步花费的时间很长或很难实现同步例如,串口接收到序列Ox0O OxAA0xAA 0x55,当遇到第一个0xAA时,该方法认为第1个字节正确开始比较第2个同步头第2个字节仍是0xAA而不是0x55,所以必须等待新的字节重新开始比较第1个同步头而紧随其后的是0x55,因而,此时包头的第1个字节也没有同步上事实上,0x00 OxAA是干扰字节,0xAA 0x55才是通信协议中的同步头。

    2.2 基于FIFO队列的帧同步方法
        根据同步包头的长度,定义一个相同长度的全局字节数组,把该数组看成是一个如图2所示的先入先出(FIFO)的队列程序流程如图3所示。

     

     

    图片

     

     

        本例中定义两个字节HEADlHEAD2,都初始化为0xFF同步时,丢弃数组头字节HEADl,数组中的所有数据向前移动一个字节,串口接收到的新字节存入数组末字节HEAD2中,将整个数组与协议中的包头信息比较如果正确,则置位已同步标志位,然后开始接收、存储有用数据;否则,继续等待同步串口数据接收完后,不仅要清除已同步标志,还要把HEADlHEAD2两个字节都赋值0xFF;否则,将会影响下一帧数据的同步和接收用前面提到的序列0x00 0xAA 0xAA 0x55…”进行测试,随着串口接收中断收到新的字节帧同步队列中的数据依次为:[0xFF0xFF][0x000xFF][0xAA0x00][0xAA0xAA][0x550xAA]此时,该算法检测出[HEAD2HEAD2]==[0x550xAA],从而实现了同步,置位已同步标志位以便下次进入串口接收中断服务子程序时开始接收数据包的数据部分。

        此种方法与逐次比较的帧同步方法相比,能够比较快速、正确地检测出同步包头;但是如果包头的字节数很多,同步过程中每次进入串口中断服务子程序都要进行大量的字节搬移,将必然耗费很长的时间为了使嵌入式系统更健壮,程序设计应把握的基本原则之一就是使中断处理程序最短所以基于FIFO队列的帧同步方法也不是最优的。

    2.3 基于有限状态机的帧同步方法
        为解决以上问题,可以采用基于有限状态机的设计方法该方法将数据帧的接收过程分为若干个状态:接收信息头HEADl状态、接收信息头HEAD2状态、接收包长状态、接收数据类型状态、接收数据状态及接收校验和状态系统的初始状态为HEADl状态,各接收状态间的状态转移图如图4所示,仍用前面提到的序列0x00 0xAA 0xAA 0x55…”进行测试随着串口接收中断新字节的接收,系统的接收状态依次为HEAD1HEAD1HEAD2HEAD2LEN可见此时就是同步状态该方法也快速、有效地实现了同步;但是需要注意的是,在每一次接收完1帧完整的数据之后,必须把系统的接收状态重新设置为HEADl,否则将会影响下一帧的数据接收。

     

     

    图片

     

     

        此后,程序按照协议开始依次接收数据帧长度、命令类型、数据和校验位接收完后,重新设置系统接收状态为HEADl,同时对该数据帧进行校验校验正确后,利用消息机制通知主程序根据命令类型对数据帧进行处理或执行相应的命令操作。
        下面给出该方法在KeilC5l中的示例程序:
        

     

    图片

     


        
        由于采用了状态机和消息机制的结构,上述设计思路快速有效地实现了串口通信的同步,而且程序结构清晰,便于维护,也易于向其他的串口通信协议移植另外,串口中断服务子程序中需要处理的工作很少,每个串口接收中断平均耗时不超过20个机器周期(在单片机AT89C5l中),大大减轻了串口接收中断服务程序的压力,缓解了嵌入式系统有限资源与需求之问的矛盾,提高了嵌入式系统的稳定性。

    结论
        从上面的分析和测试可以看出,基于有限状态机的串口通信帧同步方法是本文中提出的3种帧方法中最优的,结构清晰且系统资源利用率高。

        对一个有着完整通信协议的串口中断来说,因为要比较命令头、完成校验、解析数据等需要耗费大量的机器周期,所以嵌入式系统中的串口中断服务程序设计显得更为重要在实际的串口通信程序中,可采用状态机和消息机制相结合的方法,仅在中断服务程序中设置一个标志,而在主程序中根据相应标志来作处理,这样就回避了某些中断可能需要较长处理时间的问题在程序结构上,由于采用状态机的结构,既提高了可读性同时又提高了运行速度,因而该方法不仅是一种很好的帧同步方法,还是一种很不错的串口通信程序设计方法。

    转载于:https://www.cnblogs.com/nxz-diy/p/7009770.html

    展开全文
  • 串口通信帧的同步方法(识别一数据的起始结束)  2012-07-08 23:12:10| 分类: 我的自学实践|举报|字号 订阅   引 言  串口通信是日前单片机和DSP等嵌入式系统...

    串口通信帧的同步方法(识别一帧数据的起始结束)  

    2012-07-08 23:12:10|  分类: 我的自学实践|举报|字号 订阅

     

    引 言
        串口通信是日前单片机和DSP等嵌入式系统之间,以及嵌入式系统与PC机或无线模块之间的一种非常重要且普遍使用的通信方式在嵌入式系统的硬件结构中,通常只有一个8位或16位的CPU,不仅要完成主流程的工作,同时还要处理随时发生的各种中断,因而嵌入式系统中的串口通信程序设计与PC机有很大的不同若嵌入式系统中.中断服务子程序在系统运行过程中占用了较多的时间,就有可能在中断眼务子程序正运行时,又产生一个同类型或其他类型的中断,从而造成主程序得不到执行或后续中断数据丢失所以,嵌入式系统中的串口通信虽然看似简单,但其中仍有许多问题值得研究,例如串口通信过程中的帧同步问题本文针对该问题给出了逐次比较、基于FIFO队列和基于状态机的3种帧同步方法通过测试、分析和比较得出,基于有限状态机的方法是嵌入式系统串口通信中很有效的帧同步方法,同时也是一种很不错的串口通信程序设计结构 。   串口通信的数据帧结构
        现代工业控制,往往需要由多个独立的控制模块来共同完成它们之间通过串口通信完成复杂的控制过程,必须在通信过程中加入必要的通信协议,以提高系统的可靠性和稳定性;而要完成特定的通信协议,就得有一定的同步机制下面介绍一下简化的串口通信数据帧结构,以便分析说明嵌入式系统串口通信过程中的帧同步方法。

        假定串口发送的数据帧结构为:
         

     

    图片

     

        其中:包头用于同步,一般是一个或多个ASCII字符,本文中假定数据帧同步头有2字节(0xAA0x55);包长表示数据包中除去包头和包长的字节数,一般用约定好的几个字节表示;类型为通信协议里规定的命令类型;数据为应发送的主要信息;校验通常采用单字节异或的方法。

    串口通信中的帧同步方法
    2逐次比较的帧同步方法
        首先等待串口数据,将接收到的第1个字节数据与约定好的包头信息的第1个字节进行比较如果不正确,则等待新字节,直到接收的数据与包头信息的第1个字节相同第1个字节比较正确以后,将收到的第2个字节与包头信息的第2个字节进行比较如果仍然正确,则说明串口接收已经同步,可以开始接收数据帧中的数据部分;否则,重新开始同步过程其程序流程如图1所示。

     

    图片

     

        此种方法代码量小,编程简单,一般用于在主程序中以非中断方式接收串口数据、实时性很差、数据帧较短的场合但是,在串口速度过快且包头字节数比较多的情况下,串口实现同步花费的时间很长或很难实现同步例如,串口接收到序列Ox0O OxAA0xAA 0x55,当遇到第一个0xAA时,该方法认为第1个字节正确开始比较第2个同步头第2个字节仍是0xAA而不是0x55,所以必须等待新的字节重新开始比较第1个同步头而紧随其后的是0x55,因而,此时包头的第1个字节也没有同步上事实上,0x00 OxAA是干扰字节,0xAA 0x55才是通信协议中的同步头。

    2.2 基于FIFO队列的帧同步方法
        根据同步包头的长度,定义一个相同长度的全局字节数组,把该数组看成是一个如图2所示的先入先出(FIFO)的队列程序流程如图3所示。

     

    图片

     

        本例中定义两个字节HEADlHEAD2,都初始化为0xFF同步时,丢弃数组头字节HEADl,数组中的所有数据向前移动一个字节,串口接收到的新字节存入数组末字节HEAD2中,将整个数组与协议中的包头信息比较如果正确,则置位已同步标志位,然后开始接收、存储有用数据;否则,继续等待同步串口数据接收完后,不仅要清除已同步标志,还要把HEADlHEAD2两个字节都赋值0xFF;否则,将会影响下一帧数据的同步和接收用前面提到的序列0x00 0xAA 0xAA 0x55…”进行测试,随着串口接收中断收到新的字节帧同步队列中的数据依次为:[0xFF0xFF][0x000xFF][0xAA0x00][0xAA0xAA][0x550xAA]此时,该算法检测出[HEAD2HEAD2]==[0x550xAA],从而实现了同步,置位已同步标志位以便下次进入串口接收中断服务子程序时开始接收数据包的数据部分。

        此种方法与逐次比较的帧同步方法相比,能够比较快速、正确地检测出同步包头;但是如果包头的字节数很多,同步过程中每次进入串口中断服务子程序都要进行大量的字节搬移,将必然耗费很长的时间为了使嵌入式系统更健壮,程序设计应把握的基本原则之一就是使中断处理程序最短所以基于FIFO队列的帧同步方法也不是最优的。

    2.3 基于有限状态机的帧同步方法
        为解决以上问题,可以采用基于有限状态机的设计方法该方法将数据帧的接收过程分为若干个状态:接收信息头HEADl状态、接收信息头HEAD2状态、接收包长状态、接收数据类型状态、接收数据状态及接收校验和状态系统的初始状态为HEADl状态,各接收状态间的状态转移图如图4所示,仍用前面提到的序列0x00 0xAA 0xAA 0x55…”进行测试随着串口接收中断新字节的接收,系统的接收状态依次为HEAD1HEAD1HEAD2HEAD2LEN可见此时就是同步状态该方法也快速、有效地实现了同步;但是需要注意的是,在每一次接收完1帧完整的数据之后,必须把系统的接收状态重新设置为HEADl,否则将会影响下一帧的数据接收。

     

    图片

     

        此后,程序按照协议开始依次接收数据帧长度、命令类型、数据和校验位接收完后,重新设置系统接收状态为HEADl,同时对该数据帧进行校验校验正确后,利用消息机制通知主程序根据命令类型对数据帧进行处理或执行相应的命令操作。
        下面给出该方法在KeilC5l中的示例程序:
        

     

    图片

     


        
        由于采用了状态机和消息机制的结构,上述设计思路快速有效地实现了串口通信的同步,而且程序结构清晰,便于维护,也易于向其他的串口通信协议移植另外,串口中断服务子程序中需要处理的工作很少,每个串口接收中断平均耗时不超过20个机器周期(在单片机AT89C5l中),大大减轻了串口接收中断服务程序的压力,缓解了嵌入式系统有限资源与需求之问的矛盾,提高了嵌入式系统的稳定性。

    结论
        从上面的分析和测试可以看出,基于有限状态机的串口通信帧同步方法是本文中提出的3种帧方法中最优的,结构清晰且系统资源利用率高。

        对一个有着完整通信协议的串口中断来说,因为要比较命令头、完成校验、解析数据等需要耗费大量的机器周期,所以嵌入式系统中的串口中断服务程序设计显得更为重要在实际的串口通信程序中,可采用状态机和消息机制相结合的方法,仅在中断服务程序中设置一个标志,而在主程序中根据相应标志来作处理,这样就回避了某些中断可能需要较长处理时间的问题在程序结构上,由于采用状态机的结构,既提高了可读性同时又提高了运行速度,因而该方法不仅是一种很好的帧同步方法,还是一种很不错的串口通信程序设计方法。


    引 言

      串口通信是日前单片机和DSP等嵌入式系统之间,以及嵌入式系统与PC机或无线模块之间的一种非常重要且普遍使用的通信方式。在嵌入式系统的硬件结构中,通常只有一个8位或16位的CPU,不仅要完成主流程的工作,同时还要处理随时发生的各种中断,因而嵌入式系统中的串口通信程序设计与PC机有很大的不同。若嵌入式系统中.中断服务子程序在系统运行过程中占用了较多的时间,就有可能在中断眼务子程序正运行时,又产生一个同类型或其他类型的中断,从而造成主程序得不到执行或后续中断数据丢失。所以,嵌入式系统中的串口通信虽然看似简单,但其中仍有许多问题值得研究,例如串口通信过程中的帧同步问题。本文针对该问题给出了逐次比较、基于FIFO队列和基于状态机的3种帧同步方法。通过测试、分析和比较得出,基于有限状态机的方法是嵌入式系统串口通信中很有效的帧同步方法,同时也是一种很不错的串口通信程序设计结构。

      1 串口通信的数据帧结构

      现代工业控制,往往需要由多个独立的控制模块来共同完成。它们之间通过串口通信完成复杂的控制过程,必须在通信过程中加入必要的通信协议,以提高系统的可靠性和稳定性;而要完成特定的通信协议,就得有一定的同步机制。下面介绍一下简化的串口通信数据帧结构,以便分析说明嵌入式系统串口通信过程中的帧同步方法。

      假定串口发送的数据帧结构为:

    串口发送的数据帧结构

      其中:包头用于同步,一般是一个或多个ASCII字符,本文中假定数据帧同步头有2字节(0xAA、0x55);包长表示数据包中除去包头和包长的字节数,一般用约定好的几个字节表示;类型为通信协议里规定的命令类型;数据为应发送的主要信息;校验通常采用单字节“异或”的方法。

      2 串口通信中的帧同步方法

      2.1 逐次比较的帧同步方法

      首先等待串口数据,将接收到的第1个字节数据与约定好的包头信息的第1个字节进行比较。如果不正确,则等待新字节,直到接收的数据与包头信息的第1个字节相同。第1个字节比较正确以后,将收到的第2个字节与包头信息的第2个字节进行比较。如果仍然正确,则说明串口接收已经同步,可以开始接收数据帧中的数据部分;否则,重新开始同步过程。其程序流程如图1所示。

    程序流程图

      此种方法代码量小,编程简单,一般用于在主程序中以非中断方式接收串口数据、实时性很差、数据帧较短的场合。但是,在串口速度过快且包头字节数比较多的情况下,串口实现同步花费的时间很长或很难实现同步。例如,串口接收到序列Ox0O OxAA0xAA 0x55…,当遇到第一个“0xAA”时,该方法认为第1个字节正确开始比较第2个同步头。第2个字节仍是“0xAA”而不是“0x55”,所以必须等待新的字节重新开始比较第1个同步头。而紧随其后的是“0x55”,因而,此时包头的第1个字节也没有同步上。事实上,“0x00 OxAA”是干扰字节,“0xAA 0x55”才是通信协议中的同步头。

      2.2 基于FIFO队列的帧同步方法

      根据同步包头的长度,定义一个相同长度的全局字节数组,把该数组看成是一个如图2所示的先入先出(FIFO)的队列。程序流程如图3所示。

    FIFO方式的帧同步头队列

    点击看大图

      本例中定义两个字节HEADl和HEAD2,都初始化为0xFF。同步时,丢弃数组头字节HEADl,数组中的所有数据向前

    移动一个字节,串口接收到的新字节存入数组末字节HEAD2中,将整个数组与协议中的包头信息比较。如果正确,则置位已同步标志位,然后开始接收、存储有用数据;否则,继续等待同步。串口数据接收完后,不仅要清除已同步标志,还要把HEADl和HEAD2两个字节都赋值0xFF;否则,将会影响下一帧数据的同步和接收。用前面提到的序列“0x00 0xAA 0xAA 0x55…”进行测试,随着串口接收中断收到新的字节。帧同步队列中的数据依次为:[0xFF,0xFF]→[0x00,0xFF]→[0xAA,0x00]→[0xAA,0xAA]→[0x55,0xAA]。此时,该算法检测出[HEAD2,HEAD2]==[0x55,0xAA],从而实现了同步,置位已同步标志位以便下次进入串口接收中断服务子程序时开始接收数据包的数据部分。

      此种方法与逐次比较的帧同步方法相比,能够比较快速、正确地检测出同步包头;但是如果包头的字节数很多,同步过程中每次进入串口中断服务子程序都要进行大量的字节搬移,将必然耗费很长的时间。为了使嵌入式系统更健壮,程序设计应把握的基本原则之一就是使中断处理程序最短。所以基于FIFO队列的帧同步方法也不是最优的。

    2.3 基于有限状态机的帧同步方法

      为解决以上问题,可以采用基于有限状态机的设计方法。该方法将数据帧的接收过程分为若干个状态:接收信息头HEADl状态、接收信息头HEAD2状态、接收包长状态、接收数据类型状态、接收数据状态及接收校验和状态。系统的初始状态为HEADl状态,各接收状态间的状态转移图如图4所示,仍用前面提到的序列“0x00 0xAA 0xAA 0x55…”进行测试。随着串口接收中断新字节的接收,系统的接收状态依次为HEAD1→HEAD1→HEAD2→HEAD2→LEN。可见此时就是同步状态。该方法也快速、有效地实现了同步;但是需要注意的是,在每一次接收完1帧完整的数据之后,必须把系统的接收状态重新设置为HEADl,否则将会影响下一帧的数据接收。

    点击看大图

      此后,程序按照协议开始依次接收数据帧长度、命令类型、数据和校验位。接收完后,重新设置系统接收状态为HEADl,同时对该数据帧进行校验。校验正确后,利用消息机制通知主程序根据命令类型对数据帧进行处理或执行相应的命令操作。

      下面给出该方法在KeilC5l中的示例程序:

    点击看大图

    点击看大图

    点击看大图

      由于采用了状态机和消息机制的结构,上述设计思路快速有效地实现了串口通信的同步,而且程序结构清晰,便于维护,也易于向其他的串口通信协议移植。另外,串口中断服务子程序中需要处理的工作很少,每个串口接收中断平均耗时不超过20个机器周期(在单片机

     
    AT89C5l中),大大减轻了串口接收中断服务程序的压力,缓解了嵌入式系统有限资源与需求之问的矛盾,提高了嵌入式系统的稳定性。

      3 结论

      从上面的分析和测试可以看出,基于有限状态机的串口通信帧同步方法是本文中提出的3种帧方法中最优的,结构清晰且系统资源利用率高。

      对一个有着完整通信协议的串口中断来说,因为要比较命令头、完成校验、解析数据等需要耗费大量的机器周期,所以嵌入式系统中的串口中断服务程序设计显得更为重要。在实际的串口通信程序中,可采用状态机和消息机制相结合的方法,仅在中断服务程序中设置一个标志,而在主程序中根据相应标志来作处理,这样就回避了某些中断可能需要较长处理时间的问题。在程序结构上,由于采用状态机的结构,既提高了可读性。同时又提高了运行速度,因而该方法不仅是一种很好的帧同步方法,还是一种很不错的串口通信程序设计方法。


    展开全文
  • 异步同步通信数据格式

    千次阅读 2020-07-10 13:52:52
    串口扫盲六:异步通信方式 </div> 串行通信可以分为两种类型:同步通信、异步通信. 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从"数据输入寄存器"中读得的信息,只是有效数字,不包含起始位,校验位,停止位信息.
    展开全文
  • 串口通信基本概念(一)——串行与并行通信,同步与异步通信 一、串口通信简介 串口通信,顾名思义也就是利用串行接口进行通信。串行接口指串口按位(bit)发送和接收字节。尽管比按字节(byte)传输的并行通信慢,...
  •  串口通信是日前单片机和DSP等嵌入式系统之间,以及嵌入式系统与PC机或无线模块之间的一种非常重要且普遍使用的通信方式在嵌入式系统的硬件结构中,通常只有一个8位或16位的CPU,不仅要完成主流程的工作,同时还要...
  • 串行通信——异步串行通信

    千次阅读 2019-03-23 16:06:08
    I、串口通信简介 一、定义 二、意义 三、分类 II、异步串行通信详解 一、数据格式 1. 起始位 2. 数据位 3. 奇偶校验位 4. 停止位 二、通信制式 1. 单工 2. 半双工 3. 全双工 三、通信速率 I、串口...
  • 难的东西学不会是因为简单的知识没学好 ...(2)一种特定的通信协议,一般叫串口通信串行通信,UART USART等都指串口通信。 (3)这种通信的特点:异步,串行,全双工 1.1.1串行通信的工作方式: (1)3根线(GND TX
  • 对于串口通信部分来说,单片机给计算机发送字符串好说,有多大的数组就发送多少个字节即可,但是单片机接收数据,接收多少个才应该是一完整的数据呢?数据接收的起点在哪里,结束在哪里? 我们编程的思路就是这样...
  • 串行通信

    2014-07-11 11:21:08
    使用串口通信时,发送和接收到的每一个字符实际上都是一次一位的传送的,每一位为1或者为0。 串行通信的分类 串行通信可以分为同步通信和异步通信两类。同步通信是按照软件识别同步字符来实现数据的发送和接收,...
  • 5)) //判断用的是哪个串口 串口1与上位机通信 { HAL_UART_Transmit(&huart1,flag1,6, 0xffff); //用于测试串口是否进入中断回调 temp1 = huart1.Instance->DR; //转移接收到的数据 UartPCRXData...
  • 串口通信是日前单片机和DSP等嵌入式系统之间,以及嵌入式系统与PC机或无线模块之间的一种非常重要且普遍使用的通信方式在嵌入式系统的硬件结构中,通常只有一个8位或16位的CPU,不仅要完成主流程的工作,同时...
  • 串行通信基础

    2020-06-08 10:34:54
    字符帧字符帧也叫做数据帧,由起始位,数据位(纯数据或者多一个校验位)和停止位三部分构成 -波特率,也叫比特数,表示每秒钟传送二进制数码的位数 异步通信 同步通信 定义:连续串行传送数据的通信方式,需要...
  • Arduino 串行通信之串口通信 UART 原理及释义

    万次阅读 多人点赞 2019-03-28 09:43:53
    本系列中提到的串口通信一般指Arduino上面的USART通信模式,USART也是串行通信的一种,可以有硬串口,软串口两种实现方式,并且USART是一种异步串行通信.   相关案例: 环境监测 温湿度传感器 案例  
  • 串口通信是非常重要的,首先了解下基础计算机串口通信基础随着多微机系统的广泛应用和计算机网络技术的普及,计算机的通信功能越越显得重要。计算机通信是指计算机与外部设备或计算机与计算机之间的信息交换。通信有...
  • 单片机串行通信

    2020-08-07 12:11:42
    异步通信:以字符(或字节)为单位组成数据进行的传送称为异步通信。一数据可由:起始位、数据位、可编程校验位、停止位。 同步通信:数据以块为单位连续进行的传送称为同步通信。在发送第一块数据时,首先发送...
  • Qt实现串口通信示例 前言:以下串口通信示例并不完全属于原创,参考了现有网上前辈们的资源,最后结合部分个人的思想,所以下述博客会将实现的原理及代码的案例进行公开。 这里我们先上效果图: 一、串口通信...
  • 1.串口通信基础 通信协议:物理层规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输;协议层规定通讯逻辑,统一收发双方的数据打包、解包标准。 串口通讯物理层之RS-232 RS-232标准主要...
  • 单片机串口通信小结

    千次阅读 2013-12-19 20:14:32
    网上有很多讲串口通信的知识点,看了很多,今天就总结一下吧,欢迎拍砖! 1.数据传输 单片机的串行通信使用的是异步串行通信,所谓异步就是指发送端和接收端使用的不是同一时钟。异步串行通信通常以字符(或者字节)...
  • 串口通信一般有两种方式: 1、字符 2、字节   各方讨论: UART传输只面向二进制的字节形式。 但是,二进制的形式可以通过其他编码转换方法 转到别的应用形态,字符只是其中一种。 ASCII方式传送字符,...
  • 51单片机串口通信的发送与接收 字符

    万次阅读 多人点赞 2019-03-10 13:21:12
    串行发送完毕后,将在标志位 TI 置 1,同样,当收到了数据后,也会在 RI 置 1。 无论 RI 或 TI 出现了 1,只要串口中断处于开放状态,单片机都会进入串口中断处理程序。 在中断程序中,要区分出来究竟是发...
  •  异步通信数据的第一位是开始位,在通信线上没有数据传送时处于逻辑“1”状态。当发送设备要发送一个字符数据时,首先发出一个逻辑“0”信号,这个逻辑低电平就是起始位。起始位通过通信线传向接收设备,当接收...
  • 串口通信

    2017-02-13 19:39:22
    1.计算机通信 计算机直接式通信是将计算机技术和通信技术的相结合,完成计算机与外部设备或计算机与计算机之间的信息交换 。可以分为两大类:并行通信与串行... 串行通信:串口通信是指采用串行通信协议在一条信号线上

空空如也

空空如也

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

串行通信字符帧