18.4
UART波特率計(jì)算
決定串口波特率的寄存器有BRR(Bite Rate Rigister),SEMR(Serial Extended Mode Rigister)和MDDR(Modulation Duty Register)。波特率與寄存器的值的公式如圖19_8 所示。N表示BRR寄存器的值,B是波特率,PCLK 是外設(shè)時(shí)鐘的頻率(單位:MHz)。BGDM(Baud Rate Generator Double-Speed Mode Select)在RA6M5中,SCI掛載在PHBIU(Peripheral High Speed Bus Interface Unit)總線上,使用時(shí)鐘PCLKA,該時(shí)鐘默認(rèn)頻率為100MHz。

圖19-8 波特率和誤差的計(jì)算公式
表1:波特率計(jì)算的相關(guān)參數(shù)描述

由于N存放的是整數(shù),故只能將公式計(jì)算出來(lái)的值進(jìn)行四舍五入,這樣肯定會(huì)存在誤差(Error)。例如,我們要配置當(dāng)前波特率為115200bps。當(dāng) PCLK=100MHz,BGDM=0,ABCS=0,ABCSE=0,n=1,按照?qǐng)D19_8公式,當(dāng)前N為:

則當(dāng)前誤差Error為:

由于N是四舍五入取得的,故Error有可能是負(fù)數(shù),因此這里取絕對(duì)值。
大多數(shù)時(shí)候會(huì)有多組參數(shù)符合波特率要求,由于誤差越大,收發(fā)出錯(cuò)的可能性越大,雖然可以用奇偶校驗(yàn)避免這個(gè)問(wèn)題,但奇偶校驗(yàn)無(wú)法解決丟包問(wèn)題,因此我們一般會(huì)選擇誤差最小的那組參數(shù)。例如:同樣是要求波特率為115200bps,但此時(shí)BGDM=1,ABCS=0,ABCSE=0,n=0,則此時(shí)的N為:

當(dāng)前誤差Error為:

很明顯這組參數(shù)的誤差0.47%要小于上一組參數(shù)的 3.12%,因此我們會(huì)選擇這一組參數(shù)。
因?yàn)榭蛇x參數(shù)有很多組,所以我們需要遍歷所有可選的參數(shù)組合來(lái)尋找誤差小的那組參數(shù),毫無(wú)疑問(wèn)的對(duì)用戶來(lái)說(shuō)是相當(dāng)繁瑣的。瑞薩官方當(dāng)然也想到了這一點(diǎn),因此讀者在實(shí)際開(kāi)發(fā)的過(guò)程中,可以直接使用FSP庫(kù)的R_SCI_UART_BaudCalculate函數(shù)來(lái)計(jì)算出適當(dāng)?shù)膮?shù)組。在通過(guò)Smart Configuration配置串口的時(shí)候,Smart Configuration也會(huì)將適當(dāng)?shù)膮?shù)組計(jì)算出來(lái),存放到hal_data.c當(dāng)中,用戶可以直接調(diào)用。
如果我們需要更小的誤差,則需要在SEMR的BRME位(Bit Rate Modulation Enable)寫(xiě)1,使能比特率調(diào)制功能。此時(shí)波特率和寄存器之間的公式見(jiàn)圖19_9。

圖19-9 使用比特率調(diào)制功能時(shí)的波特率和誤差的計(jì)算公式
該公式與未使用比特率調(diào)制功能時(shí)的公式大同小異,不管是BRR setting還是Error,都只是在分母添加了個(gè)系數(shù)(256/M),M是8位寄存器MDDR的值,取值范圍(128~256),這極大的降低了波特率的誤差。例如:
同樣是要求波特率為115200bps,但此時(shí) BGDM=1,ABCS=0,ABCSE=0,n=0,M=184,則此時(shí)N為:

當(dāng)前誤差Error為:

對(duì)比未使用波特率調(diào)制器時(shí)誤差為0.47%,使用后為0.014%,誤差降低到了原來(lái)的3%,效果可以說(shuō)是相當(dāng)?shù)暮?,但是尋找效果最佳的M的值也是很繁瑣的。讀者只需調(diào)用FSP庫(kù)的R_SCI_UART_BaudCalculate函數(shù),就能找到最適合的參數(shù)組。這個(gè)函數(shù)的源碼在r_sci_uart.c,如果讀者對(duì)其實(shí)現(xiàn)過(guò)程感興趣,可以翻看這個(gè)函數(shù)的源碼。
18.5
實(shí)驗(yàn)1:UART收發(fā)回顯
UART只需兩根信號(hào)線即可完成雙向通信,對(duì)硬件要求低,使得很多模塊都預(yù)留UART接口來(lái)實(shí)現(xiàn)與其他模塊或者控制器進(jìn)行數(shù)據(jù)傳輸,比如GSM模塊,WIFI模塊、藍(lán)牙模塊等等。在硬件設(shè)計(jì)時(shí),注意還需要一根“共地線”。
我們經(jīng)常使用UART來(lái)實(shí)現(xiàn)控制器與電腦之間的數(shù)據(jù)傳輸。這使得我們調(diào)試程序非常方便,比如我們可以把一些變量的值、函數(shù)的返回值、寄存器標(biāo)志位等等通過(guò)UART發(fā)送到串口調(diào)試助手,這樣我們可以非常清楚程序的運(yùn)行狀態(tài),當(dāng)我們正式發(fā)布程序時(shí)再把這些調(diào)試信息去除即可。
我們不僅僅可以將數(shù)據(jù)發(fā)送到串口調(diào)試助手,我們還可以在串口調(diào)試助手發(fā)送數(shù)據(jù)給控制器,控制器程序根據(jù)接收到的數(shù)據(jù)進(jìn)行下一步工作。
首先,我們來(lái)編寫(xiě)一個(gè)程序?qū)崿F(xiàn)開(kāi)發(fā)板與電腦通信,在開(kāi)發(fā)板上電時(shí)通過(guò)UART發(fā)送一串字符串給電腦,然后開(kāi)發(fā)板進(jìn)入中斷接收等待狀態(tài),如果電腦有發(fā)送數(shù)據(jù)過(guò)來(lái),開(kāi)發(fā)板就會(huì)產(chǎn)生中斷,我們?cè)谥袛喾?wù)函數(shù)接收數(shù)據(jù),并馬上把數(shù)據(jù)返回發(fā)送給電腦。
18.5.1
硬件設(shè)計(jì)
為利用UART實(shí)現(xiàn)開(kāi)發(fā)板與電腦通信,需要用到一個(gè)USB轉(zhuǎn)串口(UART)的芯片:CH340G。CH340G是一個(gè)USB總線的轉(zhuǎn)接芯片,實(shí)現(xiàn)USB轉(zhuǎn) UART、USB轉(zhuǎn)lrDA紅外或者USB轉(zhuǎn)打印機(jī)接口,我們使用其USB轉(zhuǎn)UART功能。具體電路設(shè)計(jì)見(jiàn)圖19_10a、圖19_10b、圖19_10c。
在下面的三塊開(kāi)發(fā)板的電路圖中,CH340G的TXD 引腳與MCU芯片UART的RXD引腳連接,CH340G 的RXD引腳與MCU芯片UART的TXD引腳連接。CH340G芯片集成在開(kāi)發(fā)板上,其地線(GND)已與控制器的GND連通。

圖19-10a 啟明6M5開(kāi)發(fā)板:USB轉(zhuǎn)串口硬件設(shè)計(jì)

圖19-10b 啟明4M2開(kāi)發(fā)板:USB轉(zhuǎn)串口硬件設(shè)計(jì)

圖19-10c 啟明2L1開(kāi)發(fā)板:USB轉(zhuǎn)串口硬件設(shè)計(jì)
表2:調(diào)試串口引腳分配


-
寄存器
+關(guān)注
關(guān)注
31文章
5608瀏覽量
130001 -
串口
+關(guān)注
關(guān)注
15文章
1619瀏覽量
82835 -
uart
+關(guān)注
關(guān)注
22文章
1314瀏覽量
106654 -
波特率
+關(guān)注
關(guān)注
2文章
320瀏覽量
35568
原文標(biāo)題:UART波特率計(jì)算及實(shí)驗(yàn)1:UART收發(fā)回顯————瑞薩RA系列FSP庫(kù)開(kāi)發(fā)實(shí)戰(zhàn)指南(46)
文章出處:【微信號(hào):瑞薩嵌入式小百科,微信公眾號(hào):瑞薩嵌入式小百科】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
RA UART實(shí)現(xiàn)串口波特率自適應(yīng)
基于環(huán)形隊(duì)列的UART收發(fā)回顯實(shí)驗(yàn)
can波特率計(jì)算
基于靈動(dòng)微電子MM32F013x 系列的UART硬件自適應(yīng)波特率
什么是串口波特率?串口波特率的分類及應(yīng)用詳解
請(qǐng)問(wèn)如何使用低功耗 UART (LP UART) 波特率補(bǔ)償?
如何為單個(gè)uart配置不同的波特率?
基于FPGA的波特率連續(xù)可調(diào)UART接口
關(guān)于UART/CAN/PLL時(shí)鐘計(jì)算波特率的方法
串口通訊波特率出現(xiàn)誤差的因素
MAX3108 UART的波特率編程
串口波特率誤差產(chǎn)生的原因
如何實(shí)現(xiàn)適用于多個(gè)標(biāo)準(zhǔn)波特率的全雙工UART接口
uart波特率和傳輸頻率的關(guān)系 UART串口的常用波特率為多少
UART波特率計(jì)算及UART收發(fā)回顯實(shí)驗(yàn)
評(píng)論