色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

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

3天內不再提示

STM32的USART自動波特率檢測

airX嵌入式 ? 來源:airX嵌入式 ? 作者:airX嵌入式 ? 2022-11-28 11:15 ? 次閱讀

《前言》

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

當在兩個設備之間建立通信鏈路時,自動波特率檢測十分有用,因為從設備能夠檢測到主控制器的波特率并進行相應的自我調整。這需要使用一種自動機制來確定波特率。

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

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

本應用筆記適用于表 1中所列產品。

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

《硬件自動波特率檢測》

1、特性概述

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

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

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

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

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

表 3詳細說明了這一限制。

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

2、自動波特率檢測模式

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

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

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

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

?0x7F:模式2

?0x55:模式3

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

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

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

3、ABR誤差計算

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

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

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

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

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

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

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

其中:

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

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

《軟件自動波特率檢測》

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

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

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

?位時間 = 計算的持續時間 / 8

?波特率 = 1/位時間

然后,根據計算的波特率值進行USARTx_BRR寄存器編程。

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

《軟件和硬件方法設置》

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

PC應用“超級終端”用于向/從STM32F303發送/接收數據幀。因此,測試的是介于600bits/s至115200 bits/s之間的標準波特率。使用另一個STM32F3器件作為發送器測試可以達到的最高波特率值(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系統時鐘。(某些測試使用HSI時鐘作為USART1時鐘源來執行。這是為了檢查HSI不準確性對結果的影響。)

2、硬件自動波特率檢測

USART1被配置為自動檢測波特率。用戶必須在USART1初始化函數中選擇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等待從超級終端接收數據,然后開始自動波特率檢測階段。通過ABRF標志監測此階段的結束。

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

?如果自動波特率檢測操作成功完成,則向超級終端發送確認數據。

/* 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詳細說明了軟件方法。

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;它們的波特率誤差值更低。

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

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

圖 3顯示在通常情況下,當由72 MHz系統時鐘為USART提供時鐘(HSE作為PLL時鐘源)時,結果優于USART時鐘源使用HSI時鐘。這要歸因于HSI的相對不準確性。

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

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

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

圖 5顯示:

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

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

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

《結論》

此應用筆記描述了某些STM32器件內置的硬件自動波特率檢測功能。它還提供了在軟件中實現此功能的技術,作為STM32器件沒有在硬件中實現此功能的解決方案。

盡管示例中的自動波特率檢測均應用在示例的開頭部分,但是可以進行擴展并在每次發送和接收設備檢測到通信錯誤時使用。當主機使用不同波特率進行通信時,這一特性可實現應用的穩健性。

審核編輯 :李倩

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

    關注

    18

    文章

    6140

    瀏覽量

    137132
  • STM32
    +關注

    關注

    2282

    文章

    10986

    瀏覽量

    361095
  • USART
    +關注

    關注

    1

    文章

    198

    瀏覽量

    31484

原文標題:STM32的USART自動波特率檢測

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

收藏 1人收藏
  • jf_606908451

評論

相關推薦

RS232通信的波特率設置說明

RS232通信的波特率設置是確保數據正確傳輸的關鍵參數之一。以下是對RS232通信波特率設置的說明: 一、波特率的概念 波特率是指每秒傳輸的比特數(bps),是衡量數據傳輸速度的重要指
的頭像 發表于 12-10 16:26 ?3061次閱讀

波特率設置中的常見問題解析

在數字通信系統中,波特率是一個關鍵參數,它直接影響數據傳輸的效率和可靠性。然而,在實際應用中,波特率的設置往往會引起一些常見的問題。 一、波特率與數據速率的混淆 問題描述: 許多人會將波特率
的頭像 發表于 11-22 10:06 ?1197次閱讀

波特率與串行通信的關系 各種設備波特率轉換的方法

波特率(Baud Rate)是串行通信中的一個重要參數,它指的是信號傳輸的速率,即單位時間內傳輸的符號(或信號狀態)的數量。在串行通信中,波特率決定了數據傳輸的速度,因此對于通信效率和設備兼容性
的頭像 發表于 11-22 10:01 ?1234次閱讀

常見的波特率標準和協議

波特率是指在數據通信中,每秒鐘傳輸的符號數(或比特數),是衡量數據通信速度的重要指標。在不同的通信協議和場景中,常見的波特率標準和協議有所不同。以下是一些常見的波特率標準和協議: 一、串口通信
的頭像 發表于 11-22 09:56 ?4621次閱讀

Wi-Fi與藍牙的波特率對比分析

Wi-Fi與藍牙是兩種不同的無線通信技術,它們在波特率(或稱數據傳輸速率)方面存在顯著的差異。以下是對Wi-Fi與藍牙波特率的對比分析: 一、Wi-Fi的波特率 概述 : Wi-Fi(無線局域網
的頭像 發表于 11-22 09:54 ?1297次閱讀

波特率的定義和計算方法 波特率與數據傳輸速度的關系

波特率的定義 波特率(Baud Rate),又稱調制速率或傳符號,是指每秒傳輸的符號數目,單位為波特(Bd)。它是一個數字信號通信中重要的參數,在串行通信協議中經常被用作衡量串行數據
的頭像 發表于 11-22 09:49 ?7255次閱讀

MCU串口自動識別波特率原理分析

現在的單片機資源越來越豐富了,其中我們常用的串口也是內部集成了多個,關鍵功能也越來越強了。 我們有些應用可能會用到串口自動識別波特率,今天就來講講MCU串口自動識別波特率底層的常見的原
的頭像 發表于 10-23 16:12 ?1633次閱讀
MCU串口<b class='flag-5'>自動</b>識別<b class='flag-5'>波特率</b>原理分析

波特率9600和115200的區別

在現代通信技術中,數據傳輸速率是一個關鍵的性能指標。對于串行通信,波特率是衡量數據傳輸速度的基本單位。波特率9600和115200是兩種常見的設置,它們在不同的應用場景中有著各自的優勢和局
的頭像 發表于 10-18 14:56 ?4386次閱讀

波特率與比特有何關系 波特率與數據傳輸速率的關系

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

uart波特率和傳輸頻率的關系 UART串口的常用波特率為多少

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

串口通信中的波特率你真的了解嗎?差距竟如此重要!

波特率在串口通信中的作用在串口通信中,波特率起著至關重要的作用。因為在傳輸數據時,發送方和接收方需要以相同的波特率進行通信。如果兩端的波特率不同,那么就會出現數據丟失、傳輸錯誤等問題,
的頭像 發表于 08-27 11:46 ?2321次閱讀
串口通信中的<b class='flag-5'>波特率</b>你真的了解嗎?差距竟如此重要!

如何更改波特率

我正在嘗試使用與此文檔相關的命令更改波特率:https://github.com/Arduinolibrary/DFRob ... _v0.23.pdf 這是固件版本:00200.9.4 當我
發表于 07-16 06:10

485自動收發電路的波特率是多少

485自動收發電路的波特率并不是一個固定的值,而是可以根據具體的應用需求和電路設計進行調整的。在實際應用中,波特率的設置會受到多種因素的影響,包括傳輸距離、信號衰減、噪音環境、設備性能以及通信協議
的頭像 發表于 07-13 09:41 ?4046次閱讀

如何使用示波器測量串口波特率

在通信和電子測量領域,串口波特率是一個至關重要的參數,它決定了數據在串行通信線上的傳輸速率。使用示波器來測量串口波特率是一種常見且有效的方法,尤其是在沒有專業串口調試工具或需要更精確測量時。本文將
的頭像 發表于 05-27 16:25 ?6453次閱讀

芯海應用筆記:通用 MCU USART 自動波特率檢測

本文檔介紹和說明芯海科技旗下 CS32 系列 MCU 的自動波特率檢測功能,并為不具備硬件自動波特率檢測的 MCU 產品提供替代軟件方法 。*附件:應用筆記:芯海通用MCU
發表于 05-16 11:42
主站蜘蛛池模板: 国内卡一卡二卡三免费网站 | 国产亚洲精品视频在线网 | 翘臀少妇被扒开屁股日出水爆乳 | 99精品国产福利在线观看 | 超碰97超碰在线视频哦 | 国产精品一区二区三区免费 | 亚洲国产日韩欧美在线a乱码 | 狠狠色噜噜狠狠狠狠米奇777 | 99久久精品国产免费 | 精品一区二区三区AV天堂 | 无码一区国产欧美在线资源 | 嫩小幼处在线 | 亲胸摸下面激烈免费网站 | 国产在线观看黄 | 国产三级在线精品男人的天堂 | 成人免费视频在线看 | 恋夜影院支持安卓视频美女 | 黄色三级视频在线观看 | 国精产品砖一区二区三区糖心 | 午夜dj影院视频观看 | 果冻传媒免费观看 | 国产午夜免费不卡精品理论片 | 青青视频 在线 在线播放 | 善良的小峓子2在钱中文版女主角 | 中文在线中文资源 | 午夜一区二区三区 | 国产毛片AV久久久久精品 | 欧美日韩无套内射另类 | 国产在线观看网址你懂得 | 香蕉97超级碰碰碰碰碰久 | 亚洲嫩草AV永久无码精品无码 | 国产亚洲精品久久久久久国 | 亚洲精品久久无码AV片银杏 | 色噜噜噜噜亚洲第一 | 免费伦理片网站 | 久久免费国产视频 | 538在线视频一区二区视视频 | 亚洲日本欧美产综合在线 | 亚洲欧美中文字幕网站大全 | 亚洲精品国产自在在线观看 | 国产精品一国产精品免费 |

電子發燒友

中國電子工程師最喜歡的網站

  • 2931785位工程師會員交流學習
  • 獲取您個性化的科技前沿技術信息
  • 參加活動獲取豐厚的禮品