主题 : 高手们!!求解 rUBRDIV0=( (int)(pclk/16./baud+0.5) -1 )!!!!!! 复制链接 | 浏览器收藏 | 打印
想要飞得更高就要忘掉地平线!
级别: 新手上路
UID: 42704
精华: 0
发帖: 6
金钱: 35 两
威望: 7 点
贡献值: 0 点
综合积分: 12 分
注册时间: 2011-04-10
最后登录: 2011-05-21
楼主  发表于: 2011-05-17 22:06

 高手们!!求解 rUBRDIV0=( (int)(pclk/16./baud+0.5) -1 )!!!!!!

求解 rUBRDIV0=( (int)(pclk/16./baud+0.5) -1 )!!!!!!

求解 rUBRDIV0=( (int)(pclk/16./baud+0.5) -1 );为什么这样设置????手册上的公式是UBRDIVn=(int)(UART clock/(buad rete×16))-1;望大家指点下的!怎么还出现了“16./”的,而且多了个“0.5”???????求解!!!!!!!!!!注:pclk=PCLK;
想要飞的更高就要忘掉地平线!
级别: 侠客
UID: 39247
精华: 2
发帖: 51
金钱: 355 两
威望: 71 点
贡献值: 2 点
综合积分: 142 分
注册时间: 2011-03-07
最后登录: 2015-05-31
1楼  发表于: 2011-05-20 22:07
默认的pclk是66mhz,可以计算到rUBRDIV0 = 35,楼主直接赋值就可以了
级别: 新手上路
UID: 48417
精华: 0
发帖: 16
金钱: 80 两
威望: 16 点
贡献值: 0 点
综合积分: 32 分
注册时间: 2011-05-31
最后登录: 2015-09-06
2楼  发表于: 2011-06-04 15:55
+0.5  就是4舍5入 的意思
以专业精神对待业余爱好
级别: 侠客
UID: 43681
精华: 3
发帖: 109
金钱: 695 两
威望: 139 点
贡献值: 3 点
综合积分: 278 分
注册时间: 2011-04-19
最后登录: 2015-10-15
3楼  发表于: 2011-06-05 02:51
这样可以四舍五入,比如算出来为15.9这时取整后为15,而显然这种情况取16更好加0.5后等于16.4取整后就是16了
级别: 新手上路
UID: 140695
精华: 0
发帖: 3
金钱: 15 两
威望: 3 点
贡献值: 0 点
综合积分: 6 分
注册时间: 2019-01-04
最后登录: 2019-07-04
4楼  发表于: 2019-06-17 16:43
设置波特率除数因子UBRDIV0。公式:UBRDIVn = (int)((Uart Clock)/(baud)/16) -1; Uart Clock:UART时钟频率。 baud:波特率。一般程序中公式将演变成:rUBRDIV0=(
(int)(pclk/16./baud+0.5) -1 );./ 为点除,因为pclk/16后为整数,所以点除得到float。+0.5 则是为强转时能够取到整数,因为c语言中强转是直接舍弃小数部分,而该公式要求四舍五入。


      如:baud为115200bps 且UART时钟频率为40MHz。

      UBRDIVn = (int)(pclk/16./baud+0.5) -1

                   = (int)22.2-1

                   = 21
---------------------
作者:庾志辉
来源:CSDN
原文:https://blog.csdn.net/yuzhihui_no1/article/details/38458097
版权声明:本文为博主原创文章,转载请附上博文链接!