CN105512061A - 对uart数据进行接收和解析的方法以及装置 - Google Patents

对uart数据进行接收和解析的方法以及装置 Download PDF

Info

Publication number
CN105512061A
CN105512061A CN201510824839.1A CN201510824839A CN105512061A CN 105512061 A CN105512061 A CN 105512061A CN 201510824839 A CN201510824839 A CN 201510824839A CN 105512061 A CN105512061 A CN 105512061A
Authority
CN
China
Prior art keywords
uart
data
module
resolve
processing function
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201510824839.1A
Other languages
English (en)
Inventor
贾天亮
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Techshino Technology Co Ltd
Original Assignee
Beijing Techshino Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Techshino Technology Co Ltd filed Critical Beijing Techshino Technology Co Ltd
Priority to CN201510824839.1A priority Critical patent/CN105512061A/zh
Publication of CN105512061A publication Critical patent/CN105512061A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/24Handling requests for interconnection or transfer for access to input/output bus using interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0032Serial ATA [SATA]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/24Interrupt
    • G06F2213/2412Dispatching of interrupt load among interrupt handlers in processor system or interrupt controller
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Communication Control (AREA)

Abstract

本发明公开了一种对UART数据进行接收和解析的方法以及装置,属于数据传输领域,所述方法包括:当检测到UART中断标记时,进入UART中断处理函数;将UART缓存中的数据保存到内存中;清除UART中断标记;判断是否检测到UART中断标记,若是,转至所述将UART缓存中的数据保存到内存中,否则,执行下一步骤;退出UART中断处理函数;当内存中的数据有更新时,对内存中的数据进行解析。与现有技术相比,本发明的对UART数据进行接收和解析的方法降低了微控制器的工作负荷,不会对微控制器当前进行的操作造成不利影响,提高了软件的运行速度和运行效率,提高了数据接收和解析的正确性,降低了系统的功耗。

Description

对UART数据进行接收和解析的方法以及装置
技术领域
本发明涉及数据传输领域,特别是指一种对UART数据进行接收和解析的方法以及装置。
背景技术
通用异步收发器(UniversalAsynchronousReceiverandTransmitter;UART)是用硬件实现异步串行通信的通信接口电路,UART异步串行通信接口是电子电路设计中最常见的接口,可用来与上位机或其他外部设备进行数据通信。由于UART应用的普通性,所以大部分微控制器内部都集成有UART模块。
UART模块以字节为单位接收数据,UART模块的缓存每接收一个字节(我们将UART缓存中的数据称为UART数据),UART模块就会设置一个中断标记,当微控制器使能了UART模块的中断使能后,就会触发一个中断操作,微控制器会中断当前的操作,跳到UART中断处理函数中执行相应的操作。
微控制器处理UART的中断操作如图1所示,而现有技术的UART中断处理函数对UART数据进行接收和解析的方法如图2所示。
现有技术中,若UART模块的缓存接收到了一个字节的数据,微控制器会进入UART中断处理函数,并接收该数据至内存,然后对该数据进行解析,解析完毕后退出UART中断处理函数,如此循环。
现有技术的UART中断处理函数对UART数据进行接收和解析的方法存在的问题是:
一、微控制器的工作负荷大;由于微控制器要不断的进出中断来完成UART数据的接收和解析工作,这就使的微控制器要不断的中断当前操作、保持中断现场、执行中断处理函数、然后退出中断、恢复中断现场,这就使得微控制器的工作负荷非常的大。
二、对微控制器当前进行的操作造成不利影响;微控制器在处理中断的时候需要中断当前的操作,频繁的进出中断将影响到其它的操作,甚至造成某些操作的失败。例如当某器件对操作时序要求非常严格的时候,如果在对此器件操作的过程,频繁的进出UART中断处理,将会使对此器件的操作失败,严重情况下可能会造成整个程序的崩溃。
三、降低了软件的运行速度和运行效率;微控制器频繁的进出UART中断,整体上降低了软件的运行速度和运行效率,因为微控制器的一部分的工作消耗到了保存中断现场、恢复中断现场上。
四、可能使数据的丢失,降低了数据接收的正确性;由于数据接收后还要在UART中断处理函数中进行解析,这就很可能导致不能及时的退出该函数,进入UART中断处理函数后,如果不能及时的退出该函数,将会造成UART模块新接收的数据还没来得及被读取,就被后面的数据所覆盖,UART的数据接收缓存的大小是一定的(一般为一个字节),当已经有数据存储到了缓存中,下次有数据到来的时候,UART模块不管当前缓存中有没有数据,会直接将新数据放到UART缓存中,覆盖当前数据,从而造成数据的丢失。
发明内容
本发明提供一种对UART数据进行接收和解析的方法以及装置,该方法降低了微控制器的工作负荷,不会对微控制器当前进行的操作造成不利影响,提高了软件的运行速度和运行效率,提高了数据接收和解析的正确性,降低了系统的功耗。
为解决上述技术问题,本发明提供技术方案如下:
一种对UART数据进行接收和解析的方法,包括:
当检测到UART中断标记时,进入UART中断处理函数;
将UART缓存中的数据保存到内存中;
清除UART中断标记;
判断是否检测到UART中断标记,若是,转至所述将UART缓存中的数据保存到内存中,否则,执行下一步骤;
退出UART中断处理函数;
当内存中的数据有更新时,对内存中的数据进行解析。
一种对UART数据进行接收和解析的装置,包括:
开始模块,用于当检测到UART中断标记时,进入UART中断处理函数;
接收模块,用于将UART缓存中的数据保存到内存中;
清除模块,用于清除UART中断标记;
第一判断模块,用于判断是否检测到UART中断标记,若是,转至所述接收模块,否则,执行下一模块;
退出模块,用于退出UART中断处理函数;
解析模块,用于当内存中的数据有更新时,对内存中的数据进行解析。
本发明具有以下有益效果:
与现有技术相比,本发明的对UART数据进行接收和解析的方法中,在进入UART中断处理函数后,开始读取UART缓存中的数据到内存中,接收完成后,并不立刻退出,而是重新检测UART端口是否接收到了新的数据,如果接收到的话,继续读取UART缓存中的数据到内存中,直至数据接收完成。
本发明的对UART数据进行接收和解析的方法降低了微控制器的工作负荷。本发明只需进入UART中断一次,就能完成UART数据的接收,微控制器不需要不断的中断当前操作、保持中断现场、执行中断处理函数、然后退出中断、恢复中断现场的过程,这就降低了微控制器的工作负荷。
本发明的对UART数据进行接收和解析的方法不会对微控制器当前进行的操作造成不利影响。由于本发明的方法在接收UART数据的时候,一次中断即可完成,不用频繁的进出中断从而影响到其它的操作,不会对整体程序的正常执行造成影响。
本发明的对UART数据进行接收和解析的方法提高了软件的运行速度和运行效率。微控制器不用频繁的进出UART中断,不用将资源消耗到了保存中断现场、恢复中断现场上,减少了微控制器的一些无谓的工作开销,大大提高了微控制器的使用效率,从而大大提高了整体代码的执行速度和执行效率,提高了软件的运行速度和运行效率。
本发明的对UART数据进行接收和解析的方法提高了数据接收的正确性。本发明在进入UART中断后,在中断函数内循环接收UART数据,直至UART数据接收完成,从而提高了UART数据接收的准确性。不会出现现有技术中的如下现象:如果一次中断发生后,UART缓存中的数据被读取后,而此时微控制器还没有来的及退出UART中断处理函数时候,又有新数据被UART接口接收的话,此时将会造成这部分数据的丢失。
而且本发明中数据的接收是在UART中断处理函数中完成,把现有技术中在UART中断处理函数中完成的解析工作放到主程序中完成,两者互不影响,提高了接收和解析的正确性;并且使得UART中断处理函数在接收数据后不用完成其他的工作,进一步减少了来不及退出UART中断处理函数而造成数据丢失的情况,进一步提高了数据接收的正确性。
另外,发明人还发现,本发明的对UART数据进行接收和解析的方法降低了系统的功耗。频繁的进出UART中断,将会使微控制器的工作负荷非常的大,从而使系统的功耗也非常的高。而通过本发明中的方法,降低了微控制器的工作负荷,从而在一定程度上降低了系统的功耗。
故本发明的对UART数据进行接收和解析的方法降低了微控制器的工作负荷,不会对微控制器当前进行的操作造成不利影响,提高了软件的运行速度和运行效率,提高了数据接收和解析的正确性,降低了系统的功耗。
附图说明
图1为现有技术中微控制器处理UART时的中断操作流程图;
图2为现有技术的UART中断处理函数流程图;
图3为UART的数据传输格式示意图;
图4为本发明的对UART数据进行接收和解析的方法的一个实施例的流程图;
图5为本发明的对UART数据进行接收和解析的装置的一个实施例的流程图。
具体实施方式
为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
UART(UniversalAsynchronousReceiverandTransmitter)通用异步收发器(异步串行通信口),是一种通用的数据通信协议。UART使用的是异步,串行通信。
串行通信是指利用一条传输线将资料一位一位地顺序传送。特点是通信线路简单,利用简单的线缆就可实现通信,降低成本。适用于远距离通信,但传输速度慢的应用场合。
一方面,本发明提供一种对UART数据进行接收和解析的方法,其一个实施例如图4所示,包括:
步骤101:当检测到UART中断标记时,进入UART中断处理函数;在主程序运行后,若检测到UART中断标记时,微控制器会执行UART中断处理函数;具体流程如图1所示。
步骤102:将UART缓存中的数据保存到内存中;
此处的UART缓存指UART的输入缓冲寄存器,UART在接收数据时,会用到输入移位寄存器以及输入缓冲寄存器,其中输入移位寄存器以接收时钟的速率把出现在串行数据输入线上的数据逐位移入,当数据装满后,并行送往输入缓冲寄存器,输入缓冲寄存器从输入移位寄存器中接收并行数据,然后由微控制器取走。
步骤103:清除UART中断标记;
输入缓冲寄存器中的数据由微控制器取走之后,微控制器会清除UART中断标记(一般是使中断标记的值由逻辑1变为逻辑0)。
步骤104:判断是否检测到UART中断标记,若是,转至步骤102,否则,执行下一步骤;
清除UART中断标记后,并不会立即退出UART中断处理函数,而是继续检测UART中断标记,来判断UART缓存是否接收到了新的数据,如果检测到UART中断标记的话,则证明UART缓存接收到了新的数据,此时继续读取UART缓存中的数据到内存中,直至数据接收完成;如果没有检测到UART中断标记的话,则证明UART缓存没有接收到新的数据,此时进行后续操作。
步骤105:退出UART中断处理函数;当UART中断处理函数接收完数据后,退出UART中断处理函数,微控制器执行其他的操作。
步骤201:当内存中的数据有更新时,对内存中的数据进行解析;退出UART中断处理函数后,若主程序检测到内存中的数据有更新时,则对内存中的数据进行解析。
注意,本实施例的步骤101-105是UART中断处理函数接收数据的过程,步骤201是解析数据的过程,它们之间可以是串行顺序执行的,也可以是并行分别执行的。
在有的处理器中,UART模块除了可以通过UART中断标记来检查UART缓存中是否有数据外,某些状态寄存器中的值也能用来判断UART缓存中是否有数据,这并不影响本的内容。
与现有技术相比,本实施例的对UART数据进行接收和解析的方法中,在进入UART中断处理函数后,开始读取UART缓存中的数据到内存中,接收完成后,并不立刻退出,而是重新检测UART端口是否接收到了新的数据,如果接收到的话,继续读取UART缓存中的数据到内存中,直至数据接收完成。
本实施例的对UART数据进行接收和解析的方法降低了微控制器的工作负荷。本实施例只需进入UART中断一次,就能完成UART数据的接收,微控制器不需要不断的中断当前操作、保持中断现场、执行中断处理函数、然后退出中断、恢复中断现场的过程,这就降低了微控制器的工作负荷。
本实施例的对UART数据进行接收和解析的方法不会对微控制器当前进行的操作造成不利影响。由于本实施例的方法在接收UART数据的时候,一次中断即可完成,不用频繁的进出中断从而影响到其它的操作,不会对整体程序的正常执行造成影响。
本实施例的对UART数据进行接收和解析的方法提高了软件的运行速度和运行效率。微控制器不用频繁的进出UART中断,不用将资源消耗到了保存中断现场、恢复中断现场上,减少了微控制器的一些无谓的工作开销,大大提高了微控制器的使用效率,从而大大提高了整体代码的执行速度和执行效率,提高了软件的运行速度和运行效率。
本实施例的对UART数据进行接收和解析的方法提高了数据接收的正确性。本实施例在进入UART中断后,在中断函数内循环接收UART数据,直至UART数据接收完成,从而提高了UART数据接收的准确性。不会出现现有技术中的如下现象:如果一次中断发生后,UART缓存中的数据被读取后,而此时微控制器还没有来的及退出UART中断处理函数时候,又有新数据被UART接口接收的话,此时将会造成这部分数据的丢失。
而且本实施例中数据的接收是在UART中断处理函数中完成,把现有技术中在UART中断处理函数中完成的解析工作放到主程序中完成,两者互不影响,提高了接收和解析的正确性;并且使得UART中断处理函数在接收数据后不用完成其他的工作,进一步减少了来不及退出UART中断处理函数而造成数据丢失的情况,进一步提高了数据接收的正确性。
另外,发明人还发现,本实施例的对UART数据进行接收和解析的方法降低了系统的功耗。频繁的进出UART中断,将会使微控制器的工作负荷非常的大,从而使系统的功耗也非常的高。而通过本实施例中的方法,降低了微控制器的工作负荷,从而在一定程度上降低了系统的功耗。
故本实施例的对UART数据进行接收和解析的方法降低了微控制器的工作负荷,不会对微控制器当前进行的操作造成不利影响,提高了软件的运行速度和运行效率,提高了数据接收和解析的正确性,降低了系统的功耗。
当未检测UART中断标记,没有接收到数据时,可以不立即退出UART中断处理函数,而是定时一段时间后再检测UART中断标记,具体为,在判断是否检测到UART中断标记之后,退出UART中断处理函数之前还包括以下步骤:
延迟一段定时时间;
判断是否检测到UART中断标记,若是,转至将UART缓存中的数据保存到内存中,否则,执行下一步骤(退出UART中断处理函数)。
当未检测UART中断标记,没有接收到数据时,不立即退出UART中断处理函数,而是定时一段时间后再检测UART中断标记,若此时检测到UART中断标记,则表明数据传输未完成,继续执行前面的接收数据的过程,若此时没有检测到UART中断标记,则表明数据传输已经完成,退出UART中断处理函数。若没有定时环节,有可能在数据未接收完毕时就退出了UART中断处理函数,此时有新的数据传来后,还需要再次进入UART中断处理函数。通过定时可以进一步减少进出UART中断处理函数的次数。
本实施例的对UART数据进行接收和解析的方法进一步降低了微控制器的工作负荷,更加不会对微控制器当前进行的操作造成不利影响,进一步提高了软件的运行速度和运行效率,进一步提高了数据接收和解析的正确性,以及进一步降低了系统的功耗。
当然,还可以将延迟一段定时时间的步骤放在清除UART中断标记之后,判断是否检测到UART中断标记之前,也能达到上面实施例的目的。
上述定时时间可以为UART接收一帧数据的时间的倍数。
异步通信以一个字符为传输单位,通信中两个字符间的时间间隔多少是不固定的,然而在同一个字符中的两个相邻位间的时间间隔是固定的。
数据传送速率用波特率来表示,即每秒钟传送的二进制位数。例如数据传送速率为120字符/秒,而每一个字符为10位(1个起始位,7个数据位,1个校验位,1个结束位),则其传送的波特率为10×120=1200字符/秒=1200波特(即1200bps)。
UART的数据传输格式如图3所示,(其中,LSB是leastsignificantbit的缩写,中文为最低有效位;MSB是MostSignificantBit的缩写,中文为最高有效位,LSB的前一位),其中各位的意义如下:
起始位(图中为LSB的前一位):先发出一个逻辑0信号,表示传输字符的开始。
数据位(图中为LSB、MSB以及它们之间的各个位):可以是5~8位逻辑0或1。如ASCII码(7位),扩展BCD码(8位)。使用小端模式传输。(小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。)
校验位(图中为MSB的后一位):数据位加上这一位后,使得1的位数应为偶数(偶校验)或奇数(奇校验)。
停止位(图中为校验位的后一位):它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。
空闲位(图中为停止位的后一位):处于逻辑1状态,表示当前线路上没有资料传送。
注:异步通信是按字符传输的,接收设备在收到起始信号之后只要在一个字符的传输时间内能和发送设备保持同步就能正确接收。下一个字符起始位的到来又使同步重新校准(依靠检测起始位来实现发送与接收方的时钟自同步的)。
本实施例假设UART通讯波特率为Bau,一帧数据由S个bit组成,
则一秒钟UART端口所接收的帧数FR=Bau/S,那么每帧数据传输的周期CY=1/FR(秒),本实施例设置定时时间Time=n*CY(其中n为整数,可以根据实际应用确定),即如果连续n帧时间内UART端口没有再收到到数据的话,就认为该次接收行为后续再无数据,本次接收完成。
这样设置定时时间既可以保证在数据未接收完毕时就退出了UART中断处理函数的情况不会发生,又不会使微处理器等待时间过长而浪费时间,提高了微处理器的工作效率。
优选的,定时时间可以为10-500ms,具体的:在应用中,UART常用的最低的波特率为9600bps,以一帧为8bit,经过实际测试,选择10倍帧率的延时时间最为合适(即n=10),Time=1/(9600/8)*10=8.3ms,考虑一定的余量,Time=10ms);
解析完数据后,就要执行解析后的数据,一般的一帧完整的数据很难通过一次发送完毕,需要多次发送,在多次解析后,若解析出的数据组成一帧完整的数据,则根据这一帧完整的数据进行相应的处理。
现有技术中,解析出一帧完整的数据后,还是在UART中断处理函数中进行相应的处理,使得UART中断处理函数更不能及时的退出,进一步降低了数据接收的正确性,本实施例能够很好地解决这个问题。
下面以一个优选的实施例对本进行更详细的描述:
若检测到UART中断标记,则进入UART中断处理函数。
将UART缓存中的数据保存到内存中;内存中设置有如下的数据接收管理结构体:
其中,uartbuf[TL]表示一个数据接收缓存,TL为该缓存的大小,单位是字节;dataddr表示下一个被接收数据在缓存中的存放地址,recnum表示当前缓存中所保存数据个数,每接收到一个新的数据,recnum都会自加1。
清除UART中断标记。
判断是否检测到UART中断标记,若是,转至将UART缓存中的数据保存到内存中,否则,执行下一步骤。
启动定时器,其中定时时间设置为10ms。
判断定时时间是否到达,若是,执行下一步骤,否则,继续执行本步骤。
判断是否检测到UART中断标记,若是,转至所述将UART缓存中的数据保存到内存中,否则,执行下一步骤。
退出UART中断处理函数。
当内存中的数据有更新时,对内存中的数据进行解析;内存中设置有如下的数据解析管理结构体:
其中,analysis_addr表示下一个要解析的数据在缓存中的地址,默认值为NULL;analysis_num表示当前需要解析的数据个数,默认值为0。
解析时,首先判断analysis_num是否等于recnum,若等于,表示没有新数据需要解析,继续执行本步骤,否则,认为有新数据需要解析,执行下一步骤。
根据dataddr和recnum计算出当前新接收的数据(可能一个字节或几个字节)在uartbuf中存放的起始地址,并赋值给analysis_addr。
从analysis_addr为起始地址,将接收的数据(recnum个字节)一一解析。
判断是否解析完一帧完整的数据,若是,执行下一步骤,否则,更新analysis_num使其等于recnum,并转至判断analysis_num是否等于recnum的步骤,为解析本帧数据剩下的字节做准备。
根据一帧完整的数据进行处理。
更新recnum=analysis_num=0,并转至判断analysis_num是否等于recnum的步骤,为解析下一帧数据做准备。
另一方面,本发明提供一种对UART数据进行接收和解析的装置,其一个实施例如图5所示,包括:
开始模块11,用于当检测到UART中断标记时,进入UART中断处理函数;
接收模块12,用于将UART缓存中的数据保存到内存中;
清除模块13,用于清除UART中断标记;
第一判断模块14,用于判断是否检测到UART中断标记,若是,转至接收模块12,否则,执行下一模块;
退出模块15,用于退出UART中断处理函数;
解析模块21,用于当内存中的数据有更新时,对内存中的数据进行解析。
故本实施例的对UART数据进行接收和解析的装置降低了微控制器的工作负荷,不会对微控制器当前进行的操作造成不利影响,提高了软件的运行速度和运行效率,提高了数据接收和解析的正确性,降低了系统的功耗。
当未检测UART中断标记,没有接收到数据时,可以不立即退出UART中断处理函数,而是定时一段时间后再检测UART中断标记,具体为,第一判断模块之后,退出模块之前还包括:
第一定时模块,用于延迟一段定时时间;
第二判断模块,用于判断是否检测到UART中断标记,若是,转至接收模块,否则,执行下一模块。
本实施例的对UART数据进行接收和解析的装置进一步降低了微控制器的工作负荷,更加不会对微控制器当前进行的操作造成不利影响,进一步提高了软件的运行速度和运行效率,进一步提高了数据接收和解析的正确性,以及进一步降低了系统的功耗。
当然,还可以在清除模块之后,第一判断模块之前包括有:
第二定时模块,用于延迟一段定时时间,也能达到上面实施例的目的。
优选的,定时时间可以为10-500ms,具体的:在应用中,UART常用的最低的波特率为9600bps,以一帧为8bit,经过实际测试,选择10倍帧率的延时时间最为合适(即n=10),Time=1/(9600/8)*10=8.3ms,考虑一定的余量,Time=10ms);
解析完数据后,就要执行解析后的数据,一般的一帧完整的数据很难通过一次发送完毕,需要多次发送,具体的,解析模块之后还包括:
处理模块,用于若解析出的数据组成一帧完整的数据,则根据这一帧完整的数据进行相应的处理。
现有技术中,解析出一帧完整的数据后,还是在UART中断处理函数中进行相应的处理,使得UART中断处理函数更不能及时的退出,进一步降低了数据接收的正确性,本实施例能够很好地解决这个问题。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (10)

1.一种对UART数据进行接收和解析的方法,其特征在于,包括:
当检测到UART中断标记时,进入UART中断处理函数;
将UART缓存中的数据保存到内存中;
清除UART中断标记;
判断是否检测到UART中断标记,若是,转至所述将UART缓存中的数据保存到内存中,否则,执行下一步骤;
退出UART中断处理函数;
当内存中的数据有更新时,对内存中的数据进行解析。
2.根据权利要求1所述的对UART数据进行接收和解析的方法,其特征在于,所述判断是否检测到UART中断标记之后,退出UART中断处理函数之前还包括:
延迟一段定时时间;
判断是否检测到UART中断标记,若是,转至所述将UART缓存中的数据保存到内存中,否则,执行下一步骤。
3.根据权利要求1所述的对UART数据进行接收和解析的方法,其特征在于,所述清除UART中断标记之后,判断是否检测到UART中断标记之前还包括:
延迟一段定时时间。
4.根据权利要求2或3所述的对UART数据进行接收和解析的方法,其特征在于,所述定时时间为10-500ms。
5.根据权利要求1-3任一所述的对UART数据进行接收和解析的方法,其特征在于,所述对内存中的数据进行解析之后还包括:
若解析出的数据组成一帧完整的数据,则根据这一帧完整的数据进行相应的处理。
6.一种对UART数据进行接收和解析的装置,其特征在于,包括:
开始模块,用于当检测到UART中断标记时,进入UART中断处理函数;
接收模块,用于将UART缓存中的数据保存到内存中;
清除模块,用于清除UART中断标记;
第一判断模块,用于判断是否检测到UART中断标记,若是,转至所述接收模块,否则,执行下一模块;
退出模块,用于退出UART中断处理函数;
解析模块,用于当内存中的数据有更新时,对内存中的数据进行解析。
7.根据权利要求6所述的对UART数据进行接收和解析的装置,其特征在于,所述第一判断模块之后,退出模块之前还包括:
第一定时模块,用于延迟一段定时时间;
第二判断模块,用于判断是否检测到UART中断标记,若是,转至所述接收模块,否则,执行下一模块。
8.根据权利要求6所述的对UART数据进行接收和解析的装置,其特征在于,所述清除模块之后,第一判断模块之前还包括:
第二定时模块,用于延迟一段定时时间。
9.根据权利要求7或8所述的对UART数据进行接收和解析的装置,其特征在于,所述定时时间为10-500ms。
10.根据权利要求6-8任一所述的对UART数据进行接收和解析的装置,其特征在于,所述解析模块之后还包括:
处理模块,用于若解析出的数据组成一帧完整的数据,则根据这一帧完整的数据进行相应的处理。
CN201510824839.1A 2015-11-24 2015-11-24 对uart数据进行接收和解析的方法以及装置 Pending CN105512061A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510824839.1A CN105512061A (zh) 2015-11-24 2015-11-24 对uart数据进行接收和解析的方法以及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510824839.1A CN105512061A (zh) 2015-11-24 2015-11-24 对uart数据进行接收和解析的方法以及装置

Publications (1)

Publication Number Publication Date
CN105512061A true CN105512061A (zh) 2016-04-20

Family

ID=55720059

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510824839.1A Pending CN105512061A (zh) 2015-11-24 2015-11-24 对uart数据进行接收和解析的方法以及装置

Country Status (1)

Country Link
CN (1) CN105512061A (zh)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101136735A (zh) * 2006-09-12 2008-03-05 中兴通讯股份有限公司 使用通用异步收发报机的半双工串口通信系统及通信方法
CN101146090A (zh) * 2007-10-16 2008-03-19 深圳国人通信有限公司 一种基于usart总线的发送接收数据的方法及其装置
CN201349219Y (zh) * 2008-12-21 2009-11-18 重庆川仪自动化股份有限公司 异步通信控制器
CN102546843A (zh) * 2012-01-17 2012-07-04 厦门雅迅网络股份有限公司 一种通过软件模拟实现多个uart通信接口的方法
CN102882754A (zh) * 2012-09-29 2013-01-16 南京国电南自轨道交通工程有限公司 重复中断方式485方向控制方法
US20130219159A1 (en) * 2012-02-22 2013-08-22 Atmel Corporation Single-wire bootloader for target device with self-programming capability

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101136735A (zh) * 2006-09-12 2008-03-05 中兴通讯股份有限公司 使用通用异步收发报机的半双工串口通信系统及通信方法
CN101146090A (zh) * 2007-10-16 2008-03-19 深圳国人通信有限公司 一种基于usart总线的发送接收数据的方法及其装置
CN201349219Y (zh) * 2008-12-21 2009-11-18 重庆川仪自动化股份有限公司 异步通信控制器
CN102546843A (zh) * 2012-01-17 2012-07-04 厦门雅迅网络股份有限公司 一种通过软件模拟实现多个uart通信接口的方法
US20130219159A1 (en) * 2012-02-22 2013-08-22 Atmel Corporation Single-wire bootloader for target device with self-programming capability
CN102882754A (zh) * 2012-09-29 2013-01-16 南京国电南自轨道交通工程有限公司 重复中断方式485方向控制方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
CHENFANG7977: "UART中断浅析", 《HTTP://BLOG.163.COM/CHENFANG7977%40YEAH/BLOG/STATIC/128274196200911144374278/》 *
GQ坚守: "单片机]51单片机UART串口中断问题", 《HTTP://TIEBA.BAIDU.COM/P/3153251405》 *
ZJPING0815、NE5532: "UART在中断接收多字节", 《HTTP://BBS.21IC.COM/ICVIEW-623580-1-1.HTML》 *

Similar Documents

Publication Publication Date Title
CN101146102B (zh) Rru网络中hdlc数据下行、上行的方法及通讯装置
CN103473196B (zh) 一种1553b总线与星内设备总线间的遥测遥控数据传输装置
CN103634150B (zh) 一种冗余的高安全性can总线通信方法
CN110213143B (zh) 一种1553b总线ip核及监视系统
CN106155960B (zh) 基于gpio握手和edma的uart串口通信方法
CN108234267B (zh) 一种基于m-lvds实时多主高速总线的通信系统
CN104008078B (zh) 一种基于fpga的数据传输板之间进行高速传输的方法
CN111010253B (zh) 一种基于hinoc协议的himac拆帧系统、方法
CN102664779B (zh) 一种can总线数据传送方法
CN101699419B (zh) 数据传输方法以及使用该方法的通用串行总线主机控制器
US7634692B2 (en) SATA primitive prediction and correction
CN111651256B (zh) 一种基于FreeRTOS的串行通信数据同步方法
CN109101453B (zh) 异步串行通信采样系统和方法
CN102546084B (zh) 异步串行通信数据接收时的抗干扰纠错采样系统和方法
CN104199795A (zh) 一种总线架构
KR100898645B1 (ko) 활성 전원 관리 상태로부터의 탈출 대기 시간의 최적화
CN105446925A (zh) 提高串口数据接收正确性的方法和装置
JP2018518765A (ja) 独立したuart brk検出
CN105045743A (zh) 一种具备优先级调度的多协议转换方法
CN103577378A (zh) 一种全双工异步串行通信方法
CN103107862A (zh) 逻辑器件及其mdio数据发送方法
CN105512061A (zh) 对uart数据进行接收和解析的方法以及装置
CA1196405A (en) Apparatus for synchronizing a stream of data bits received over a single coaxial conductor
CN106294235A (zh) 一种基于轮询/中断的实时虚拟无线电数据的同步方法
KR20170094699A (ko) 디지털 데이터 통신장치 및 데이터 모의장치

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20160420