打印

串行通信的实现条件和波特率自动整定问题

[复制链接]
1121|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Peonys|  楼主 | 2018-6-6 12:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 dirtwillfly 于 2018-7-1 21:35 编辑

串行通信的实现条件和波特率自动整定问题

串行通信在波特率误差超过一定范围时,会产生错误。本节介绍的内容在单片机上仅用软件就实现了波特率自动整定,最大程度地减小了波特率误差,因而可使串行通信的可靠性得到提高。

单片机具有一个全双工的串行接口,提供了多机通信功能,可方便地构成多机系统(多机容错系统、集散型多级系统),为完成大型的控制任务提供了有效的手段。用单片机组成的多机控制系统,国内已出现多例。在这样的系统中,可靠地实现多处理器间的信息交换(串行通信)是十分重要的。本节的研究发现,波特率作为串行通信的速率,同时对通信的可靠性有重要影响。

一、正常串行通信的实现条件

串行通信是按位传送数据的。每个数据有8或9个数据位,加上起始位和停止位构成一个串行帧。每一位占用时间T,1/T称为串行通信的波特率。理想情况下,发送机和接收机设置的波特率一致。接收机的接收控制器在串行帧每一数据位的中点进行采样,能接收到正确的数据,但要求波特率完全一致是不可能的。这就提出了一个问题:要可靠地实现串行通信,允许收发双方的波特率有多大误差?我们以一个10位的串行帧为例进行分析。

图1  (b)是正常工作的情形,波特率一致。在图1 (a)中,接收波特率不变,而发送波特率变小,每位的时间T延长5%,在第10位采样时,就产生了错位,不能进行正常通信。对于10位的串行帧,允许的最大波特率误差不超过5%;在多机通信方式下,串行帧是11位的,允许的最大波特率误差不超过4. 5%。

上面得到的仅仅是理想情况下的波特率误差允许上限。实际应用中,由于硬件设备的频带有限,数据位的上下跳沿要占用一定时间,每个数据位的有效时间比理想情况要短,所以对波特率误差会有更严格的要求。





相关帖子

沙发
dirtwillfly| | 2018-6-6 20:33 | 只看该作者
感谢分享

使用特权

评论回复
板凳
aspoke| | 2018-6-7 12:11 | 只看该作者
任意一方先发送事先约定好的内容,接收方不断改变波特率来接收,直到接收成功.

使用特权

评论回复
地板
232321122| | 2018-6-7 12:11 | 只看该作者
必须有一方首先发送数据,另一方判断其波特率

使用特权

评论回复
5
ghuca| | 2018-6-7 12:11 | 只看该作者
选择不同的波特率组合,然后发送,然后检测回传的数据的正确性,

使用特权

评论回复
6
soodesyt| | 2018-6-7 12:12 | 只看该作者
已知的波特率?

使用特权

评论回复
7
mnynt121| | 2018-6-7 12:13 | 只看该作者
平时我们使用的串口速率只有这么几种数值

使用特权

评论回复
8
plsbackup| | 2018-6-7 12:13 | 只看该作者
低波特率?

使用特权

评论回复
9
kmzuaz| | 2018-6-7 12:14 | 只看该作者
在串行数据传输中,两设备间的传输波特率必须相同,才可以实现正常的传输

使用特权

评论回复
10
qiufengsd| | 2018-6-7 12:15 | 只看该作者
系统的时钟准确性较差,计算出来的波特率可能不准确

使用特权

评论回复
11
wengh2016| | 2018-6-7 12:15 | 只看该作者
自动识别的原理是MCU内部检测一个下降沿到上升沿的时间间隔进而算出来波特率

使用特权

评论回复
12
eefas| | 2018-6-7 12:15 | 只看该作者
用不同的波特率向MCU进行通信测试自动识别

使用特权

评论回复
13
qiufengsd| | 2018-6-7 12:16 | 只看该作者
通信之前并不能确定波特率或者波特率可能不固定

使用特权

评论回复
14
aspoke| | 2018-6-7 12:16 | 只看该作者
双方互换,完成三次正常通讯后,就可以确认是这个波特率了.

使用特权

评论回复
15
kmzuaz| | 2018-6-7 12:16 | 只看该作者
可以检测对方传输数据时的波特率

使用特权

评论回复
16
232321122| | 2018-6-7 12:16 | 只看该作者
如果你的波特率是下位机决定的,那么它必须首先发送足够长的一串特定数据,PC 根据接收到的数据来判断其波特率。

使用特权

评论回复
17
plsbackup| | 2018-6-7 12:16 | 只看该作者
TI Stellaris里bootloader里的串口波特率自动识别源程序

使用特权

评论回复
18
ghuca| | 2018-6-7 12:16 | 只看该作者
需要数据发送是双向的

使用特权

评论回复
19
mnynt121| | 2018-6-7 12:16 | 只看该作者
既然知道了常用串口速率,就可以一个一个试

使用特权

评论回复
20
soodesyt| | 2018-6-7 12:16 | 只看该作者
如果已知,就更好穷举了.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

640

主题

901

帖子

5

粉丝