国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

STM32的串口自動識別波特率

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

掃碼添加小助手

加入工程師交流群

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

1寫在前面

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

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

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

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

2

STM32硬件自動波特率檢測

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

1.ABR應用地方

事先不知道系統的通信速度。

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

2.支持ABR系列

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

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

3.自動波特率檢測模式

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

STM32產品上的自動波特率檢測功能內置的各種模式基于不同字符模式:

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

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

模式2:0x7F;

模式3:0x55;

提示:

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

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

4.代碼配置

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

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)決定通信速率范圍(尤其是最大通信速率)。接收器采用不同的用戶可配置過采樣技術,可區分有效輸入數據和噪聲,從而用于恢復數據。這可以在最大通信速率與抗噪聲/時鐘不準確性之間實現平衡。

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

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

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

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

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

其中:

? 預期波特率取決于發送設備

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

6.誤差

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

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

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

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

    關注

    2307

    文章

    11128

    瀏覽量

    371472
  • uart
    +關注

    關注

    22

    文章

    1305

    瀏覽量

    106183
  • 波特率
    +關注

    關注

    2

    文章

    319

    瀏覽量

    35455
  • 代碼
    +關注

    關注

    30

    文章

    4947

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    支持小數波特率的意義是什么

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

    請問支持小數波特率接收數據的意義在哪兒?

    我看芯源支持小數波特率,話說,支持小數波特率接收數據的意義在哪兒?是通訊更有精度嗎?
    發表于 12-02 07:17

    UART波特率計算及UART收發回顯實驗

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

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

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

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

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

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

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

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

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

    波特率是什么

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

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

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

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

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

    STM32U575串口接收+GPDMA波特率不匹配怎么解決?

    我用CubeMX配置的串口+GPDMA接收,115200波特率正常能用, 然后如果波特率設置錯誤為9600,再改回來115200,接收就不能用了,調試好像時DMA出錯了,然后啟用HAL_UARTEx_ReceiveToIdle_
    發表于 03-07 07:59

    STM32G070 UART串口,低波特率傳送數據時,TIMER出現嚴重延時現象如何解決?

    STM32G070, UART串口,低波特率傳送數據時,TIMER出現嚴重延時現象,傳送數據長的話,導致系統重啟。如何解決?
    發表于 03-07 07:07

    CAN總線十萬個為什么 | CAN自定義波特率有什么用?

    導讀CAN總線通信中,波特率一致并不總能保證通信順暢。本文將揭秘自定義波特率的原理和應用,探討如何通過優化采樣點和提高容忍度解決通信問題,助力工程師提升通信穩定性。通常情況下,CAN總線通信只需確保
    的頭像 發表于 02-07 11:36 ?1130次閱讀
    CAN總線十萬個為什么 | CAN自定義<b class='flag-5'>波特率</b>有什么用?

    AN-891: ADuC703x系列LIN波特率計算

    電子發燒友網站提供《AN-891: ADuC703x系列LIN波特率計算.pdf》資料免費下載
    發表于 01-14 15:53 ?0次下載
    AN-891: ADuC703x系列LIN<b class='flag-5'>波特率</b>計算

    請問MSC1210串口UART1如何設置波特率

    如題,MSC1210的手冊上面有提到,UART0的波特率可以進行選擇,可選擇為T1的溢出作為波特率的設置,但是UART1的波特率如何設置?是和UART0的波特率一樣嗎?還是需要其他
    發表于 01-02 08:27