公开/公告号CN102306136A
专利类型发明专利
公开/公告日2012-01-04
原文格式PDF
申请/专利权人 宁波三星电气股份有限公司;
申请/专利号CN201110221090.3
申请日2011-08-03
分类号G06F13/42(20060101);
代理机构33228 宁波市鄞州甬致专利代理事务所;
代理人代忠炯
地址 315191 浙江省宁波市鄞州区姜山镇明光北路1166号
入库时间 2023-12-18 04:00:10
法律状态公告日
法律状态信息
法律状态
2015-12-23
专利权人的姓名或者名称、地址的变更 IPC(主分类):G06F13/42 变更前: 变更后: 申请日:20110803
专利权人的姓名或者名称、地址的变更
2015-04-22
授权
授权
2013-04-17
实质审查的生效 IPC(主分类):G06F13/42 申请日:20110803
实质审查的生效
2012-01-04
公开
公开
技术领域
本发明涉及串行通信领域,特别涉及一种基于单片机输入捕获功能的波特率自适应方法。
背景技术
RS485通信与串口通信一样,是按位(bit)发送和接收字节数据。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。这之间没有同步的时钟线,这就要求发送和接收两方必须保证通信的速率相同,否则出现错码。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通行的端口,这些参数必须匹配。而实现波特率自适应就是判别上行的波特率,以调整自己的通信波特率,来实现通信速率的匹配。
一般情况下波特率自适应现在采用的方式是标准波特率穷举法。这种方法要求主机的波特率必须在有限的几个固定数值之间变化,如300b/s~9.6 kb/s之间的标准值,且从机的工作振荡频率已知并稳定。从机启动通信程序后,逐个尝试以不同的波特率接收主机发出的特定字符,直到能正确接收为止。因此,该方法的运用具有一定的局限性,握手时间太慢。还有一种是通过计时RXD引脚上一个上升沿和一个下降沿之间的计时宽度来完成波特率的自适应。这种方式对波特率波形要求比较高,必须是标准的UART波形,如果串口的波形不规整,则无法完成自适应,对硬件的环境要求比较高,适用性不高。
发明内容
本发明所要解决的技术问题是:提供一种握手时间快、适用范围广,同时在串口的波形不规整的情况下也可以完成自适应的基于单片机输入捕获功能的波特率自适应方法。
本发明解决上述问题所采用的技术方案为:提供如下一种基于单片机输入捕获功能的波特率自适应方法,其特征在于:通过使用单片机通用GPIO口的下降沿触发中断功能和定时器计数功能,捕获所接收数据产生的两个下降沿,计时这两个下降沿之间的时间来求出其最小码元宽度,并根据求出的最小码元宽度来确定主机的波特率;
具体实现方法包括以下步骤:
步骤101:对一个定时器的一个输入捕获通道进行初始化,同时开启所述输入捕获通道的通用GPIO下降沿输入中断,并禁止所述输入捕获通道的下降沿输入捕获中断;
步骤102:对最小码元宽度及与输入捕获相关的各个状态量、标志进行初始化,初始全局捕获结果标志为没有捕获到两个下降沿,捕获状态机为等待捕获第一个下降沿输入;
步骤103:等待中断产生,如果产生GPIO下降沿输入中断则进入步骤104,如果产生输入捕获通道的下降沿输入捕获中断则进入步骤201;
步骤104:所述输入捕获通道上的GPIO下降沿输入中断触发;
步骤105:判断所述输入捕获通道下降沿输入捕获中断是否完成两个下降沿捕获,若是,进入步骤109,不是,则进入步骤106;
步骤106:判断所述输入捕获通道的捕获状态机是否只捕获到了第一个下降沿,若是,回到步骤103,不是,则进入步骤107;
步骤107:由于所述输入捕获通道第一个下降沿也没有捕获到,判断所述输入捕获通道的下降沿输入捕获中断是否开启,若是,回到步骤103,不是,则进入步骤108;
步骤108:开启所述输入捕获通道的下降沿输入捕获中断并回到步骤103;
步骤109:判断捕获的最小码元宽度是否是相关波特率的最小码元宽度,若是,进入步骤110,不是,则回到步骤102;
步骤110:判断捕获的最小码元宽度是否可以确定所接收数据的波特率,若是,进入步骤111,不是,则回到步骤102;
步骤111:对自身波特率进行调整处理;
步骤112:完成一次自适应处理,并禁止所述输入捕获通道的下降沿输入捕获中断,通用GPIO下降沿输入中断继续开启并回到步骤102,等待下一次UART通信的起始位下降沿触发GPIO下降沿输入中断,
步骤201:所述输入捕获通道的下降沿输入捕获中断触发;
步骤202:判断捕获状态机是否是正在等待捕获第一个下降沿输入,若是,进入步骤203,不是,则进入步骤204;
步骤203:读取所述定时器的第一次计数值T1,并保存计数值,初始自己的捕获状态机为等待捕获第二个下降沿输入中断并进入步骤210;
步骤204:读取所述定时器的第二次计数值T2,并判断所述计时器的计数是否溢出,若是,进入步骤205,不是,则进入步骤206;
步骤205:对计数值T1、T2清零并进入步骤209;
步骤206:计算(T2-T1)/2的值,即捕获的最小码元宽度,并判断这次所得最小码元宽度是否小于上次所得最小码元宽度,若是,进入步骤207,不是,则进入步骤209;
步骤207:更新保存的最小码元宽度值;
步骤208:标记全局捕获结果标志为已经完成捕获两个下降沿;
步骤209:初始自己的捕获状态机为等待捕获第一个下降沿输入中断;
步骤210:退出所述输入捕获通道的下降沿输入捕获中断并回到步骤102。
在进入所述的步骤101之前,需将所述输入捕获通道引脚与UART的RXD引脚相连且要求该 GPIO口具有下降沿输入中断功能。
在进入所述的步骤101之前,需定义好不同波特率在所述输入捕获通道相对应的计时节拍下最小码元宽度的计数值。
在判断最小码元宽度时,要捕获“两个下降沿”。在每次UART开始通信时的第一个下降沿,也就是起始位的下降沿,总会开启所述输入捕获通道的下降沿输入捕获中断。
与现有技术相比,本发明的优点在于:握手时间快,可以适应各种环境,无需发送特定的数据即可完成自适应,且硬件上面只需多占用一条GPIO口就可以实现。由于适用范围广、操作灵活,同时在串口的波形不规整的情况下也可以完成自适应,因而可普遍应用于各种存在串行异步通信方式的嵌入式产品中。
附图说明
图1为本发明基于单片机输入捕获功能的波特率自适应方法的实现流程图;
图2为本发明基于单片机输入捕获功能的波特率自适应方法中定时器2通道2下降沿输入捕获中断的处理流程图。
具体实施方式
为便于说明本发明的控制方法,下面结合附图,对本发明基于单片机电平输入捕获功能的波特率自适应方法做详细说明:
一种基于单片机电平输入捕获功能的波特率自适应方法,通过使用单片机GPIO口的下降沿中断和定时器计数功能,捕获所接收数据产生的两个下降沿,计时这两个下降沿之间的时间来求出其最小码元宽度,并根据求出的最小码元宽度来确定主机的波特率;
本实施例中,单片机采用stm8s103F3,输入捕获通道为PD3,也就是time2的输入捕获通道2,这个引脚可同时支持定时器的下降沿输入捕获中断和普通GPIO口的下降沿输入中断。本实施例中所初始化的time2的计数节拍是0.0625us,也就是每过0.0625us,time2计数值加1,由于1/9600=104.2us,即9600BPs的最小码宽度是104.2us,换算成time2的计数值是:104.2us/0.0625us=1667=0x683,同理可以得出其它波特率的计数值:4800BPs对应0xD05,2400BPS对应0x1A0A,1200BPS对应0x3415,600BPS对应0x682A;
将PD3的引脚与UART的RXD引脚相连,然后进行以下步骤:
步骤101:对time2通道2进行初始化,同时开启PD3的下降沿输入中断,并禁止time2通道2的下降沿输入捕获中断;
步骤102:对最小码元宽度及与输入捕获相关的各个状态量、标志进行初始化,初始全局捕获结果标志为没有捕获到两个下降沿,捕获状态机为等待捕获第一个下降沿输入;
步骤103:等待中断产生;如果PD3的GPIO下降沿输入中断触发则进入步骤104;如果产生time2通道2下降沿输入捕获中断则进入步骤201;
步骤104:PD3下降沿输入中断触发;
步骤105:判断定时器输入捕获中断是否完成两个下降沿捕获,若是,进入步骤109,不是,则进入步骤106;
步骤106:判断捕获状态机是否只捕获到了第一个下降沿,若是,回到步骤103,不是,则进入步骤107;
步骤107:由于第一个下降沿也没有捕获到,判断time2通道2输入捕获中断是否开启,若是,回到步骤103,不是,则进入步骤108;
步骤108:开启time2通道2输入捕获中断并回到步骤103;
步骤109:判断捕获的最小码元宽度是否是相关波特率的最小码元宽度,若是,进入步骤110,不是,则回到步骤102;
步骤110:判断捕获的最小码元宽度是否可以确定所接收数据的波特率,若是,进入步骤111,不是,则回到步骤102;
步骤111:对自身波特率进行调整处理;步骤112;
步骤112:完成一次自适应处理,并禁止time2通道2输入捕获中断。PD3的GPIO下降沿输入中断继续开启,步骤102,等待下一次UART通信起始位的下降沿触发中断;
步骤201:time2通道2下降沿输入捕获中断触发;
步骤202:判断是否正在等待捕获第一个下降沿,若是,进入步骤203,不是,则进入步骤204;
步骤203:读取所述定时器的第一次计数值T1,并保存计数值,初始自己的捕获状态机为等待第二个下降输入捕获中断;步骤210;
步骤204:读取所述定时器time2的第二次计数值T2,并判断所述计时器time2的计数是不是溢出,若是,进入步骤205,不是,则进入步骤206;
步骤205:对计数值T1、T2清零并进入步骤209;
步骤206:计算(T2-T1)/2的值,即捕获的最小码元宽度,判断这次所得最小码元宽度是否小于上次所得最小码元宽度,若是,进入步骤207,不是,则进入步骤209;
步骤207:更新保存的最小码元宽度值;
步骤208: 标记全局捕获结果标志为已经完成捕获两个下降沿;
步骤209:初始time2通道2捕获状态机为等待第一个下降沿输入捕获中断;
步骤210:退出所述time2通道2的下降沿输入捕获中断处理并回到步骤102。
本实施例中采用了较为常用的异步串行通信数据格式,即1个起始位、8个数据位、偶校验、1个停止位,发送时低位数据在前,高位在后。这时捕获所得到的计数器的值是最理想的两个bit的宽度,除以2就是一个相应波特率最小的一个码元宽度。虽然也有可能是三个或者是四个甚至更多个bit的宽度,但始终保留最小的一个,即无论在什么情况下,都会得到相应波特率的一个bit的宽度。之所以不直接捕获一个下降沿和一个上升沿之间的计时值是由于有时串口的波形不是理想的那么规范,每个bit的宽度不是相等的。本实施例中采用的捕获两个bit 的宽度再除以2所得到的一个bit的宽度是接近理想的值,根据这个值就可以来判定上行波特率具体是多少,以此来调整自身的波特率。
同时本发明不需要发送机必须发送固定的数据报文,只要所接受的数据转换成二进制存在101B这样的位续,就可以成功的捕获一个bit的宽度。
本实施例所用的stm8s103F3芯片的time2的通道2正好支持电平捕获功能,但需要说明的是,本波特率适现机制不是必须要用定时器的电平输入捕获功能,如果现有平台的单片机的定时器不支技电平输入捕获功能,完全可以通过GPIO口的下降沿中断来完成,其实现机制是一样的。
机译: 图像捕获控制设备,基于用户输入来控制显示的图像捕获控制方法
机译: 基于包括捕获的图像,捕获的音频和跟踪的眼睛运动的输入进行验证
机译: 基于数据的功能模型的后自适应方法和装置