1. 什么是波特率
不管是什么單片機(jī),在使用串口通信的時(shí)候,有一個(gè)非常重要的參數(shù):波特率。什么是波特率:波特率就是每秒傳送的字節(jié)數(shù)。雙方在傳輸數(shù)據(jù)的過程中,波特率一致,這是通訊成功的基本保障。下面以STM32單片機(jī)為例,講解一下串口波特率的計(jì)算方法。
2. STM32波特率相關(guān)的寄存器
STM32單片機(jī)設(shè)置波特率的寄存器只有一個(gè):USART_BRR寄存器,如下圖所示。
該寄存器的有效位數(shù)為16位,前4位用于存放小數(shù)部分,后12位用于存放整數(shù)部分。將波特率算出來后,數(shù)值填入這個(gè)波特率就可以了。下面介紹如何計(jì)算。
3. 波特率計(jì)算方法
STM32的數(shù)據(jù)手冊給出了計(jì)算方法,有一個(gè)公式,如下圖所示:
在這個(gè)公式上,共有三個(gè)變量,其中兩個(gè)我們是知道的,F(xiàn)ck和Tx/Rx波特率 這兩個(gè)是已知的,USARTDIV是未知的。通過該公式的描述可以看出如果使用USART1的話,那Fck就是PCLK2=72MHz,否則就是PCLK1=36MHz,Tx/Rx波特率這個(gè)參數(shù)是已知的。只需要計(jì)算出USARTDIV的值賦值給USART_BRR寄存器就可以了。以115200為例,將公式變形后得到:USARTDIV = 72×1000000/(16×115200) = 39.0625。即將39.0625寫入U(xiǎn)SART_BRR即可。
前文說過,USART_BRR的前4位存放小數(shù)部分,后12位存放整數(shù)部分。
那小數(shù)部分DIV_Fraction = 0.0625×16 = 1 = 0x01;那整數(shù)部分DIV_Mantissa = 39 = 0x27;那USART_BRR = 0X271;
數(shù)據(jù)手冊給我們提供了一張數(shù)據(jù)表:
在這張數(shù)據(jù)表上,已經(jīng)算出了常用的波特率值,我們可以拿來直接用。但是如果我們想把波特率的計(jì)算做成一個(gè)傳參函數(shù)的方式,如:USART_INIT(uint_t 16 Baud),在調(diào)用時(shí)只需要寫USART_INIT(9600),USART_INIT(115200),那程序該怎么寫呢?
4. 程序的實(shí)現(xiàn)
下面介紹的是寄存器版的程序。
程序第一步45行:先計(jì)算得到USART_DIV,這個(gè)就是前面公式的變形;程序第二步46行:獲得USART_DIV的整數(shù)部分;程序第三步47行:獲得USART_DIV的小數(shù)部分;程序第四步48行:將整數(shù)部分左移4位,即存入BRR寄存器的后12位;程序第五步49行:將整數(shù)和小數(shù)部分合在一起,即前4位和后12位重新組合;程序第六步50行:將計(jì)算出來的數(shù)值賦給BRR寄存器。
這樣一個(gè)將波特率作為形參的函數(shù)就完成了。從以上來看的話,波特率的計(jì)算好像也不是很難啊。
-
STM32
+關(guān)注
關(guān)注
2283文章
10986瀏覽量
361253 -
串口
+關(guān)注
關(guān)注
14文章
1580瀏覽量
78330 -
波特率
+關(guān)注
關(guān)注
2文章
310瀏覽量
34620
原文標(biāo)題:STM32單片機(jī)的串口通信波特率應(yīng)該這樣計(jì)算~
文章出處:【微信號:Mouser-Community,微信公眾號:貿(mào)澤電子設(shè)計(jì)圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
can波特率計(jì)算

STM32串口波特率大小計(jì)算案例

什么是串口波特率?串口波特率的分類及應(yīng)用詳解

STM32F4波特率的計(jì)算方法
STM32F4的高波特率與低誤差的計(jì)算方法是什么
單片機(jī)與PC機(jī)串行通信中波特率的確定
51單片機(jī)串口初值和波特率計(jì)算器應(yīng)用程序免費(fèi)下載

51單片機(jī)定時(shí)計(jì)數(shù)器的溢出率計(jì)算和串口波特率到底有什么關(guān)系

51單片機(jī)串口波特率的計(jì)算方法說明

如何計(jì)算8051單片機(jī)的波特率
STM32 USB虛擬串口波特率問題(含源碼)

STM32下波特率計(jì)算詳解

評論