[技术问答]

赛元串口波特率定时器初值计算问题

[复制链接]
866|2
手机看帖
扫描二维码
随时随地手机跟帖
lgkg|  楼主 | 2024-11-5 14:54 | 显示全部楼层 |阅读模式


官方文档和官方代码计算初值是
TH1 = Fsys/baud>>8
TL1 = Fsys/baud;
我搞不懂的是定时器工作模式2时8位自动重装载TL1为初值,TH1为重载值,按理应该要一样吧?
另外一个疑惑是不需要用最大值减去计数值,不是256-Fsys/baud。
官方demo跑了仿真,得到的波特率也不正确:

当然也有可能是软件有问题
现在我不知道问题到底出在哪,有大佬抽空解答一下,谢谢!

使用特权

评论回复
chowvahao| | 2024-11-5 18:54 | 显示全部楼层
本帖最后由 chowvahao 于 2024-11-5 19:46 编辑

lgkg你好~如果是使用定时器1,且在工作模式2时8位自动重装载模式下,TL1存放计数值,TH1存放重载值。但是在使用定时器1作为波特率发生器的时候,定时器并不是处于工作模式2。当设定TCLK和RCLK均为1的时候,定时器1作为波特率发生器使用。故此时TL1,TH1的值应按规格书所给的公式配置。
波特率(Baud Rate)是通信系统(尤其是串行通信)中数据传输速率的度量,表示每秒传输的信号单元(波特)的数量。计算波特率通常涉及以下几个步骤:1.确定系统时钟频率(Fsys):这是微控制器或通信设备的工作频率。
2.确定预分频值(Prescaler )
3.选择或确定所需的波特率(Baud Rate):这是你希望串行接口工作的速率。
Baud Rate = (Fsys * Prescaler)/重载值(Timer Value)。
例如:在设定波特率为4800,系统时钟为36M,分频系数为1的时候,重载值(Timer Value)= 7500,即00011101 01001100。此时TH1应为00011101,TL1应为01001100

使用特权

评论回复
szt1993| | 2024-11-19 23:55 | 显示全部楼层
赛元串口波特率定时器方便操作

使用特权

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

本版积分规则

1

主题

1

帖子

0

粉丝