OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3376|回复: 1

求解异步通信的波特率的疑问

[复制链接]

9

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
372
金钱
372
注册时间
2016-8-15
在线时间
55 小时
发表于 2016-8-16 17:54:22 | 显示全部楼层 |阅读模式
10金钱
异步通信时 接发双方各有时钟(即晶振吧),他们的起振时间不同,不同步,为什么设置波特率相同就能够通信了?数据不会出错吗?
还有在单片机用定时器T1来设置波特率时,怎么会有误差这个概念的(比如fosc为12Mhz误差就较大,而11.0592Mhz时就0误差),
求大神对异步通信原理易懂的解释

最佳答案

查看完整内容[请看2#楼]

1、同步问题。 对于UART,它会以起始位的下降沿为基准,所以只要在一个字节内双方的时钟误差小于半个位宽度,那么都可以准确读取信息, 等到下一个字节的起始位开始,误差又归零了。 来看一下STM32的串口接收组件工作方式: 它会有一个16倍波特率的时钟在采样,当采样到0后计数器开始加,加到第7、8、9个分别采样来决定这个位是0还是1, 所以说,每当起始位的下降沿到来,累加误差都会清零。 试想如果不这样的话,收 ...
祝中国健儿奥运好成绩
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

1097

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3571
金钱
3571
注册时间
2014-12-2
在线时间
365 小时
发表于 2016-8-16 17:54:23 | 显示全部楼层
本帖最后由 xkwy 于 2016-8-16 19:00 编辑

1、同步问题。
对于UART,它会以起始位的下降沿为基准,所以只要在一个字节内双方的时钟误差小于半个位宽度,那么都可以准确读取信息,
等到下一个字节的起始位开始,误差又归零了。
来看一下STM32的串口接收组件工作方式:

5.jpg

它会有一个16倍波特率的时钟在采样,当采样到0后计数器开始加,加到第7、8、9个分别采样来决定这个位是0还是1,
所以说,每当起始位的下降沿到来,累加误差都会清零。

试想如果不这样的话,收发双方的晶振哪怕只有1ppm的误差,也经不起时间这把杀猪刀来累加呀

2、晶振误差。
我列了常用的波特率下两种晶振的误差
1.jpg

可以看出,12MHz晶振的话,除不尽,这就先天的带来了误差。

当然,如果你使用更“整”一点儿的数作为波特率的话,用12MHz显然更好:

2.jpg


那你肯定要问,为什么用14400、38400、11059200这样奇怪的数字作为波特率呢,
我猜这肯定又是马屁股决定的事:http://www.guokr.com/post/99176/

搜了一下,果然有些说法,,,
http://blog.sina.com.cn/s/blog_6202cb4101011udd.html
https://www.reddit.com/r/AskEngi ... _of_9600_baud_rate/




坚决不用寄存器,拒绝重复造轮子。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-7 16:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表