打印
[技术讨论]

哪个坛友知道波特率误差是如何计算出来的?

[复制链接]
1226|7
手机看帖
扫描二维码
随时随地手机跟帖
沙发
资深技术| | 2020-10-10 19:21 | 只看该作者
通常芯片的参考手册有计算公式,关键参数有晶振频率和运行时钟个数,计算结果是整数误差即为0。

使用特权

评论回复
板凳
coody| | 2020-10-10 22:30 | 只看该作者
就是实际波特率与你目标波特率的误差。看楼主的表格,像是51的。我距离STC的51,使用24MHz,波特率115200,则定时器重装值=65536 - 24000000/4/115200=65536 - 52.0833,实际取65536 - 52,则实际波特率=24000000/4/52=115384.6,误差=(115384.6 - 115200)/115200 * 100% = 0.16%

使用特权

评论回复
地板
QWE4562009|  楼主 | 2020-10-12 18:34 | 只看该作者
coody 发表于 2020-10-10 22:30
就是实际波特率与你目标波特率的误差。看楼主的表格,像是51的。我距离STC的51,使用24MHz,波特率115200, ...

您好   
1.你这个24M是哪里来的?

2. 24000000/4/115200-------设个啥意思  没看懂

3.实际波特率=24000000/4/52-------这个是计算实际波特率的公式?

4.那65536 - 52有何意义

使用特权

评论回复
5
jimsboy| | 2020-10-12 20:55 | 只看该作者
楼上是刚学MCU吧.
24M是外设的时钟,对常见的单片机来说,就是系统时钟,这些MCU没有倍频,所以这个24M也就是晶振或内部振荡器的频率.
波特率是用一个定时器来产生的,它的输入时钟24M,我希望它能每秒产生115200个数据,所以我得搞一个定时器,这个定时器需要设成多少呢.就是24/115200,但是这个芯片可能内部有4分频,所以再除以4.
除下来的结果不是整数,而定时器里设的值只能是整数,取整的数据是52.而用这个数据去计算,于是就出现了一点误差.
对于一个16位的定时器,最大数值65535,再加1就溢出了.而它可能只能向上计算,所以我给它一个初始值,让它在52个计数后溢出,所以预设值就是65536-52.
你上课估计打瞌睡了.这个一定会讲的.

使用特权

评论回复
6
coody| | 2020-10-12 23:15 | 只看该作者
QWE4562009 发表于 2020-10-12 18:34
您好   
1.你这个24M是哪里来的?

我觉得你应该找本基础的书系统的看看。

使用特权

评论回复
7
QWE4562009|  楼主 | 2020-10-13 14:49 | 只看该作者
jimsboy 发表于 2020-10-12 20:55
楼上是刚学MCU吧.
24M是外设的时钟,对常见的单片机来说,就是系统时钟,这些MCU没有倍频,所以这个24M也就是晶 ...

谢谢  浪费你很多时间  打字那么多

使用特权

评论回复
8
QWE4562009|  楼主 | 2020-10-13 14:53 | 只看该作者
coody 发表于 2020-10-12 23:15
我觉得你应该找本基础的书系统的看看。

看了   效果不是很好!那实际波特率就是用时钟频率/分频数/ 定时器初值?

使用特权

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

本版积分规则

1056

主题

3080

帖子

23

粉丝