OpenEdv-开源电子网

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

bound*16这个波特率*16是什么意思

[复制链接]

111

主题

265

帖子

0

精华

高级会员

Rank: 4

积分
740
金钱
740
注册时间
2014-3-4
在线时间
6 小时
发表于 2014-3-13 09:55:34 | 显示全部楼层 |阅读模式
/初始化IO 串口2
//pclk1CLK1时钟频率(Mhz)
//bound:波特率  
void RS485_Init(u32 pclk1,u32 bound)
{    
float temp;
u16 mantissa;
u16 fraction;   
temp=(float)(pclk1*1000000)/(bound*16);//得到USARTDIV    《《《《《《《《《《《《《《《《《《《《《这个
mantissa=temp; //得到整数部分
fraction=(temp-mantissa)*16; //得到小数部分  

问题::temp=(float)(pclk1*1000000)/(bound*16);//得到USARTDIV
            这个公式,pclk1*1000000这个是换算成Hz吧,bound*16这个波特率*16是什么意思,而得到的temp又是什么??


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

使用道具 举报

70

主题

6761

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13083
金钱
13083
注册时间
2012-11-26
在线时间
3809 小时
发表于 2014-3-13 10:29:27 | 显示全部楼层
自己看一下寄存器  “波特率寄存器USART_BRR ”  再看看公式  就明白了

寄存器版本的吧
学无止境
回复 支持 反对

使用道具 举报

13

主题

89

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2014-3-11
在线时间
5 小时
发表于 2014-3-13 12:02:45 | 显示全部楼层
(转载)STM32有数个串口,每个串口都有一个自己独立的波特率寄存器USART_BRR,通过设置该寄存器就可以达到配置不同波特率的目的,由于STM32采用了分数波特率,所以STM32的串口波特率设置范围很宽,而且误差很小。




由上表可知:USART_BRR的最低4位(位[3:0])用来存放小数部分DIV_Fraction,紧接着的12位(位[15:4])用来存放整数部分DIV_Mantissa,最高16位保留。
STM32的串口波特率计算公式如下:



上式中,Fpclk是给串口的时钟(PCLK1用于USART2、3、4、5,PCLK2用于USART1,以前说过,PCLK1是由系统时钟分频得来,最大36MHZ,PCLK2是直接由系统时钟得来,最大72MHZ。)
USARTDIV是一个无符号定点数,我们已知要设置的波特率及系统时钟,这样就可以算出USARTDIV的值,并把它的整数和小数分离开来,分别写入USART_BRR寄存器里的对应位就行了,假设我们的串口1要设置为115200的波特率,而PCLK2的时钟为72M。这样,我们根据上面的公式有:
USARTDIV=72000000/(115200*16)=39.0625
那么得到:
DIV_Fraction=16*0.0625=1=0X01;
DIV_Mantissa= 468=0X27;
这样,我们就得到了USART1->BRR的值为0X27。只要设置串口1的BRR寄存器值为
0X27就可以得到115200的波特率。
回复 支持 反对

使用道具 举报

111

主题

265

帖子

0

精华

高级会员

Rank: 4

积分
740
金钱
740
注册时间
2014-3-4
在线时间
6 小时
 楼主| 发表于 2014-3-13 12:27:46 | 显示全部楼层
回复【3楼】蓝色沸点:

(转载)STM32有数个串口,每个串口都有一个自己独立的波特率寄存器USART_BRR,通过设置该寄存器就可以达到配置不同波特率的目的,由于STM32采用了分数波特率,所以STM32的串口波特率设置范围很宽,而且误差很小。
由上表可知:USART_BRR的最低4位(位[3:0])用来存放小数部分DIV_Fraction,紧接着的12位(位[15:4])用来存放整数部分DIV_Mantissa,最高16位保留。
STM32的串口波特率计算公式如下:
上式中,Fpclk是给串口的时钟(PCLK1用于USART2、3、4、5,PCLK2用于USART1,以前说过,PCLK1是由系统时钟分频得来,最大36MHZ,PCLK2是直接由系统时钟得来,最大72MHZ。)
USARTDIV是一个无符号定点数,我们已知要设置的波特率及系统时钟,这样就可以算出USARTDIV的值,并把它的整
......
---------------------------------
太感谢了!!!!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-14 00:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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