分享

串口波特率自适应是怎么做的?

 quasiceo 2015-07-30
这几天闲着没事情,找点事情做,搜集了一下串口通讯波特率自适应得技术文章。颇长了一番见识,这里把心得写一下:

首先,从技术上的必要性上该技术可分为两类:

一、接收端工作频率固定,使用典型波特率通讯。程序员比较喜欢这种情况,无论是测量计算还是比对查表,都相对简单。

二、接收端的工作频率不定或使用非标准通讯速率。具体体现是,接收端处理器使用RC振荡等一致性较差的时钟源,或者出于某些需要使用自定义的波特率而不是典型值(有些人很喜欢这样做)。这种情况实现波特率自适应相对麻烦。

然后,从技术实现方式的方式上也可分为两类:

一、具有独立的同步字符。使用串行通讯时,要先进行同步操作,即接收端通过对比接收到的字符与同步字符的差异调整波特率,或者通过定时器测量同步字符的位宽计算波特率。

二、没有独立的同步字符。即不管波特率如何,可以直接通讯。这里面通常又有两种情况。1、通讯命令开始字符固定,比如一些短消息模块使用AT指令集,每条指令都是以AT开始的,这样虽然是命令但是有同步的作用,只不过要求必须在真实命令到来前调整波特率,判断必须快速准确。2、随机字符可以同步波特率,这种方法在周立功的文章里有描述。这种情况,其实也是有限制的:即字符最后一位必须是0,且同步字符只能是独立的字符,不能有连发字符。

没有一种方法是万能的,各种方法都有自己的使用范围。应该说字符比对比较简单,速度快但适用范围小,容易中断化处理;定时器测量比较麻烦,但适用范围差,必须主程序处理。像短消息模块那种没有独立同步字符的设计支持的波特率通常是有限的。

在此理论的指导下,我认为具体程序编制可参考以下两种:

1、  RC震荡时钟源,主程序检测IO口—RXD,使用定时器计算波特率。细分可考虑a、使用同步字符,b、使用任意ASCII码。

2、  固定频率时钟源、仅支持有限典型波特率。细分可考虑a、反复使用同步字符,扩大支持波特率范围;b、迅速比对支持无同步命令

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多