一种基于单片机异步串行端口多通道数据传输方法及系统的制作方法

文档序号:8342583阅读:450来源:国知局
一种基于单片机异步串行端口多通道数据传输方法及系统的制作方法
【技术领域】
[0001]本发明涉及单片机数据传输领域,特别涉及一种基于单片机异步串行端口多通道数据传输方法及系统。
【背景技术】
[0002]近年来单片机技术迅猛发展,在工业控制领域广泛应用。例如:意法半导体为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核,时钟频率最大可以达到72MHZ,从闪存执行代码,STM32的功耗36mA,是32位市场上功耗最低的产品。同时STM32最多可支持5路串口,有分数波特率发生器,支持同步单线通信和半双工单线通信。STM32的串口最高可以工作在全双工模式下的115200pbs,可以满足和工业PC及触摸屏的速度要求。
[0003]在数据的传输方面不仅要求高速型,而且在很多场合需要多种数据同一时刻同时传输,即多数据多通道同时传输。目前多采用根据需要的最大的数据通道数在软件中定义固定通道数的方式实现,但此方式当数据类型小于固定通道数时,不仅会造成通道的浪费,而且使数据的接收和处理时间延长。

【发明内容】

[0004]本发明所要解决的技术问题是提供一种基于单片机异步串行端口多通道数据传输方法及系统,其数据通道数始终和数据长度码保持一致。
[0005]本发明解决上述技术问题的技术方案如下:
[0006]一种基于单片机异步串行端口多通道数据传输方法,包括如下步骤:
[0007]步骤1,配置单片机异步串行端口 ;
[0008]步骤2,单片机接收第一数据;
[0009]步骤3,根据所述第一数据的数据地址号的个数与数据长度码是否相等判断是否对第一数据进行解析,如果相等则解析所述第一数据,执行步骤4,否则进入下一第一数据的接收状态,返回步骤2;
[0010]步骤4,根据所述第一数据的数据长度码确定相等数量的数据通道数,根据所述第一数据的数据地址号确定需要进行采集和传输的第二数据,将采集的第二数据赋值给数据通道内变量,形成通道数据;
[0011]步骤5,将所述通道数据生成一帧完整的报文,传输到主机。
[0012]本发明的有益效果是:单片机接受的数据中包括数据长度码,单片机对数据进行解析中,根据数据长度码确定相等数量的数据通道数,使数据通道数始终和数据长度码保持一致,避免数据通道的浪费,减少数据的接收和处理时间,提高响应。
[0013]在上述技术方案的基础上,本发明还可以做如下改进。
[0014]进一步,所述第一数据还包括第一帧头、第一功能指令和第一数据校验码。
[0015]进一步,所述步骤3的具体实现为:单片机接收所述第一数据,获取所述第一数据的数据长度码,开始计数所述数据地址号的个数;
[0016]当所述数据地址号的个数与所述数据长度码相等时,则开始对所述第一数据进行解析;否则不对第一数据进行解析,进入下一第一数据的接收状态。
[0017]进一步,所述根据第一数据的数据地址号确定需要进行采集和传输的第二数据,将所述第二数据赋值给数据通道内变量,形成通道数据的具体实现为:将收到的数据地址号通过switch语句进行匹配;如果case语句入口不等于数据地址号,则进行下一数据地址号的匹配;否则将对应变量的地址赋值给指针数组;进行匹配的次数等于数据长度码,通过for语句实现,完成所述匹配后,根据变量的地址顺序对指针数组的各个元素进行取值,按照数据地址号的顺序赋值给数据通道内变量,形成通道数据。
[0018]进一步,所述步骤5的具体实现为:对所述通道数据进行校验,形成第二数据校验码,将所述第二数据校验码加于所述通道数据尾部,在通道数据前加第二帧头和第二功能指令,形成完整的报文,传输至主机。
[0019]本发明的另一技术方案如下:
[0020]一种基于单片机异步串行端口多通道数据传输系统,包括端口配置模块,第一数据接收模块,第一数据解析模块和报文生成传输模块;
[0021]所述端口配置模块,其用于配置单片机异步串行端口 ;
[0022]所述第一数据接收模块,其用于单片机接收第一数据,根据所述第一数据的数据地址号的个数与数据长度码是否相等判断是否对第一数据进行解析,如果相等则解析所述第一数据,否则进入下一第一数据的接收状态;
[0023]所述第一数据解析模块,其用于根据所述第一数据的数据长度码确定相等数量的数据通道数,根据所述第一数据的数据地址号确定需要进行采集和传输的第二数据,将采集的第二数据赋值给数据通道内变量,形成通道数据;
[0024]所述报文生成传输模块,其用于将所述通道数据生成一帧完整的报文,传输到主机。
[0025]在上述技术方案的基础上,本发明还可以做如下改进。
[0026]进一步,所述第一数据接收模块包括接收单元和处理单元;
[0027]所述接收单元,其用于接收所述第一数据,获取所述第一数据的数据长度码,开始计数所述数据地址号的个数;
[0028]所述处理单元,其用于判断所述数据地址号的个数与所述数据长度码是否相等,如果相等,则开始对所述第一数据进行解析;否则不对第一数据进行解析,进入下一第一数据的接收状态。
[0029]进一步,所述第一数据解析模块的具体功能包括将收到的数据地址号通过switch语句进行匹配;如果case语句入口不等于数据地址号,则进行下一数据地址号的匹配;否则将对应变量的地址赋值给指针数组;进行匹配的次数等于数据长度码,通过for语句实现,完成所述匹配后,根据变量的地址顺序对指针数组的各个元素进行取值,按照数据地址号的顺序赋值给数据通道内变量,形成通道数据。
[0030]进一步,所述报文生成传输模块包括校验单元、组装单元和传输单元;
[0031]所述校验单元,其用于对所述通道数据进行校验,形成第二数据校验码;
[0032]所述组装单元,其用于将所述第二数据校验码加于通道数据尾部,在通道数据前加第二帧头和第二功能指令,形成完整的报文;
[0033]所述传输单元,其用于将完整的报文传输至主机。
【附图说明】
[0034]图1为本发明一种基于单片机异步串行端口多通道数据传输方法的方法流程图;
[0035]图2为本发明一种基于单片机异步串行端口多通道数据传输系统的原理框图;
[0036]图3为本发明一种基于单片机异步串行端口多通道数据传输系统中第一数据接收模块的原理框图;
[0037]图4为本发明一种基于单片机异步串行端口多通道数据传输系统中报文生成传输模块的原理框图。
【具体实施方式】
[0038]以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
[0039]如图1所示,一种基于单片机异步串行端口多通道数据传输方法,包括如下步骤:
[0040]步骤1,配置单片机异步串行端口:
[0041]此步骤在STM32上的具体实施是:将STM32异步串行端口配置成全双工收发模式:第一步打开异步串行端口时钟使能,GP1时钟使能;第二步异步串行端口复位;第三步GP1端口模式的改变,将异步串行端口接收引脚配置为浮空输入或者上拉输入,将异步串行端口发送引脚配置为推挽输出;第四步进行异步串行端口参数的初始化,设置波特率为19200,开启接收和发送的功能,数据格式为字长8位,一个停止位,无奇偶校验位,无硬件数据流控制位,为了节省中断资源,采用查询的方式判断是否有数据;第五步使能异步串行端口。
[0042]步骤2,单片机接收第一数据:
[0043]所述第一数据中包括数据长度码,数据地址号;
[0044]所述第一数据还包括第一帧头、第一功能指令和第一数据校验码。
[0045]STM32 一帧数据主要由以下几个部分组成:
[0046]帧头:由两个字节定义为0x780x78 ;
[0047]功能指令:不同的指令有不同的功能,开启多通道数据传输的功能指令由一个字节定义为OxOa ;
[0048]数据长度码:不同的数据类型对应不同的数据长度,定义为一个字节num ;
[0049]数据地址号:数据地址号数目和数据长度码保持一致,数据地址号由一字节组成,最小的地址号是0x01,根据数据的多少依次递增,每次加1,最大可以表示255个地址号;
[0050]数据的CRC16校验码:校验是为了检测数据在传输的过程中是否发生差错,如果根据接收到的CRC值和计算出来的CRC值不一样则数据不可用,CRC16校验的范围不包含0x78组成的帧头,CRC16的值由两个字保存,低8位在前,高8位在后。
[0051]故,一帧数据可表示为如下的格式:
[0052]0x78 0x78 OxOa num 0x01 0x02 0x03......CRC16L CRC16H
[0053]步骤3,根据所述第一数据的数据地址号的个数与数据长度码是否相等判断是否对第一数据进行解析,如果相等则解析所述第一数据,执行步骤4,否则进入下一第一数据的接收状态,返回步骤2:
[0054]步骤3的具体实现为:单片机接收所述第一数据,获取所述第一数据的数据长度码,开始计数所述数据地址号的个数;
[0055]当所述数据地址号的个数与所述数据长度码相等时,则开始对所述第一数据进行解析;否则不对第一数据进行解析,进入下一第一数据的接收状态。
[0056]此步骤在STM32上的具体实施是:STM32在接收到数据帧头0x78后开始对数据进行保存,并进行处理。初始状态异步串行端口为空闲态,通过查询非空标志位是否为1,置I则进行数据的接收,在接收到数据长度码num值后,开始接收并计数数据地址号的个数,当数据地址号的个数等于数据长度码num值,则接收完CRC16的低高位后,开始对数据进行解析,并停止接受数据,接收完成标志位置1,异步串行端口状态变为发送状态;当数据地址号的个数不等于数据类型长度num值,则接收完CRC16的低高位后,不对数据进行解析,进入下一数据的接收状态。
[0057]
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1