主題 : 高手們!!求解 rUBRDIV0=( (int)(pclk/16./baud+0.5) -1 )!!!!!! 復制鏈接 | 瀏覽器收藏 | 打印
想要飛得更高就要忘掉地平線!
級別: 新手上路
UID: 42704
精華: 0
發帖: 7
金錢: 35 兩
威望: 7 點
貢獻值: 0 點
綜合積分: 14 分
注冊時間: 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樓  發表于: 58天前
設置波特率除數因子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
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
死或生沙滩排球下载