串口自动识别方法

文档序号:9349901阅读:1274来源:国知局
串口自动识别方法
【技术领域】
[0001] 本发明属于通信领域,具体涉及一种串口自动识别方法。
【背景技术】
[0002] 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,通常称 为UART),实现串、并转换,是一种广泛应用的通信设备的接口,该总线双向通信,可以实现 全双工传输和接收。
[0003] 在异步通信中,字符帧格式和波特率是两个重要指标,可由用户根据实际情况选 定。字符帧也叫数据帧,由起始位、数据位、奇偶校验位和停止位等四部分组成,其具体格式 如图1所示: 现对各部分结构和功能分述如下: (1) 起始位:位于字符帧开头,只占一位,时钟为逻辑〇低电平,用于向接收设备表示 发送端开始发送一帧信息; (2) 数据位:紧跟起始位之后,用户根据情况可取5位、6位、7位或8位,低位在前高位 在后(即先发送数据的最低位); (3) 奇偶校验位:位于数据位后,仅占一位,用于表征串行通信中采用奇校验还是偶校 验,由用户根据需要决定采取何种校验方式或不采用奇偶校验; (4) 停止位:位于字符帧末尾,为逻辑" 1"高电平,通常可取1位、1. 5位或2位,用于 向接收端表示一帧字符信息已发送完毕,也为发送下一帧字符作准备。
[0004] 在串行通信中,发送端一帧一帧发送信息,接收端一帧一帧接收信息。两相邻字符 帧之间可以无空闲位,也可以有若干空闲位,这由用户根据需要决定,确切的说是发送端决 定的。帧内部是没有空闲位存在的。图表1(b)中显示的是有空闲位时的字符帧格式。 [0005] 波特率的定义为每秒钟传送二进制数码的位数(也称比特数),单位通常为 bps (bit per second),即位/秒。波特率是串行通信的重要指标,用于表征数据传输的速 度。波特率越高,数据传输速度越块,但和字符的实际传输速率不同,与字符帧格式有关。
[0006] 在现有的串口通讯中,通信双方通信的波特率必须一致,否则发送方发送的数据, 接收方要么接收不到,要么在接收后的解析过程中称为乱码,造成通讯故障。
[0007] 针对串口通讯,通信双方的通信波特率必须一致的问题,现有的通信双方波特率 配对方法有如下几种: (1) 标准波特率穷举法 该方法为固定发送方或接收方的波特率,另一方按照一定的规律在几个备选波特率中 穷举,直到匹配上。但是该方法需要匹配的一方轮询多次,浪费时间和总线资源; (2) 码元宽度实时监测法 需要发送方和接收方之间有一个约定的同步字符,接收方监听该同步字符,确定波特 率。但是,该方法需要依赖于发送方的策略; (3) M(8/16/32)倍波特率适应法 该方法,以M为8为例,是说接收方的接收波特率是发送方波特率的8倍时,无论发任 意字符,在接收方解析都只能是OxOO和0x80.该方法也需要像穷举法一样,让发送方依次 发送0X00~0xFF所有的字符才可以。并且如果不是该波特率,就还需要把检测的波特率再 变换,然后再发一遍;但是该方法仍然需要让发送方依次穷举所有字符进行配对,如果配对 不上还要对波特率进行变换,耗时较长; (4)检测上升沿和下降沿求最小位宽法 检测最小位宽方法不需要特征字符(串),但涉及到如果波形受到干扰,导致波形不标 准时可能有的不准确问题。改进的方法可解决波形不准确问题,方法是检测两个下降沿之 间的时间,除2取最小的值,不过仍然无法避免需要检测多次的问题。

【发明内容】

[0008] 本发明的目的在于提供一种接收方只需发送方发送一帧数据帧便能准确解析出 波特率、停止位长度、发送方发送的字串信息的自动配对的串口自动识别方法。
[0009] 本发明提供的这种串口自动识别方法,其特征在于包括如下步骤: Sl串口通信中,需要配对的双方约定至少包含两个字符的特征字串和数据帧中的数据 位位数,约定特征字串中必须至少包含一个宽度为1位的电平,且帧中不含奇偶校验位; S2发送方按照通信双方的约定发送一帧数据帧,数据帧为仅包括特征字串或以特征字 串开头的数据帧; S3接收方接收发送方发送的数据帧,识别数据帧中各段电平的时间宽度; S4根据识别的各段电平的时间宽度在备选波特率中选定波特率的值; S5确定停止位的位数; S6校验是否是特征字串波形;若校验完成,则串口通讯双方配对完成。
[0010] 所述的串口自动识别方法还包括步骤S7 :识别整个数据帧;步骤S7还能够在所述 步骤S6的基础上继续识别数据帧中的除特征字串外的其他数据信息。
[0011] 所述步骤S3中的识别数据帧中各段电平的时间宽度,包括如下步骤: (1) 将串口接收引脚连接与处理器的带有中断功能的通用输入/输出引脚连接; (2) 利用处理器的中断功能捕捉上升沿和下降沿,用时钟的内部寄存器值来记录中断 的时间点; (3) 设定另一个时钟来检测一帧数据是否发完。
[0012] 所述的识别数据帧中各段电平的时间宽度为利用处理器的时间计数器寄存器实 现。
[0013] 步骤S4所述选定波特率的值包括如下步骤: (1) 接收方准备好备选波特率; (2) 与S3中识别的最小的电平时间宽度进行比较; (3) 将所有备选波特率的值与(2)中的最小的电平时间宽度值的差为排序标准做升序 排列,选出差值最小时所对应的波特率的值,将此值作为时间基数base。
[0014] 所述的备选波特率包括串口通信常用的115200、57600、38400、19200和9600,所 对应的时间宽度的列表bv为1667、833、417、278和139。
[0015] 步骤S5所述确定停止位的位数包括如下步骤: (1) 计算数据帧总位数num ; (2) 依据算式 NI= (num+sbn)/ (Ql+N2+sbn)和 R= (2* (num+sbn))% (2* (Ql+N2+sbn)), 以及停止位位数sbn的备选值,选取R最小时sbn对应的值作为停止位的位数,其中NI为 数据帧的全部字符个数,Ql为起始位位数,N2为数据位位数,R为指示变量。
[0016] 所述停止位位数sbn的备选值为1、L5或2。
[0017] 步骤S6所述校验包括如下步骤: (1) 遍历数据帧内所有的电平,求得在以时间基数为基础偏移15%范围内的最大值作 为偏移标准电平宽度值; (2) 遍历数据帧内所有电平,在偏移标准电平宽度值范围内,求取奇数位电平时间基数 base^^P偶数位电平时间基数basapi, (3) 接收方根据事先约定的特征字串、数据位数以及S5中确定的停止位位数自动生成 数组exp [i],数组exp [i]内的各元素依次表示特征字串在数据帧中各电平所占用的位数; (4) 接收方遍历接收到的数据帧,产生相应的数组exp' [i],数组exp' [i]内的各元素 依次表示接收到的发送方发送的数据在数据帧中各电平所占用的位宽度; (5) 根据奇数位电平时间基数base^P偶数位电平时间基数base{s的大小,判断数据帧 是否包含特征字串; (6) 若校验成功,就继续完成下一步骤S7 ;如果校验失败就进入下一帧监听状态。
[0018] 所述的求取奇数位电平时间基数base^^P偶数位电平时间基数base^!,包括如下 步骤: i) 用数据帧范围内的每一个电平的时间宽度除以时间基数base,分别提取出整数部 分和余数部分; ii) 判断每个电平各包含多少个数据位:判断余数部分,与时间基数base的比值大于 50%就认为还有一个数据位,在相对应的整数部分加1;与时间基数base的比值小于50%就 认为没有数据位,相对应的整数部分不动;如果比值等于50%,则无法判断,丢弃本串数据, 进入下一次监听; iii)依据ii)中的结果,记录电平的序号值,并且记录各序号所对应的电平宽度的值: 记录电平的规则为:含有奇数个"位"的电平除了第一个(或最后一个)外,其他电平的时间 宽度都取时间基数base,剩下的宽度就是这个第一个(或最后一个)的电平的时间宽度;含 有偶数个"位"的电平,取该电平的时间宽度的平均值; iv) 所有奇数位电平的电平时间相加,并除以奇数位电平所占的位数,得到奇数位电平 时间基数base#;所有偶数位电平的电平时间相加,并除以偶数位电平所占的位数,得到偶 数位电平时间基数base偶。
[0019] 所述的判断数据帧是否包含特征字串,采用以下五个算式进行判断,其中表示 乘法运算: ① 若base# Aasaffl,且exp' [i]中元素相对应的电平为偶数位电平,贝Ij判定exp' [i] 是否满足:(base* (exp [i]-I)+ (base-offset) *0.5)〈 exp' [i]〈 (base* exp [i] *1.3); ② 若base#Aasaffl,且exp' [i]中元素相对应的电平为奇数位电平,贝Ij判定exp' [i] 是否满足:(base*(exp[i]-l) + (base+offset)*1.5)>exp' [i]> (base*exp[i]*0.7); ③ 若base^basapi,且exp' [i]中元素相对应的电平为偶数位电平,贝Ij判定exp' [i] 是否满足:〇3886*(6叉卩[;[]-1) + 〇3&86+0打861:)*1.5)>6叉卩'[;[]>〇3&86*6叉卩[;[]*0.7); ④ 若base^basapi,且exp' [i]中元素相对应的电平为奇数位电平,
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1