91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

STM32的串口自動識別波特率

黃工的嵌入式技術(shù)圈 ? 來源:黃工的嵌入式技術(shù)圈 ? 作者:黃工的嵌入式技術(shù) ? 2020-03-04 09:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

1寫在前面

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

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

上面這種方法就是大家熟知的通過軟件來檢測波特率的方法,其實,還有一種方法就是通過硬件自身完成波特率來檢測。

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

2

STM32硬件自動波特率檢測

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

1.ABR應用地方

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

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

2.支持ABR系列

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

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

3.自動波特率檢測模式

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

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

模式0:以“1”位為開頭的任意字符;

模式1:以10xx模式開頭的任何字符;

模式2:0x7F;

模式3:0x55;

提示:

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

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

4.代碼配置

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

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誤差計算

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

可通過編程USARTx_CR1寄存器中的OVER8位來選擇過采樣方法,可以是波特率時鐘的16倍或8倍。

USART時鐘源頻率必須與預期通信速率兼容:

? 16倍過采樣時,波特率介于fCK/65535與fCK/16之間。

? 8倍過采樣時,波特率介于fCK/65535與fCK/8之間。

波特率誤差取決于USART時鐘源、過采樣方法和ABR模式。

其中:

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

? 實際波特率是USART接收器使用自動波特率檢測操作確定的波特率。

6.誤差

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

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

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

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

    關(guān)注

    2310

    文章

    11162

    瀏覽量

    373543
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1314

    瀏覽量

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

    關(guān)注

    2

    文章

    320

    瀏覽量

    35575
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4968

    瀏覽量

    74010
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    是否可以將 visionfive2 的 uart 配置為 1Mb 波特率?

    我需要通過 uart 加載 u-boot 和 u-boot spl,由于某種原因我不能使用 sd 或 spi flash。但是這需要太多時間,因為默認的 uart 波特率是 115200。 我試過
    發(fā)表于 02-04 06:24

    碩博電子IO模塊修改波特率和節(jié)點ID操作步驟

    正確設(shè)置波特率與節(jié)點ID,是保證IO模塊與控制器穩(wěn)定通信的關(guān)鍵。配置不當易引發(fā)設(shè)備失聯(lián)、數(shù)據(jù)錯亂等故障。本文將詳細講解波特率與節(jié)點ID的規(guī)范修改步驟,輕松搞定配置難題。
    的頭像 發(fā)表于 01-27 10:39 ?543次閱讀
    碩博電子IO模塊修改<b class='flag-5'>波特率</b>和節(jié)點ID操作步驟

    使用內(nèi)置晶振的話,串口波特率最大可以設(shè)置多少,不會丟包嗎?

    之前我用ST的某芯片,采用內(nèi)置晶振,將波特率設(shè)置115200,100ms收發(fā)一次數(shù)據(jù)發(fā)現(xiàn)就有丟包的情況了,想知道,芯源的MCU效果如何?有大佬試過使用內(nèi)置晶振的話,串口波特率最大可以設(shè)置多少,不會丟包么
    發(fā)表于 01-19 06:48

    請問使用串口ISP波特率可以自己設(shè)定嗎?

    請問使用串口ISP,波特率可以自己設(shè)定嗎?
    發(fā)表于 01-14 08:27

    FDCAN 數(shù)據(jù)段波特率增加后發(fā)送失敗的問題分析

    客戶在使用 FDCAN 協(xié)議,仲裁段波特率配置位 1Mbit/s,數(shù)據(jù)段波特率配置為 5Mbit/s時,發(fā)現(xiàn) FDCAN 發(fā)送功能異常。首先建議客戶使用 IC 內(nèi)部回環(huán)模式進行測試發(fā)現(xiàn) 5M
    發(fā)表于 01-04 11:16 ?0次下載

    請問波特率參數(shù)如何設(shè)置?

    波特率參數(shù)如何設(shè)置?
    發(fā)表于 12-24 08:05

    支持小數(shù)波特率的意義是什么

    我看芯源有一款MCU是支持小數(shù)波特率,支持小數(shù)波特率的意義是什么?是為了數(shù)據(jù)傳輸更穩(wěn)定?
    發(fā)表于 12-11 07:15

    UART波特率計算及UART收發(fā)回顯實驗

    決定串口波特率的寄存器有BRR(Bite Rate Rigister),SEMR(Serial Extended Mode Rigister)和MDDR(Modulation Duty
    的頭像 發(fā)表于 10-17 09:51 ?3008次閱讀
    UART<b class='flag-5'>波特率</b>計算及UART收發(fā)回顯實驗

    ATClient配合USART_V2使用時,無法開at_client_init后修改串口波特率是怎么回事?

    。 AT_SW_VERSION_NUM為0x10301,RTTHREAD的版本為0x50002。 有另一個項目用的串口是V1版本則正常,感覺是ATClient和串口V2在波特率修改的使用上有些地方不太兼容
    發(fā)表于 10-09 09:10

    串口波特率設(shè)置1200用不了是怎么回事?

    mcu:stm32f407zg 調(diào)試時,設(shè)置波特率為1200,而串口輸出為亂碼,電腦設(shè)置波特率19200來接收mcu的數(shù)據(jù),卻能接收正確; (我以前沒有用RTT時,用
    發(fā)表于 09-23 07:19

    115200的波特率,為啥實際速度只有11KB/s?

    波特率≠真實速度! 這幾個概念確實容易混淆,但它們描述的是通信過程中不同層面的速率指標。讓我們一起來理清楚它們的區(qū)別和聯(lián)系↓ 主要區(qū)別解析 比特 (Bit Rate): 指每秒傳輸?shù)亩M制比特數(shù)量
    的頭像 發(fā)表于 09-10 11:18 ?779次閱讀

    請問如何使用低功耗 UART (LP UART) 波特率補償?

    如何使用低功耗 UART (LP UART) 波特率補償?
    發(fā)表于 08-21 07:05

    波特率是什么

    波特率是串行通信中的一個核心參數(shù),用于描述數(shù)據(jù)在傳輸線路上的傳輸速率。以下從定義、單位、與比特的關(guān)系、實際應用及設(shè)置注意事項等方面進行詳細說明: 一、定義與本質(zhì) 波特率(Baud Rate)指單位
    的頭像 發(fā)表于 07-22 11:11 ?8477次閱讀

    可編程電源的通信波特率應如何設(shè)置?

    Software”在“System Configuration”→“Serial Port”中調(diào)整波特率。 3. 通過SCPI命令設(shè)置(適用于自動化測試系統(tǒng)) 步驟: 使用終端工具(如PuTTY、Tera
    發(fā)表于 07-07 15:01

    基于瑞薩64位MPU RZ/G2L的uboot串口波特率支持介紹

    本文主要介紹基于瑞薩64位MPU RZ/G2L,討論uboot下非常規(guī)波特率115200的支持方法,用于解決客戶對uboot下特殊波特率的需求,供客戶參考。
    的頭像 發(fā)表于 07-04 15:54 ?3078次閱讀
    基于瑞薩64位MPU RZ/G2L的uboot<b class='flag-5'>串口</b>多<b class='flag-5'>波特率</b>支持介紹