主题 : 高手们!!求解 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: 140695
精华: 0
发帖: 3
金钱: 15 两
威望: 3 点
贡献值: 0 点
综合积分: 6 分
注册时间: 2019-01-04
最后登录: 2019-07-04
1楼  发表于: 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
版权声明:本文为博主原创文章,转载请附上博文链接!