0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于STM32自動(dòng)識(shí)別UART串口波特率的問(wèn)題

5RJg_mcuworld ? 來(lái)源:lq ? 2019-01-24 16:23 ? 次閱讀

最近有朋友問(wèn)關(guān)于UART串口自動(dòng)識(shí)別波特率的問(wèn)題,今天就在這里寫點(diǎn)相關(guān)內(nèi)容。

1寫在前面

關(guān)于自動(dòng)識(shí)別UART串口波特率的這個(gè)問(wèn)題,相信有項(xiàng)目經(jīng)驗(yàn),或者認(rèn)真研究過(guò)串口的朋友都應(yīng)該多多少少知道一點(diǎn)自動(dòng)識(shí)別的方法。

可能絕大部分知道的就是通過(guò)波特率一一匹配來(lái)實(shí)現(xiàn),這種方法也是最常見(jiàn),而且還比較有效的一種方法。

上面這種方法就是大家熟知的通過(guò)軟件來(lái)檢測(cè)波特率的方法,其實(shí),還有一種方法就是通過(guò)硬件自身完成波特率來(lái)檢測(cè)。

針對(duì)STM32,在ST官方其實(shí)在應(yīng)用筆記和參考手冊(cè)文檔中都有提到。下面,我結(jié)合文檔簡(jiǎn)單講下硬件自動(dòng)波特率檢測(cè)的內(nèi)容。

2

STM32硬件自動(dòng)波特率檢測(cè)

ABR:Auto Baud Rate,自動(dòng)波特率檢測(cè)使接收設(shè)備能夠接受來(lái)自各種以不同速率工作的發(fā)送設(shè)備的數(shù)據(jù),無(wú)需事先建立數(shù)據(jù)速率。

1.ABR應(yīng)用地方

事先不知道系統(tǒng)的通信速度。

系統(tǒng)正在使用精確度相對(duì)較低的時(shí)鐘源且該機(jī)制允許在不測(cè)量時(shí)鐘偏差的情況下獲得正確的波特率。

2.支持ABR系列

在STM32中,支持硬件自動(dòng)波特率檢測(cè)的只有部門系列才支持,之前出來(lái)比較早的系列不支持(如F1 F4),這后面推出來(lái)的系列都支持這個(gè)功能,包含最新才出來(lái)的STM32H7、G0系列都支持。

當(dāng)然,對(duì)于內(nèi)置ABR的STM32系列設(shè)備而言,并非所有實(shí)例化USART接口均支持自動(dòng)波特率檢測(cè)。

3.自動(dòng)波特率檢測(cè)模式

ABR是指接收設(shè)備通過(guò)檢查第一個(gè)字符(通常是預(yù)先選擇的標(biāo)志字符)確定傳入數(shù)據(jù)速率的過(guò)程。

STM32產(chǎn)品上的自動(dòng)波特率檢測(cè)功能內(nèi)置的各種模式基于不同字符模式:

模式0:以“1”位為開(kāi)頭的任意字符;

模式1:以10xx模式開(kāi)頭的任何字符;

模式2:0x7F;

模式3:0x55;

提示:

A.在所有ABR模式下,都會(huì)在同步數(shù)據(jù)接收期間多次檢測(cè)波特率,并將每一次的檢測(cè)值與上一次的檢測(cè)值進(jìn)行比較。

B.在7位數(shù)據(jù)長(zhǎng)度模式下,不支持0x7F和0x55幀檢測(cè)ABR模式。

4.代碼配置

相關(guān)代碼,官方提供有基于(標(biāo)準(zhǔn)外設(shè)庫(kù)、HAL庫(kù)的)參考例程,比如F0標(biāo)準(zhǔn)外設(shè)庫(kù)參考代碼:

static void AutoBauRate_StartBitMethod(void) { /* USART enable */ USART_Cmd(EVAL_COM1, ENABLE); /* Configure the AutoBaudRate method */ USART_AutoBaudRateConfig(EVAL_COM1, USART_AutoBaudRate_StartBit); /* Enable AutoBaudRate feature */ USART_AutoBaudRateCmd(EVAL_COM1, ENABLE); /* Wait until Receive enable acknowledge flag is set */ while(USART_GetFlagStatus(EVAL_COM1, USART_FLAG_REACK) == RESET) {} /* Wait until Transmit enable acknowledge flag is set */ while(USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TEACK) == RESET) {} /* Loop until the end of Autobaudrate phase */ while(USART_GetFlagStatus(EVAL_COM1, USART_FLAG_ABRF) == RESET) {} /* If AutoBaudBate error occurred */ if (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_ABRE) != RESET) { /* Turn on LED3 */ STM_EVAL_LEDOn(LED3); } else { /* Turn on LED2 */ STM_EVAL_LEDOn(LED2); /* Wait until RXNE flag is set */ while(USART_GetFlagStatus(EVAL_COM1, USART_FLAG_RXNE) == RESET) {} /* Wait until TXE flag is set */ while(USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TXE) == RESET) {} /* Send received character */ USART_SendData(EVAL_COM1, USART_ReceiveData(EVAL_COM1)); /* clear the TE bit (if a transmission is on going or a data is in the TDR, it will be sent before efectivelly disabling the transmission) */ USART_DirectionModeCmd(EVAL_COM1, USART_Mode_Tx, DISABLE); /* Check the Transfer Complete Flag */ while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TC) == RESET) {} } /* USART Disable */ USART_Cmd(EVAL_COM1, DISABLE); }

5.ABR誤差計(jì)算

由USART時(shí)鐘源( fCK)決定通信速率范圍(尤其是最大通信速率)。接收器采用不同的用戶可配置過(guò)采樣技術(shù),可區(qū)分有效輸入數(shù)據(jù)和噪聲,從而用于恢復(fù)數(shù)據(jù)。這可以在最大通信速率與抗噪聲/時(shí)鐘不準(zhǔn)確性之間實(shí)現(xiàn)平衡。

可通過(guò)編程USARTx_CR1寄存器中的OVER8位來(lái)選擇過(guò)采樣方法,可以是波特率時(shí)鐘的16倍或8倍。

USART時(shí)鐘源頻率必須與預(yù)期通信速率兼容:

? 16倍過(guò)采樣時(shí),波特率介于fCK/65535與fCK/16之間。

? 8倍過(guò)采樣時(shí),波特率介于fCK/65535與fCK/8之間。

波特率誤差取決于USART時(shí)鐘源、過(guò)采樣方法和ABR模式。

其中:

? 預(yù)期波特率取決于發(fā)送設(shè)備

? 實(shí)際波特率是USART接收器使用自動(dòng)波特率檢測(cè)操作確定的波特率。

6.誤差

下圖來(lái)自官方測(cè)試數(shù)據(jù),基于:fCK = 72 MHz時(shí)ABR的誤差計(jì)算,115200 bits/s預(yù)期波特率

從上圖可以看出:ABR模式2和3的精確度高于模式0和1;它們的波特率誤差值更低。

不過(guò),由于預(yù)期波特率與實(shí)際波特率之間的誤差小于1%,因此所有模式的結(jié)果均正常。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • STM32
    +關(guān)注

    關(guān)注

    2258

    文章

    10828

    瀏覽量

    352497
  • 波特率
    +關(guān)注

    關(guān)注

    2

    文章

    290

    瀏覽量

    33926
  • ABR
    ABR
    +關(guān)注

    關(guān)注

    1

    文章

    11

    瀏覽量

    9682

原文標(biāo)題:關(guān)于STM32硬件自動(dòng)波特率檢測(cè)知識(shí),項(xiàng)目中會(huì)用到!

文章出處:【微信號(hào):mcuworld,微信公眾號(hào):嵌入式資訊精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32串口波特率大小計(jì)算案例

    波特率的計(jì)算 STM32下的波特率串口外設(shè)時(shí)鐘息息相關(guān),USART 1的時(shí)鐘來(lái)源于APB2,USART 2-5的時(shí)鐘來(lái)源于APB1。在STM32
    的頭像 發(fā)表于 10-23 14:19 ?7974次閱讀
    <b class='flag-5'>STM32</b><b class='flag-5'>串口</b><b class='flag-5'>波特率</b>大小計(jì)算案例

    什么是串口波特率?串口波特率的分類及應(yīng)用詳解

    什么是串口波特率串口波特率是指串口通信系統(tǒng)中傳輸數(shù)據(jù)的速率。在UART
    的頭像 發(fā)表于 08-08 10:09 ?5311次閱讀
    什么是<b class='flag-5'>串口</b><b class='flag-5'>波特率</b>?<b class='flag-5'>串口</b><b class='flag-5'>波特率</b>的分類及應(yīng)用詳解

    基于stm32自動(dòng)識(shí)別波特率的設(shè)計(jì)

    某設(shè)備是以某個(gè)波特率發(fā)送固定已知數(shù)據(jù)的,用f4串口接收數(shù)據(jù),怎么判別這個(gè)設(shè)備的波特率是多少呢
    發(fā)表于 09-14 14:12

    【個(gè)人經(jīng)驗(yàn)分享】STM32ISP與STM32波特率自動(dòng)識(shí)別技術(shù)理解

    STM32之ISP也同其他ISP一樣采用從機(jī)(STM32)波特率自動(dòng)識(shí)別技術(shù).它采用非常“不理智”的偶校驗(yàn)(一個(gè)字節(jié)前面加一位校驗(yàn)位使得“1”的個(gè)數(shù)保持為偶數(shù)),菜農(nóng)對(duì)其不 慎滿意
    發(fā)表于 08-29 09:43

    29035串口刷寫程序波特率自動(dòng)識(shí)別DSP是怎么實(shí)現(xiàn)的

    有用的程序數(shù)據(jù),那么對(duì)于沒(méi)有程序數(shù)據(jù)的地址上面的數(shù)據(jù)應(yīng)該都是FF,那么這個(gè)FF是否也要用數(shù)據(jù)流傳送給DSP芯片2、對(duì)于串口刷寫時(shí),波特率自動(dòng)識(shí)別DSP是怎么實(shí)現(xiàn)的,對(duì)于這個(gè)過(guò)程,上位機(jī)需要做哪些動(dòng)作
    發(fā)表于 12-07 11:35

    關(guān)于UART串口自動(dòng)識(shí)別波特率的問(wèn)題匯總,錯(cuò)過(guò)絕對(duì)后悔

    關(guān)于UART串口自動(dòng)識(shí)別波特率的問(wèn)題匯總,錯(cuò)過(guò)絕對(duì)后悔
    發(fā)表于 12-15 06:19

    如何實(shí)現(xiàn)嵌入式里串口(UART)自動(dòng)波特率識(shí)別程序設(shè)計(jì)?

    如何實(shí)現(xiàn)嵌入式里串口(UART)自動(dòng)波特率識(shí)別程序設(shè)計(jì)?
    發(fā)表于 02-08 06:34

    單片機(jī)有沒(méi)有串口波特率自動(dòng)識(shí)別算法?

    單片機(jī)有沒(méi)有串口波特率自動(dòng)識(shí)別算法
    發(fā)表于 09-21 07:09

    STM32串口自動(dòng)識(shí)別波特率

    STM32串口自動(dòng)識(shí)別波特率
    的頭像 發(fā)表于 03-04 09:53 ?8984次閱讀

    串口波特率計(jì)算詳解

    STM32波特率計(jì)算詳解波特率的計(jì)算????STM32下的波特率串口外設(shè)時(shí)鐘息息相關(guān),USA
    發(fā)表于 12-05 09:06 ?22次下載
    <b class='flag-5'>串口</b><b class='flag-5'>波特率</b>計(jì)算詳解

    STM32 USB虛擬串口波特率問(wèn)題(含源碼)

    ,需要將單片機(jī)真實(shí)串口(這里以USART1為例)的收發(fā)數(shù)據(jù)與USB口進(jìn)行交互。用過(guò)USB虛擬串口的朋友可能知道,要實(shí)現(xiàn)該功能,還存在以下問(wèn)題:1.電腦上設(shè)置的串口波特率不影響USB接口
    發(fā)表于 12-28 19:51 ?21次下載
    <b class='flag-5'>STM32</b> USB虛擬<b class='flag-5'>串口</b><b class='flag-5'>波特率</b>問(wèn)題(含源碼)

    STM32波特率計(jì)算詳解

    波特率的計(jì)算 STM32下的波特率串口外設(shè)時(shí)鐘息息相關(guān),USART 1的時(shí)鐘來(lái)源于APB2,USART 2-5的時(shí)鐘來(lái)源于APB1。在STM32
    發(fā)表于 02-11 10:46 ?20次下載
    <b class='flag-5'>STM32</b>下<b class='flag-5'>波特率</b>計(jì)算詳解

    關(guān)于UART/CAN/PLL時(shí)鐘計(jì)算波特率的方法

    SWM系列關(guān)于UART/CAN/PLL等時(shí)鐘相關(guān)模塊,計(jì)算波特率的方法。
    的頭像 發(fā)表于 03-18 16:52 ?7346次閱讀

    STM32F0的USART波特率自動(dòng)識(shí)別問(wèn)題

    電子發(fā)燒友網(wǎng)站提供《STM32F0的USART波特率自動(dòng)識(shí)別問(wèn)題.pdf》資料免費(fèi)下載
    發(fā)表于 08-01 11:00 ?2次下載
    <b class='flag-5'>STM32</b>F0的USART<b class='flag-5'>波特率</b><b class='flag-5'>自動(dòng)識(shí)別</b>問(wèn)題

    什么是串口波特率串口通信為什么要設(shè)置波特率

    在電子設(shè)備的世界中,數(shù)據(jù)是通過(guò)各種方式進(jìn)行傳輸?shù)?。其中?b class='flag-5'>串口通信是一種常見(jiàn)的數(shù)據(jù)傳輸方式,它以其簡(jiǎn)單、可靠和廣泛的特性,成為了電子設(shè)備間通信的重要手段。而在串口通信中,有一個(gè)非常重要的參數(shù)——波特率
    的頭像 發(fā)表于 11-03 08:21 ?3786次閱讀
    什么是<b class='flag-5'>串口</b><b class='flag-5'>波特率</b>?<b class='flag-5'>串口</b>通信為什么要設(shè)置<b class='flag-5'>波特率</b>?