本文直接來源:strongerHuang
現(xiàn)在的單片機資源越來越豐富了,其中我們常用的串口也是內部集成了多個,關鍵功能也越來越強了。 我們有些應用可能會用到串口自動識別波特率,今天就來講講MCU串口自動識別波特率底層的常見的原理,以及MCU的案例。
自動識別波特率常見原理
串口自動識別波特率(Auto Baud Rate Detection,簡稱ABR)的底層原理主要基于串口通信中數(shù)據(jù)的傳輸特性和設備間的交互機制。以下是幾種常見的自動波特率識別原理。
起始位和停止位檢測法:
原理:串口通信中,每個數(shù)據(jù)包的開始都會有一個起始位(通常為0),結束有一個或多個停止位(通常為1)。通過檢測這兩個位的時間間隔,可以計算出波特率。
特定模式檢測法:
原理:發(fā)送設備發(fā)送一系列具有特定模式的字節(jié)(如固定的字節(jié)序列或模式),接收設備嘗試以不同的波特率接收并檢測這些模式。當檢測到與發(fā)送模式匹配的數(shù)據(jù)時,即可確定當前的波特率。
波特率掃描法:
原理:發(fā)送設備在初始化階段發(fā)送一個包含多個不同波特率的掃描命令。接收設備在接收到這些命令后,會自動檢測并匹配最接近的波特率。
周期性信號檢測法: 原理:利用信號的周期性變化進行波特率檢測。通過分析信號的頻率和周期性特征,可以推算出波特率。
MCU硬件串口自動識別波特率
現(xiàn)在市面上很多新推出的MCU都有波特率自動識別的功能,這里以瑞薩RA系列單片機為例,配合e2 studio給大家講講串口自動識別波特率的配置,
1UART1配置
UART1的配置只需要按照應用要求來做就可以,但必須留意所選的RXD腳必須跟IRQ是復用的,以便做軟件切換。由于是做波特率自適應,屬性頁面中關于Baud的配置可以忽略。
2GPT配置
由于需要通過定時器來做start bit的時間間隔測量,可以選用GPT/AGT使用one-shot/Periodic模式并留足夠Period值余量來確保start bit在低速下不會溢出。
3P402管腳配置為IRQ4
將SCI1串口默認的(RXD)P402管腳改為IRQ4,并添加中斷入口函數(shù)。
中斷入口函數(shù)里面首先判斷是否發(fā)生了下降沿觸發(fā),然后啟動定時器,等再次中斷進入后,停止定時器,并取得定時器計數(shù)值,通過跟默認已知的系統(tǒng)時鐘參數(shù)相除,就能得到確切的波特率數(shù)值。
4波特率計算和相關寄存器配置
取得波特率實際值后,通過硬件手冊上的相關的方程式就能夠反推出幾個控制波特率的寄存器的配置需要值 (brr, semr , cks等),并將相關計算出的數(shù)值修改到FSP SCI1的全局變量結構體內 (g_uart1_baud_setting)。
5修改P402管腳配置為UART-RXD
然后將P402管腳修改為UART功能,并啟動 UART_Open() 函數(shù),設置波特率已配置標志。
6這樣主函數(shù)就能夠直接通過已偵測到的波特率直接發(fā)送數(shù)據(jù)和開始接收數(shù)據(jù)。
上述方法只需通過底層寄存器配置就能使簡單快速做波特率偵測、計算和配置。通過這種方式,只要芯片系統(tǒng)時鐘符合范圍要求,任何非通用或者極高速/超低速的波特率也是能使實現(xiàn)偵測并配置使用。
-
單片機
+關注
關注
6035文章
44554瀏覽量
634594 -
mcu
+關注
關注
146文章
17123瀏覽量
350973 -
串口
+關注
關注
14文章
1551瀏覽量
76421 -
波特率
+關注
關注
2文章
307瀏覽量
34115
原文標題:MCU串口自動識別波特率底層的原理
文章出處:【微信號:mcugeek,微信公眾號:MCU開發(fā)加油站】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論