串口通訊(UART)是一種異步通訊,收發雙方需要按照約定的波特率進行通訊。當波特率出現誤差時,會導致通訊出錯。那導致波特率出現誤差的因素都有哪些呢,今天就來分析一下。
1.分頻誤差
首先,波特率是根據系統時鐘分頻產生的,而系統時鐘和波特率可能不是整數倍的關系,所以分頻時也會產生誤差。但是目前大部分MCU的系統時鐘比較高,一般都在幾十MHz,遠遠大于串口通訊波特率,所以這個誤差影響很小。假設MCU時鐘為48MHz,波特率為115200,48MHz/115200=416.67,按照417分頻,實際波特率為48M/417=115108,誤差為(115200-115108)/115200,約為0.08%,這個誤差很小,對串口通訊沒什么影響。 但是,當系統時鐘較低,或者波特率較高時,也就是兩者相差倍率較小時,這個誤差就不可忽視。 對于一些較早的51內核的MCU,由于運行頻率低,采用非整數的晶振(比如11.0592M等)就是為了使用常見波特率時(比如9600、115200),分頻的誤差盡量小。
2.時鐘誤差
其次,波特率的主要誤差還是取決于系統時鐘的誤差。那串口通訊對時鐘誤差的要求有多高呢? 先看串口通訊時序圖:
串口通訊由起始位、數據位、校驗位、停止位組成。以常見的8N1為例,即1位起始位,8位數據位,無校驗,1位停止位。也就是說傳輸一個字節需要10bits。每一個字節都有一個起始位做同步,所以誤差只會在一個字節內累計。 不難看出,在最后一個位采樣時,誤差最大,允許極限誤差為0.5位。按照每個字節10位計算,最大允許誤差為±0.5/10=±0.05,即±5%。考慮到串口通訊涉及收發兩端,兩端都可能存在誤差,所以,每端的誤差最好控制在±2.5%以內。 當數據位、校驗位等較多時,要求的時鐘誤差就更高一些。考慮到上面所說的分頻誤差,一般來說,當時鐘誤差小于±2%時,串口通信是比較可靠的。
原文標題:UART波特率對時鐘精度的要求有多高?
文章出處:【微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。
審核編輯:湯梓紅
-
uart
+關注
關注
22文章
1251瀏覽量
102846 -
串口通訊
+關注
關注
1文章
263瀏覽量
25318 -
波特率
+關注
關注
2文章
310瀏覽量
34619 -
誤差
+關注
關注
0文章
50瀏覽量
14498
原文標題:UART波特率對時鐘精度的要求有多高?
文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
STM32串口波特率大小計算案例

晶振的最大波特率及其誤差介紹
串口波特率計算詳解

串口波特率誤差產生的原因

串口傳輸速率低于波特率怎么辦 串口通信的波特率如何設置
什么是串口波特率?串口通信為什么要設置波特率?

評論