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

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

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

STM32的USART自動(dòng)波特率檢測(cè)

airX嵌入式 ? 來(lái)源:airX嵌入式 ? 作者:airX嵌入式 ? 2022-11-28 11:15 ? 次閱讀

《前言》

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

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

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

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

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

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

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

1、特性概述

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

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

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

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

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

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

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

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

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

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

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

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

?0x7F:模式2

?0x55:模式3

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

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

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

3、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模式。

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

其中:

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

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

《軟件自動(dòng)波特率檢測(cè)》

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

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

使用Systick定時(shí)器測(cè)量?jī)蓚€(gè)上升沿之間間隔的持續(xù)時(shí)間。此持續(xù)時(shí)間對(duì)應(yīng)于8位的持續(xù)時(shí)間,因此

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

?波特率 = 1/位時(shí)間

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

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

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

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

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

1、USART1配置示例

在兩個(gè)示例中,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時(shí)鐘源是使用HSE PLL時(shí)鐘源的72 MHz系統(tǒng)時(shí)鐘。(某些測(cè)試使用HSI時(shí)鐘作為USART1時(shí)鐘源來(lái)執(zhí)行。這是為了檢查HSI不準(zhǔn)確性對(duì)結(jié)果的影響。)

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

USART1被配置為自動(dòng)檢測(cè)波特率。用戶必須在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)
{}

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

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

?如果自動(dòng)波特率檢測(cè)操作成功完成,則向超級(jí)終端發(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、軟件自動(dòng)波特率檢測(cè)

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

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

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

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

4、誤差計(jì)算

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

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

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

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

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

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

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

圖 5顯示:

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

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

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

《結(jié)論》

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

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

審核編輯 :李倩

聲明:本文內(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)投訴
  • 通信
    +關(guān)注

    關(guān)注

    18

    文章

    6034

    瀏覽量

    136037
  • STM32
    +關(guān)注

    關(guān)注

    2270

    文章

    10901

    瀏覽量

    356224
  • USART
    +關(guān)注

    關(guān)注

    1

    文章

    195

    瀏覽量

    30874

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    波特率與串行通信的關(guān)系 各種設(shè)備波特率轉(zhuǎn)換的方法

    波特率(Baud Rate)是串行通信中的一個(gè)重要參數(shù),它指的是信號(hào)傳輸?shù)乃俾?,即單位時(shí)間內(nèi)傳輸?shù)姆?hào)(或信號(hào)狀態(tài))的數(shù)量。在串行通信中,波特率決定了數(shù)據(jù)傳輸?shù)乃俣?,因此?duì)于通信效率和設(shè)備兼容性
    的頭像 發(fā)表于 11-22 10:01 ?422次閱讀

    常見的波特率標(biāo)準(zhǔn)和協(xié)議

    波特率是指在數(shù)據(jù)通信中,每秒鐘傳輸?shù)姆?hào)數(shù)(或比特?cái)?shù)),是衡量數(shù)據(jù)通信速度的重要指標(biāo)。在不同的通信協(xié)議和場(chǎng)景中,常見的波特率標(biāo)準(zhǔn)和協(xié)議有所不同。以下是一些常見的波特率標(biāo)準(zhǔn)和協(xié)議: 一、串口通信
    的頭像 發(fā)表于 11-22 09:56 ?1444次閱讀

    波特率的定義和計(jì)算方法 波特率與數(shù)據(jù)傳輸速度的關(guān)系

    波特率的定義 波特率(Baud Rate),又稱調(diào)制速率或傳符號(hào),是指每秒傳輸?shù)姆?hào)數(shù)目,單位為波特(Bd)。它是一個(gè)數(shù)字信號(hào)通信中重要的參數(shù),在串行通信協(xié)議中經(jīng)常被用作衡量串行數(shù)據(jù)
    的頭像 發(fā)表于 11-22 09:49 ?1854次閱讀

    MCU串口自動(dòng)識(shí)別波特率原理分析

    現(xiàn)在的單片機(jī)資源越來(lái)越豐富了,其中我們常用的串口也是內(nèi)部集成了多個(gè),關(guān)鍵功能也越來(lái)越強(qiáng)了。 我們有些應(yīng)用可能會(huì)用到串口自動(dòng)識(shí)別波特率,今天就來(lái)講講MCU串口自動(dòng)識(shí)別波特率底層的常見的原
    的頭像 發(fā)表于 10-23 16:12 ?605次閱讀
    MCU串口<b class='flag-5'>自動(dòng)</b>識(shí)別<b class='flag-5'>波特率</b>原理分析

    波特率9600和115200的區(qū)別

    在現(xiàn)代通信技術(shù)中,數(shù)據(jù)傳輸速率是一個(gè)關(guān)鍵的性能指標(biāo)。對(duì)于串行通信,波特率是衡量數(shù)據(jù)傳輸速度的基本單位。波特率9600和115200是兩種常見的設(shè)置,它們?cè)诓煌膽?yīng)用場(chǎng)景中有著各自的優(yōu)勢(shì)和局
    的頭像 發(fā)表于 10-18 14:56 ?1658次閱讀

    波特率與比特有何關(guān)系 波特率與數(shù)據(jù)傳輸速率的關(guān)系

    波特率(Baud Rate)和比特(Bit Rate)是衡量數(shù)據(jù)通信系統(tǒng)性能的兩個(gè)重要參數(shù),它們之間有著密切的關(guān)系,但并不完全相同。 波特率(Baud Rate): 波特率是指在數(shù)據(jù)
    的頭像 發(fā)表于 10-18 14:55 ?917次閱讀

    uart波特率和傳輸頻率的關(guān)系 UART串口的常用波特率為多少

    UART(Universal Asynchronous Receiver/Transmitter)是一種廣泛使用的異步串行通信技術(shù),它允許兩臺(tái)設(shè)備之間進(jìn)行雙向數(shù)據(jù)傳輸。在UART通信中,波特率和傳輸
    的頭像 發(fā)表于 10-06 16:12 ?2836次閱讀
    uart<b class='flag-5'>波特率</b>和傳輸頻率的關(guān)系 UART串口的常用<b class='flag-5'>波特率</b>為多少

    485自動(dòng)收發(fā)電路的波特率是多少

    485自動(dòng)收發(fā)電路的波特率并不是一個(gè)固定的值,而是可以根據(jù)具體的應(yīng)用需求和電路設(shè)計(jì)進(jìn)行調(diào)整的。在實(shí)際應(yīng)用中,波特率的設(shè)置會(huì)受到多種因素的影響,包括傳輸距離、信號(hào)衰減、噪音環(huán)境、設(shè)備性能以及通信協(xié)議
    的頭像 發(fā)表于 07-13 09:41 ?2645次閱讀

    如何使用示波器測(cè)量串口波特率

    在通信和電子測(cè)量領(lǐng)域,串口波特率是一個(gè)至關(guān)重要的參數(shù),它決定了數(shù)據(jù)在串行通信線上的傳輸速率。使用示波器來(lái)測(cè)量串口波特率是一種常見且有效的方法,尤其是在沒(méi)有專業(yè)串口調(diào)試工具或需要更精確測(cè)量時(shí)。本文將
    的頭像 發(fā)表于 05-27 16:25 ?5078次閱讀

    芯海應(yīng)用筆記:通用 MCU USART 自動(dòng)波特率檢測(cè)

    本文檔介紹和說(shuō)明芯海科技旗下 CS32 系列 MCU 的自動(dòng)波特率檢測(cè)功能,并為不具備硬件自動(dòng)波特率檢測(cè)的 MCU 產(chǎn)品提供替代軟件方法 。*附件:應(yīng)用筆記:芯海通用MCU
    發(fā)表于 05-16 11:42

    波特率有什么危害尼?又該如何避免?

    深入探討了波特率過(guò)高可能帶來(lái)的危害,并提供了一些實(shí)用建議來(lái)保護(hù)設(shè)備不受影響。在通信領(lǐng)域,波特率是決定數(shù)據(jù)傳輸速度的重要參數(shù)。然而,波特率設(shè)置不當(dāng)可能會(huì)對(duì)設(shè)備造成嚴(yán)重的影響。本文旨在揭示波特率
    的頭像 發(fā)表于 04-03 16:45 ?1409次閱讀

    為啥要轉(zhuǎn)換波特率 波特率和傳輸速率的關(guān)系

    對(duì)于串行多主 CAN 總線,如果波特率被稱為“500000波特”,則 CAN 上的該端口每秒最多可傳輸500000位。
    的頭像 發(fā)表于 03-06 17:38 ?5132次閱讀
    為啥要轉(zhuǎn)換<b class='flag-5'>波特率</b> <b class='flag-5'>波特率</b>和傳輸速率的關(guān)系

    波特率發(fā)生器使用哪個(gè)定時(shí)器 波特率發(fā)生器的時(shí)鐘來(lái)源是什么

    波特率發(fā)生器是一種用于控制串行數(shù)據(jù)通信速率的設(shè)備,它可以生成特定波特率的時(shí)鐘信號(hào)。在嵌入式系統(tǒng)、通信設(shè)備和計(jì)算機(jī)硬件中,波特率發(fā)生器的使用十分常見。波特率發(fā)生器通常使用定時(shí)器來(lái)實(shí)現(xiàn)時(shí)鐘
    的頭像 發(fā)表于 01-24 09:56 ?2224次閱讀

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

    什么是串口波特率?串口通信為什么要設(shè)置波特率?波特率與比特的關(guān)系 如何選擇串口波特率?? 串口波特率
    的頭像 發(fā)表于 01-22 16:10 ?2181次閱讀