如何實(shí)現(xiàn)RA UART實(shí)現(xiàn)串口波特率自適應(yīng)?含詳細(xì)代碼!
在下述的內(nèi)容中,小編將會(huì)對(duì)手把手教大家如何去實(shí)現(xiàn)RA UART實(shí)現(xiàn)串口波特率自適應(yīng),如果串口波特率自適應(yīng)內(nèi)容是您想要了解的焦點(diǎn)之一,不妨和小編共同閱讀這篇文章哦。
一、什么是串口波特率
串口波特率是指串行通信中每秒傳輸?shù)拇a元(符號(hào))的個(gè)數(shù),它是對(duì)信號(hào)傳輸速率的一種度量。波特率與比特率的關(guān)系在于,如果數(shù)據(jù)不壓縮,波特率等于單位時(shí)間內(nèi)傳輸?shù)臄?shù)據(jù)位數(shù)。然而,如果數(shù)據(jù)進(jìn)行了壓縮,單位時(shí)間內(nèi)傳輸?shù)臄?shù)據(jù)位數(shù)通常大于調(diào)制速率,使得交換使用波特和比特/秒偶爾會(huì)產(chǎn)生錯(cuò)誤。波特率一般指的是調(diào)制解調(diào)器的通信速度,即線路狀態(tài)更改的次數(shù)。在計(jì)算機(jī)網(wǎng)絡(luò)通信中,波特率指單片機(jī)或計(jì)算機(jī)在串口通信時(shí)的速率,指的是信號(hào)被調(diào)制以后在單位時(shí)間內(nèi)的變化,即單位時(shí)間內(nèi)載波參數(shù)變化的次數(shù)模擬線路信號(hào)的速率。
以波特率為9600bit/s為例,這意味著每秒傳輸9600位數(shù)據(jù)。這包括了起始位、校驗(yàn)位和停止位在內(nèi)的所有數(shù)據(jù)位,因此實(shí)際有效數(shù)據(jù)傳輸量會(huì)少于這個(gè)數(shù)值。當(dāng)使用該波特率時(shí),每個(gè)電平持續(xù)時(shí)間就是1/9600秒。計(jì)算發(fā)送一位數(shù)據(jù)所需系統(tǒng)時(shí)鐘數(shù)的方法是:系統(tǒng)時(shí)鐘數(shù)(BPS_CNT)等于系統(tǒng)時(shí)鐘頻率(FLCK)除以波特率(BPS)。例如,如果系統(tǒng)時(shí)鐘頻率為50MHz,每個(gè)時(shí)鐘周期為20ns,那么每個(gè)電平持續(xù)時(shí)間(1/9600秒)除以每個(gè)時(shí)鐘周期(20ns)就等于發(fā)送一位數(shù)據(jù)所需系統(tǒng)時(shí)鐘數(shù)(BPS_CNT)。
選擇串口波特率時(shí),需要考慮通信雙方設(shè)備的兼容性。如果將調(diào)制解調(diào)器的波特率設(shè)置為高于其他設(shè)備的波特率,較快的設(shè)備通常需要改變其波特率以匹配速度較慢的設(shè)備。因此,通信雙方需要設(shè)置相同的波特率以確保數(shù)據(jù)傳輸?shù)耐胶驼_性。
二、如何實(shí)現(xiàn)RA UART實(shí)現(xiàn)串口波特率自適應(yīng)(含代碼)
RA系列的開(kāi)發(fā)環(huán)境中的FSP能夠以最簡(jiǎn)單的GUI的方式來(lái)配置外設(shè)并生成封裝好的底層驅(qū)動(dòng)代碼。但如果外設(shè)需要做動(dòng)態(tài)功能上的切換,例如串口IRQ接收等功能,就需要手動(dòng)通過(guò)寄存器配置來(lái)做動(dòng)態(tài)修改。下面的例子是一個(gè)簡(jiǎn)單的通過(guò)RXD管腳首先通過(guò)IRQ中斷觸發(fā)來(lái)偵測(cè)接收數(shù)據(jù)的start Bits時(shí)間,計(jì)算出實(shí)際波特率,然后做動(dòng)態(tài)波特率配置。這樣就能夠?qū)崿F(xiàn)波特率自適應(yīng)(偵測(cè))的功能。
演示的例程采用EK-RA2E1評(píng)估板,UART1 (P401, P402) 分別配置為T(mén)XD1 & RXD1。
具體配置
1、UART1配置
UART1的配置只需要按照應(yīng)用要求來(lái)做就可以,但必須留意所選的RXD腳必須跟IRQ是復(fù)用的,以便做軟件切換。由于是做波特率自適應(yīng),屬性頁(yè)面中關(guān)于Baud的配置可以忽略。
2、GPT配置
由于需要通過(guò)定時(shí)器來(lái)做start bit的時(shí)間間隔測(cè)量,可以選用GPT/AGT使用one-shot/Periodic模式并留足夠Period值余量來(lái)確保start bit在低速下不會(huì)溢出。
3、P402管腳配置為IRQ4
將SCI1串口默認(rèn)的(RXD)P402管腳改為IRQ4,并添加中斷入口函數(shù)。
中斷入口函數(shù)里面首先判斷是否發(fā)生了下降沿觸發(fā),然后啟動(dòng)定時(shí)器,等再次中斷進(jìn)入后,停止定時(shí)器,并取得定時(shí)器計(jì)數(shù)值,通過(guò)跟默認(rèn)已知的系統(tǒng)時(shí)鐘參數(shù)相除,就能得到確切的波特率數(shù)值。
4、波特率計(jì)算和相關(guān)寄存器配置
取得波特率實(shí)際值后,通過(guò)硬件手冊(cè)上的相關(guān)的方程式就能夠反推出幾個(gè)控制波特率的寄存器的配置需要值 (brr, semr , cks等),并將相關(guān)計(jì)算出的數(shù)值修改到FSP SCI1的全局變量結(jié)構(gòu)體內(nèi) (g_uart1_baud_setting)。
5、修改P402管腳配置為UART-RXD
然后將P402管腳修改為UART功能,并啟動(dòng) UART_Open() 函數(shù),設(shè)置波特率已配置標(biāo)志。
6
這樣主函數(shù)就能夠直接通過(guò)已偵測(cè)到的波特率直接發(fā)送數(shù)據(jù)和開(kāi)始接收數(shù)據(jù)。
以上便是小編此次帶來(lái)的全部?jī)?nèi)容,十分感謝大家的耐心閱讀,想要了解更多相關(guān)內(nèi)容,或者更多精彩內(nèi)容,請(qǐng)一定關(guān)注我們網(wǎng)站哦。