OpenEdv-开源电子网

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

AT32--USART波特率计算方法解析

[复制链接]

34

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
210
金钱
210
注册时间
2019-12-27
在线时间
26 小时
发表于 2022-9-15 20:50:14 | 显示全部楼层 |阅读模式
USART波特率计算方法解析
USART 波特率发生器
USART 内置波特率发生器,其通过使用以PCLKx为基准的内部计数器进行计数,由用户设定其该计数器的溢出值(通常也称作分频系数),每计数达到一次溢出代表一位数据,故每位数据位宽就是分频系数个PCLKx周期。
用户通常可通过调整PCLKx以及分频系数来产生特定的USART波特率。以下基于AT32F435的USART1为例对其进行解析

关键词简介
USART时钟源:即USART波特时钟的来源。USART1的来源为PCLK2,PCLK2由HCLK分频而来,HCLK由系统时钟分频而来。当系统时钟为288MHz,HCLK不分频,PCLK2二分频时,此时PCLK2时钟为144MHz
目标波特率:即应用需求的USART波特率。可根据需求随意设定(但必须保障收发双发波特率一致),通常为9600、38400、115200等一些常见的典型波特率。
分频系数:即对PCLK2的分频值。为达到期望的波特率,必须要对PCLK2进行分频,该分频系数可配置为0~0xFFF内的任意满足需求的值

波特率公式
USART波特率 = USART时钟源/分频系数

驱动实现
如下图
USART波特率.PNG
第119行到第127行为获取“apb_clock”,即获取USART时钟源。需要注意不同的串口所挂载的PCLK总线不同
第128行到第136行为计算“分频系数”,通过波特率公式而来。且为更接近目标波特率,采用“四舍五入”进行处理
第137行即为将计算得到的分频系数实际写入USART_BAUDR寄存器。
示例:
1)系统时钟为288MHz,PCLK2做二分频,目标波特率为115200时,“分频系数”=288000000/2/115200=1250,实际写入USART_BAUDR寄存器值应为1250(即十六进制的0x4E2)。
2)系统时钟为288MHz,PCLK2做二分频,USART_BAUDR寄存器值为0x3A98(即十进制15000)时,“波特率”=288000000/2/15000=9600。

注:
A.USART波特率的配置需要在USART使能前进行配置;
B.不同的USART挂载的PCLKx不同,应用需要自己计算波特率时要注意PCLKx的分频;
C.PCLKx过大时,某些极限波特率无法达到(比如PCLK为144MHz时,无法实现1200的USART波特率),此时可通过增加分频来降低PCLKx。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

821

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2070
金钱
2070
注册时间
2021-7-17
在线时间
647 小时
发表于 2022-9-16 10:04:26 | 显示全部楼层
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 04:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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