本文直接來源:strongerHuang
現(xiàn)在的單片機(jī)資源越來越豐富了,其中我們常用的串口也是內(nèi)部集成了多個(gè),關(guān)鍵功能也越來越強(qiáng)了。 我們有些應(yīng)用可能會用到串口自動識別波特率,今天就來講講MCU串口自動識別波特率底層的常見的原理,以及MCU的案例。
自動識別波特率常見原理
串口自動識別波特率(Auto Baud Rate Detection,簡稱ABR)的底層原理主要基于串口通信中數(shù)據(jù)的傳輸特性和設(shè)備間的交互機(jī)制。以下是幾種常見的自動波特率識別原理。
起始位和停止位檢測法:
原理:串口通信中,每個(gè)數(shù)據(jù)包的開始都會有一個(gè)起始位(通常為0),結(jié)束有一個(gè)或多個(gè)停止位(通常為1)。通過檢測這兩個(gè)位的時(shí)間間隔,可以計(jì)算出波特率。
特定模式檢測法:
原理:發(fā)送設(shè)備發(fā)送一系列具有特定模式的字節(jié)(如固定的字節(jié)序列或模式),接收設(shè)備嘗試以不同的波特率接收并檢測這些模式。當(dāng)檢測到與發(fā)送模式匹配的數(shù)據(jù)時(shí),即可確定當(dāng)前的波特率。
波特率掃描法:
原理:發(fā)送設(shè)備在初始化階段發(fā)送一個(gè)包含多個(gè)不同波特率的掃描命令。接收設(shè)備在接收到這些命令后,會自動檢測并匹配最接近的波特率。
周期性信號檢測法: 原理:利用信號的周期性變化進(jìn)行波特率檢測。通過分析信號的頻率和周期性特征,可以推算出波特率。
MCU硬件串口自動識別波特率
現(xiàn)在市面上很多新推出的MCU都有波特率自動識別的功能,這里以瑞薩RA系列單片機(jī)為例,配合e2 studio給大家講講串口自動識別波特率的配置,
1UART1配置
UART1的配置只需要按照應(yīng)用要求來做就可以,但必須留意所選的RXD腳必須跟IRQ是復(fù)用的,以便做軟件切換。由于是做波特率自適應(yīng),屬性頁面中關(guān)于Baud的配置可以忽略。
2GPT配置
由于需要通過定時(shí)器來做start bit的時(shí)間間隔測量,可以選用GPT/AGT使用one-shot/Periodic模式并留足夠Period值余量來確保start bit在低速下不會溢出。
3P402管腳配置為IRQ4
將SCI1串口默認(rèn)的(RXD)P402管腳改為IRQ4,并添加中斷入口函數(shù)。
中斷入口函數(shù)里面首先判斷是否發(fā)生了下降沿觸發(fā),然后啟動定時(shí)器,等再次中斷進(jìn)入后,停止定時(shí)器,并取得定時(shí)器計(jì)數(shù)值,通過跟默認(rèn)已知的系統(tǒng)時(shí)鐘參數(shù)相除,就能得到確切的波特率數(shù)值。
4波特率計(jì)算和相關(guān)寄存器配置
取得波特率實(shí)際值后,通過硬件手冊上的相關(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功能,并啟動 UART_Open() 函數(shù),設(shè)置波特率已配置標(biāo)志。
6這樣主函數(shù)就能夠直接通過已偵測到的波特率直接發(fā)送數(shù)據(jù)和開始接收數(shù)據(jù)。
上述方法只需通過底層寄存器配置就能使簡單快速做波特率偵測、計(jì)算和配置。通過這種方式,只要芯片系統(tǒng)時(shí)鐘符合范圍要求,任何非通用或者極高速/超低速的波特率也是能使實(shí)現(xiàn)偵測并配置使用。
-
單片機(jī)
+關(guān)注
關(guān)注
6044文章
44624瀏覽量
638943 -
mcu
+關(guān)注
關(guān)注
146文章
17353瀏覽量
352785 -
串口
+關(guān)注
關(guān)注
14文章
1559瀏覽量
77137 -
波特率
+關(guān)注
關(guān)注
2文章
309瀏覽量
34291
原文標(biāo)題:MCU串口自動識別波特率底層的原理
文章出處:【微信號:mcugeek,微信公眾號:MCU開發(fā)加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
什么是串口波特率?串口波特率的分類及應(yīng)用詳解
![什么是<b class='flag-5'>串口</b><b class='flag-5'>波特率</b>?<b class='flag-5'>串口</b><b class='flag-5'>波特率</b>的分類及應(yīng)用詳解](https://file1.elecfans.com/web2/M00/8F/B2/wKgaomTRo56Af2nZAADhlPmNVrc562.png)
基于stm32的自動識別波特率的設(shè)計(jì)
【個(gè)人經(jīng)驗(yàn)分享】STM32ISP與STM32波特率自動識別技術(shù)理解
29035串口刷寫程序波特率的自動識別DSP是怎么實(shí)現(xiàn)的
串口波特率計(jì)算詳解
![<b class='flag-5'>串口</b><b class='flag-5'>波特率</b>計(jì)算詳解](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
什么是波特率?為什么要設(shè)置波特率?
![什么是<b class='flag-5'>波特率</b>?為什么要設(shè)置<b class='flag-5'>波特率</b>?](https://file.elecfans.com/web2/M00/9D/7C/pYYBAGQub6eAU9cYAADzu-xtr0w580.png)
STM32F0的USART波特率自動識別問題
![STM32F0的USART<b class='flag-5'>波特率</b><b class='flag-5'>自動識別</b>問題](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
串口傳輸速率低于波特率怎么辦 串口通信的波特率如何設(shè)置
什么是串口波特率?串口通信為什么要設(shè)置波特率?
![什么是<b class='flag-5'>串口</b><b class='flag-5'>波特率</b>?<b class='flag-5'>串口</b>通信為什么要設(shè)置<b class='flag-5'>波特率</b>?](https://file.elecfans.com/web2/M00/3E/6A/pYYBAGJhBGGAGyDYAACBPQuBZQI711.png)
評論