關(guān)于UART波特率設(shè)定的注意事項(xiàng)
時間:2024-01-22
什么是UART?
通用異步收發(fā)傳輸器(Universal Asynchronous Receiver/Transmitter),通常稱作UART(串口通訊),是一種異步收發(fā)傳輸器,異步意味著沒有時鐘信號來同步從發(fā)送設(shè)備進(jìn)入接收端的輸出位,因此通訊雙方必須設(shè)定相同的波特率才能成功通訊。(波特率:每秒鐘可以傳輸多少個bit)。
一:波特率允許的誤差范圍
1.1: 串口發(fā)送每一個字節(jié)都有一個起始位做同步,所以誤差只會在一個字節(jié)內(nèi)累計(jì),在最后一個位采樣時,允許極限誤差為0.5位。
1.2:當(dāng)串口選擇模式2或3--- 9位串口通訊由起始位、數(shù)據(jù)位、效驗(yàn)位、停止位組成。即1+8+1+1=11位。0.5/11=4.54%, 2個IC間允許最大頻率誤差是4.54%;每個IC允許的誤差范圍是±2.27%。
1.3:當(dāng)串口選擇模式0或1--- 8位串口通訊由起始位、數(shù)據(jù)位、停止位組成。
即1+8+1=10位。0.5/10=5%, 2個IC間允許最大頻率誤差是5%;每個IC允許的誤差范圍是±2.5%。
二:如何計(jì)算MCU主頻是否能得到準(zhǔn)確的波特率
海速芯MCU常用波特率模式為模式1、模式3。是否可以設(shè)定到用戶所需的波特率,一般利用“主頻Fsysclk÷32÷波特率=? ”, 結(jié)果得到的是整數(shù),或者非常接近整數(shù)則可以輸出到對應(yīng)的波特率。
以TM52F1363 16.588M為例:
16.588*1000000÷32÷19200=26.998, 如果KEIL用宏定義自動計(jì)算波特率則會出錯,因?yàn)殡娔X自動取整數(shù),得到是26,導(dǎo)致誤差3.8%。把主頻宏定義適當(dāng)改為16.589M,
16.589*1000000÷32÷19200=27.0003, 電腦自動取整27,理論波特率誤差萬分之0.48。
注意:以上均是主頻跑1分頻計(jì)算結(jié)果,如跑2分頻,部分波特率超范圍,不可取。
如何填充計(jì)數(shù)值TH1:
例如:TM52F1363主頻1分頻,波特率設(shè)定19200,重裝計(jì)數(shù)值為27,SMOD=1,則TH1=256-27。
三: 設(shè)定好波特率后必須用示波器確認(rèn)是否正確
以9600波特率為例:
下圖UART發(fā)送AA/55實(shí)際波形頻率是4.799K,4799*2/9600=0.99979. 誤差約0.02%,也可以用1 bit的時間計(jì)算(下圖是104.2us),1/104.2*1000000=9596.9 。
常溫下正常IC波特率誤差應(yīng)該在1%以內(nèi)。(注意獲取頻率應(yīng)該采用示波器measure 自動獲?。?,如果發(fā)現(xiàn)波特率誤差在2%以上,一般是設(shè)定參數(shù)不對,需要檢查程序。
四:需要考慮溫度變化對波特率的影響
以TM52F1363為例子,IRC內(nèi)振頻率在不同電壓下受到溫度的影響也不同。溫度漂移建議控制在1%以內(nèi)。因?yàn)槌叵翴C本身偏差就可能在1%左右, 總體應(yīng)該控制在±2.27%以內(nèi)。
五:TXD,RXD IO的設(shè)定
TXD建議設(shè)為推挽輸出,RXD應(yīng)當(dāng)設(shè)為輸入上拉電阻模式。