<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > STM32下波特率計算詳解

STM32下波特率計算詳解

作者: 時(shí)間:2016-11-19 來(lái)源:網(wǎng)絡(luò ) 收藏
波特率的計算

STM32下的波特率和串口外設時(shí)鐘息息相關(guān),USART 1的時(shí)鐘來(lái)源于A(yíng)PB2,USART 2-5的時(shí)鐘來(lái)源于A(yíng)PB1。在STM32中,有個(gè)波特率寄存器USART_BRR,如下:

本文引用地址:http://dyxdggzs.com/article/201611/318196.htm

STM32串口波特率通過(guò)USART_BRR進(jìn)行設置,STM32的波特率寄存器支持分數設置,以提高精確度。USART_BRR的前4位用于表示小數,后12位用于表示整數。但是它還不是我們想要設置的波特率,想要設置我們串口的波特率大小還需要進(jìn)行計算。其實(shí)有關(guān)波特率的計算是下面這一條表達式:

從上面的表達式,我們引入了一個(gè)新量USARTDIV,它表示對串口的時(shí)鐘源fck進(jìn)行分頻。假設我們已知道了波特率和fck時(shí)鐘頻率的大小,那么通過(guò)上式便可以計算出USARTDIV的具體大小,然后再通過(guò)USART的值大小對波特率寄存器進(jìn)行設置。
USARTDIV通過(guò)上面的表達式得出,是一個(gè)帶有小數的浮點(diǎn)數(如27.75)。將小數部分和整數部分分開(kāi),分別得到一個(gè)整數值n(如27)和一個(gè)小數值m(如0.75)。有了這兩個(gè)值我們便可以填寫(xiě)USART_BRR寄存器進(jìn)而設置我們串口波特率大小了。
將整數部分m(27 = 0x1B)直接寫(xiě)入USART_BRR的后12位部分;將小數部分n乘以16后得到的整數值(如0.75 x 16 = 12 = 0xC)寫(xiě)入USART_BRR前4位部分,最后USART_BRR的值為0x1BC。
注意:如果小數部分乘以16之后仍帶有小數,則要四舍五入去除小數部分得到一個(gè)新的整數,再將其寫(xiě)入USART_BRR的前四位。
為什么在計算波特率的公式中要乘以16?
?我們知道串口通信是通過(guò)TXD和RXD這兩條線(xiàn)進(jìn)行通信的,當接收器的RXD連接著(zhù)發(fā)送器的TXD,接收器的TXD連接著(zhù)發(fā)送器的RXD,接收器和發(fā)送器可以通過(guò)RXD和TXD互傳數據。當接收器檢測到RXD這條線(xiàn)的電平被拉為低電平,立即開(kāi)始接收發(fā)送器發(fā)送過(guò)來(lái)的數據,剛剛那個(gè)低電平只是一個(gè)告知接收器可以接收數據的起始位而已。
在數據的傳輸中,信號可能受到一些干擾而產(chǎn)生一些抖動(dòng),如下圖。如果接收端只對這些信號數據采樣一次,那么它有可能采樣到的是抖動(dòng)的不準的數據,進(jìn)而使數據傳輸不準確,所以接收端在采樣數據線(xiàn)上的數據,通常都要采樣多次,然后通過(guò)比較獲得準確的數據。

前面已經(jīng)說(shuō)過(guò),USARTDIV,它表示對串口的時(shí)鐘源fck進(jìn)行分頻,而這16表示的正是1bit數據的采樣次數。為什么呢?

,將這個(gè)表達式的分子分母倒過(guò)來(lái),可以得到下面這條表達式
每一位的傳輸時(shí)間只有1/TX_baud,這個(gè)總時(shí)間除以16,所以每采樣一次的時(shí)間正好是T1,即新分頻后的周期。而初始的串口時(shí)鐘信號來(lái)自于A(yíng)PBx,APBx時(shí)鐘信號需要經(jīng)過(guò)分頻才會(huì )等于T1,所以才需要分頻USARTDIV。


關(guān)鍵詞: STM32波特率計算詳

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>