自动识别波特率

kobewade5 2011-11-05 12:18:08
我想做一个自动识别波特率的软件。就是两个PC机传输的时候,不需要再去设定波特率,利用特殊的字符识别或者是算法来实现这一功能。
大家给出出主意,要是能结合单片机就更好了
...全文
391 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
AnYidan 2011-11-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 kobewade5 的回复:]

有没有更加优化的算法呢?
这样一个个式我感觉时间上比较长,你说呢
[/Quote]
说时迟,那时快
liangboone 2011-11-05
  • 打赏
  • 举报
回复
2楼是很好的方法了。LIN总线的自动波特率同步就是这个方式。
还有如下一种类似的方法供参考。
(1)将串口RX的线同时连到单片机输入扑捉端口。假设波特率的范围是1200-38400.则对应的一位宽度为26us-833us。
(2)甲单片机上电后已1次/秒的频率发送0x55. 乙单片机来输入捕捉来采集RX上高地脉冲的宽度。采集连续四个连续下降沿之间的周期,就可以得到一个位的时间,就可以得到波特率了,采集四个下降沿的目的是为了提高精度。
当采集到的高低电平的宽度超过(1)中的范围时,需要重新等待下一个四个连续的下降沿。这样的目的是防止乙单片机上点的时候正巧采集了第一个0x55的一半,然后又采集到了1s之后的0x55的一部分,这样算出来的波特率是完全错误的。
如果不想做的这么麻烦,只有用输入捕捉采集到两个宽度相等(比如误差《5%)的高电平和低电平,就认为这是一个有效的位宽度,然后计算出波特率。
(3)乙单片机以正确的波特率发送应答信号给甲方建立握手。
kobewade5 2011-11-05
  • 打赏
  • 举报
回复
有没有更加优化的算法呢?
这样一个个式我感觉时间上比较长,你说呢
bjtea 2011-11-05
  • 打赏
  • 举报
回复
可以是,甲方上电后固定的发送同一字符,例如“55”,乙方逐次改变波特率:1200,2400, 4800, 9600接收。当正确收到55后,立即按此波特率,返回一个信息给对方。然后进入正常通讯。
guetcw 2011-11-05
  • 打赏
  • 举报
回复
原理就是发一个0x55或者0xaa然后测出脉冲宽度

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧