波特率和比特率【串口為例】


使用單片機串口常看到波特率這個名詞,並根據它來調整串口的時鍾。

波特率其實並非直接反映了串口傳輸速率(時鍾頻率),實際上,比特率更能直接反應信號的傳輸速率(時鍾頻率)。

比特率:

  每秒鍾通過信道傳輸的信息量稱為位傳輸速率,也就是每秒鍾傳送的二進制位數,簡稱比特率。比特率表示有效數據的傳輸速率,用b/s 、bit/s、比特/秒,讀作:比特每秒。

波特率:

  波特率反映的是每秒傳輸的數據元個數。

  嚴格說來,波特率與比特率的關系也可換算成:比特率=波特率*單個調制狀態對應的二進制位數。如果數據不壓縮,波特率等於每秒鍾傳輸的數據位數,如果數據進行了壓縮,那么每秒鍾傳輸的數據位數通常大於調制速率,使得交換使用波特和比特/秒偶爾會產生錯誤。兩相調制(單個調制狀態對應1個二進制位)的比特率等於波特率;四相調制(單個調制狀態對應2個二進制位)的比特率為波特率的兩倍;八相調制(單個調制狀態對應3個二進制位)的比特率為波特率的三倍;依次類推。

  

最終,回到實際使用中來,在嵌入式的串口通信中,比特率和波特率往往相同(比如在S3C2440中,所說的波特率 = 比特率)。

對於我們常用的串口,我們經常用波特率來表示傳輸速度,而這時其值就是比特率,通過S3C2440的串口通信得以證明:

在S3C2440的datasheet里面有說到,

“For example, if the baud-rate is 115200 bps and UART clock is 40 MHz, UBRDIVn is:

UBRDIVn = (int)(40000000 / (115200 x 16) ) -1
= (int)(21.7) -1 [round to the nearest whole number]
= 22 -1 = 21”

按照它的介紹,在設置寄存器使其波特率等於115200 ,然后用邏輯分析儀采樣。

#define UART_BAUD_RATE 115200 // 波特率
#define UART_BRD ((UART_CLK / (UART_BAUD_RATE * 16)) - 1)

void uart0_init(void)
{

  ...

  UBRDIV0 = UART_BRD; // 波特率為115200
}
 

 邏輯分析儀采樣結果如下: 可以看出實際采集結果==理論值。 理論上1 bit時間 = 1/ 115200 = 8.68us; 

串口傳輸2個字節0x0f的采樣圖

 

 

 

 串口通訊的數據格式 

 

 

停止位可能是1、1.5、2 bit

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM