chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

STM32的USART自動波特率檢測

airX嵌入式 ? 來源:airX嵌入式 ? 作者:airX嵌入式 ? 2022-11-28 11:15 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

《前言》

正確的USART通信要求發(fā)送和接收波特率的匹配度足夠高,否則可能發(fā)生通信錯誤。

當(dāng)在兩個設(shè)備之間建立通信鏈路時,自動波特率檢測十分有用,因為從設(shè)備能夠檢測到主控制器的波特率并進(jìn)行相應(yīng)的自我調(diào)整。這需要使用一種自動機制來確定波特率。

某些STM32器件中內(nèi)置的USART外設(shè)提供許多功能,包括硬件自動波特率檢測。

本應(yīng)用筆記旨在介紹STM32微控制器的自動波特率檢測功能,并為沒有在硬件中實現(xiàn)此功能的STM32器件提供替代軟件方法。

本應(yīng)用筆記適用于表 1中所列產(chǎn)品。

383d3910-6eca-11ed-8abf-dac502259ad0.png

《硬件自動波特率檢測》

1、特性概述

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

在一些STM32產(chǎn)品中,USART能夠使用專用硬件自動確定波特率。

表 2提供了支持自動波特率檢測的STM32系列設(shè)備的概述。

38656caa-6eca-11ed-8abf-dac502259ad0.png

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

表 3詳細(xì)說明了這一限制。

388a70fe-6eca-11ed-8abf-dac502259ad0.png

2、自動波特率檢測模式

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

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

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

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

?0x7F:模式2

?0x55:模式3

38c483fc-6eca-11ed-8abf-dac502259ad0.png

在激活自動波特率檢測之前,必須通過USARTx_CR2寄存器中的ABRMOD[1:0]字段選擇一種ABR模式。在所有ABR模式下,都會在同步數(shù)據(jù)接收期間多次檢測波特率,并將每一次的檢測值與上一次的檢測值進(jìn)行比較。

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

3、ABR誤差計算

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

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

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

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

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

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

38eed206-6eca-11ed-8abf-dac502259ad0.png

其中:

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

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

《軟件自動波特率檢測》

如果不支持硬件自動波特率檢測,可采用本節(jié)描述的軟件方法。

軟件方法的理念是發(fā)送0x7F數(shù)據(jù)幀到USARTx_RX引腳。這將連接到EXTI線路,該線路被配置為在每個上升沿生成中斷。

使用Systick定時器測量兩個上升沿之間間隔的持續(xù)時間。此持續(xù)時間對應(yīng)于8位的持續(xù)時間,因此

?位時間 = 計算的持續(xù)時間 / 8

?波特率 = 1/位時間

然后,根據(jù)計算的波特率值進(jìn)行USARTx_BRR寄存器編程。

390cf4f2-6eca-11ed-8abf-dac502259ad0.png

《軟件和硬件方法設(shè)置》

此設(shè)置示例使用的是內(nèi)置硬件自動波特率檢測功能的STM32F303xD/E。

PC應(yīng)用“超級終端”用于向/從STM32F303發(fā)送/接收數(shù)據(jù)幀。因此,測試的是介于600bits/s至115200 bits/s之間的標(biāo)準(zhǔn)波特率。使用另一個STM32F3器件作為發(fā)送器測試可以達(dá)到的最高波特率值(9 Mbits/s)。

1、USART1配置示例

在兩個示例中,STM32 USART1的配置如下:

/*##-1- Configure the UART peripheral ######################################*/
 /* Put the USART peripheral in the Asynchronous mode (UART Mode) */
 /* UART configured as follows:
- Word Length = 8 Bits
- Stop Bit = One Stop bit
- Parity = NONE parity
- BaudRate = 115200 baud It can be any other value as the USARTx_BRR register will be 
reprogrammed 
- Hardware flow control disabled (RTS and CTS signals)
- The oversampling mode is 8 or 16 (Both are tested) 
*/
 UartHandle.Instance = USARTx;
 UartHandle.Init.BaudRate = 115200; 
 UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
 UartHandle.Init.StopBits = UART_STOPBITS_1;
 UartHandle.Init.Parity = UART_PARITY_NONE;
 UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
 UartHandle.Init.Mode = UART_MODE_TX_RX;
 UartHandle.Init.OverSampling = UART_OVERSAMPLING_16;

注:

USART1時鐘源是使用HSE PLL時鐘源的72 MHz系統(tǒng)時鐘。(某些測試使用HSI時鐘作為USART1時鐘源來執(zhí)行。這是為了檢查HSI不準(zhǔn)確性對結(jié)果的影響。)

2、硬件自動波特率檢測

USART1被配置為自動檢測波特率。用戶必須在USART1初始化函數(shù)中選擇ABR模式,如下所示:

/*##-2- Configure the AutoBaudRate method */
UartHandle.AdvancedInit.AdvFeatureInit =UART_ADVFEATURE_AUTOBAUDRATE_INIT;
UartHandle.AdvancedInit.AutoBaudRateEnable = 
UART_ADVFEATURE_AUTOBAUDRATE_ENABLE;
/*Uncomment your appropriate mode */
//UartHandle.AdvancedInit.AutoBaudRateMode = 
UART_ADVFEATURE_AUTOBAUDRATE_ONSTARTBIT; 
//UartHandle.AdvancedInit.AutoBaudRateMode = 
UART_ADVFEATURE_AUTOBAUDRATE_ONFALLINGEDGE;
//UartHandle.AdvancedInit.AutoBaudRateMode = 
UART_ADVFEATURE_AUTOBAUDRATE_ON0X7FFRAME;
//UartHandle.AdvancedInit.AutoBaudRateMode = 
UART_ADVFEATURE_AUTOBAUDRATE_ON0X55FRAME; 
if (HAL_UART_Init(&UartHandle) != HAL_OK)
{
/* Initialization Error */
 Error_Handler();
}
/* Wait until Receive enable acknowledge flag is set */
while(__HAL_UART_GET_FLAG(&UartHandle,UART_FLAG_REACK) == RESET)
{} 
/* Wait until Transmit enable acknowledge flag is set */ 
while(__HAL_UART_GET_FLAG(&UartHandle,UART_FLAG_TEACK) == RESET)
{}
/* Loop until the end of Autobaudrate phase */
while(__HAL_UART_GET_FLAG(&UartHandle,UART_FLAG_ABRF) == RESET)
{}

在整個初始化過程完成后,USART等待從超級終端接收數(shù)據(jù),然后開始自動波特率檢測階段。通過ABRF標(biāo)志監(jiān)測此階段的結(jié)束。

?如果自動波特率檢測操作不成功,則ABRE標(biāo)志置位

?如果自動波特率檢測操作成功完成,則向超級終端發(fā)送確認(rèn)數(shù)據(jù)。

/* If AutoBaudBate error occurred */
if (__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_ABRE)!= RESET)
{
 Error_Handler();
}
else
{
 /* Wait until RXNE flag is set */
 while(__HL_UART_GET_FLAG(&UartHandle,UART_FLAG_RXNE) == RESET)
 {} 
 /* Send acknowledgement message*/
 if (HAL_UART_Transmit_DMA(&UartHandle, (uint8_t *)aTxBuffer, TXBUFFERSIZE) != HAL_OK)
 {
 /* Transfer error in transmission process */
 Error_Handler();
 }
 while (HAL_UART_GetState(&UartHandle) != HAL_UART_STATE_READY)
 {
 }
}

3、軟件自動波特率檢測

表 5詳細(xì)說明了軟件方法。

3934d0b2-6eca-11ed-8abf-dac502259ad0.png

3963717e-6eca-11ed-8abf-dac502259ad0.png

399fc598-6eca-11ed-8abf-dac502259ad0.png

4、誤差計算

圖 2顯示ABR模式2和3的精確度高于模式0和1;它們的波特率誤差值更低。

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

39cd0bde-6eca-11ed-8abf-dac502259ad0.png

圖 3顯示在通常情況下,當(dāng)由72 MHz系統(tǒng)時鐘為USART提供時鐘(HSE作為PLL時鐘源)時,結(jié)果優(yōu)于USART時鐘源使用HSI時鐘。這要歸因于HSI的相對不準(zhǔn)確性。

3a02ce04-6eca-11ed-8abf-dac502259ad0.png

圖 4顯示在大多數(shù)情況下,硬件方法提供的結(jié)果優(yōu)于軟件方法。不過,在某些情況下,軟件方法能夠提供相比于使用硬件方法時更好的結(jié)果。

3a2fd07a-6eca-11ed-8abf-dac502259ad0.png

圖 5顯示:

?使用硬件方法時,達(dá)到最大波特率9 Mbits/s時誤差為0%。

?使用軟件方法時,達(dá)到最大波特率時誤差為約30%,這要歸因于執(zhí)行中斷處理程序所花費的CPU周期。

3a555db8-6eca-11ed-8abf-dac502259ad0.png

《結(jié)論》

此應(yīng)用筆記描述了某些STM32器件內(nèi)置的硬件自動波特率檢測功能。它還提供了在軟件中實現(xiàn)此功能的技術(shù),作為STM32器件沒有在硬件中實現(xiàn)此功能的解決方案。

盡管示例中的自動波特率檢測均應(yīng)用在示例的開頭部分,但是可以進(jìn)行擴展并在每次發(fā)送和接收設(shè)備檢測到通信錯誤時使用。當(dāng)主機使用不同波特率進(jìn)行通信時,這一特性可實現(xiàn)應(yīng)用的穩(wěn)健性。

審核編輯 :李倩

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

    關(guān)注

    18

    文章

    6313

    瀏覽量

    139525
  • STM32
    +關(guān)注

    關(guān)注

    2305

    文章

    11118

    瀏覽量

    370965
  • USART
    +關(guān)注

    關(guān)注

    1

    文章

    201

    瀏覽量

    32911

原文標(biāo)題:STM32的USART自動波特率檢測

文章出處:【微信號:airX嵌入式,微信公眾號:airX嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

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

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

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

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

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

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

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

    波特率是什么

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

    可編程電源的通信波特率應(yīng)如何設(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 ?2739次閱讀
    基于瑞薩64位MPU RZ/G2L的uboot串口多<b class='flag-5'>波特率</b>支持介紹

    第十四章 USART——串口通訊

    本章介紹了USART串口通訊,含物理層(RS-232、TTL電平)、協(xié)議層(波特率、數(shù)據(jù)幀),及W55MH32的USART功能與應(yīng)用。
    的頭像 發(fā)表于 06-14 16:30 ?1493次閱讀
    第十四章 <b class='flag-5'>USART</b>——串口通訊

    MAX13051 ±80V故障保護CAN收發(fā)器,具有自動波特率模式技術(shù)手冊

    MAX13051為具有自動波特率模式、±80V故障保護的CAN收發(fā)器,可理想用于需要過壓保護的設(shè)備網(wǎng)絡(luò)和其他工業(yè)網(wǎng)絡(luò)應(yīng)用。MAX13051可以為CAN協(xié)議控制器和CAN總線的物理線路提供連接。
    的頭像 發(fā)表于 05-27 11:07 ?1015次閱讀
    MAX13051 ±80V故障保護CAN收發(fā)器,具有<b class='flag-5'>自動波特率</b>模式技術(shù)手冊

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

    我用CubeMX配置的串口+GPDMA接收,115200波特率正常能用, 然后如果波特率設(shè)置錯誤為9600,再改回來115200,接收就不能用了,調(diào)試好像時DMA出錯了,然后啟用HAL_UARTEx_ReceiveToIdle_DMA函數(shù)依然錯誤,有大神知道怎么解決嗎
    發(fā)表于 03-07 07:59

    STM32G070 UART串口,低波特率傳送數(shù)據(jù)時,TIMER出現(xiàn)嚴(yán)重延時現(xiàn)象如何解決?

    STM32G070, UART串口,低波特率傳送數(shù)據(jù)時,TIMER出現(xiàn)嚴(yán)重延時現(xiàn)象,傳送數(shù)據(jù)長的話,導(dǎo)致系統(tǒng)重啟。如何解決?
    發(fā)表于 03-07 07:07

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

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

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

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

    請問MSC1210串口UART1如何設(shè)置波特率?

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

    RS232通信的波特率設(shè)置說明

    RS232通信的波特率設(shè)置是確保數(shù)據(jù)正確傳輸?shù)年P(guān)鍵參數(shù)之一。以下是對RS232通信波特率設(shè)置的說明: 一、波特率的概念 波特率是指每秒傳輸?shù)谋忍財?shù)(bps),是衡量數(shù)據(jù)傳輸速度的重要指
    的頭像 發(fā)表于 12-10 16:26 ?6335次閱讀