日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

完善資料讓更多小伙伴認(rèn)識你,還能領(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)驗,或者認(rèn)真研究過串口的朋友都應(yīng)該多多少少知道一點自動識別的方法。

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

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

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

2

STM32硬件自動波特率檢測

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

1.ABR應(yīng)用地方

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

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

2.支持ABR系列

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

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

3.自動波特率檢測模式

ABR是指接收設(shè)備通過檢查第一個字符(通常是預(yù)先選擇的標(biāo)志字符)確定傳入數(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)代碼,官方提供有基于(標(biāo)準(zhǔn)外設(shè)庫、HAL庫的)參考例程,比如F0標(biāo)準(zhǔn)外設(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ù)和噪聲,從而用于恢復(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模式。

其中:

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

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

6.誤差

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

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

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

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

    關(guān)注

    2313

    文章

    11195

    瀏覽量

    374754
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1322

    瀏覽量

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

    關(guān)注

    2

    文章

    320

    瀏覽量

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

    關(guān)注

    30

    文章

    4977

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    瑞芯微(EASY EAI)RV1126B 串口波特率修改

    1.波特率介紹1.1波特率的基本概念波特率(BaudRate)是指數(shù)據(jù)通信中,每秒傳輸?shù)拇a元數(shù),單位為波特(Baud),本質(zhì)是衡量數(shù)據(jù)傳輸速率的核心指標(biāo),反映
    的頭像 發(fā)表于 04-28 15:15 ?231次閱讀
    瑞芯微(EASY EAI)RV1126B <b class='flag-5'>串口</b><b class='flag-5'>波特率</b>修改

    儀器設(shè)備波特率地址未知情況如何實現(xiàn)自動識別,并找出實際波特率地址的一種方法。

    假如你接收的項目,是個半拉子項目,其中儀器設(shè)備被上一位老哥調(diào)試了,他也沒給你交代具體的串口配置信息,那么你就可以試一下這個小工具。自動識別儀器設(shè)備的實際波特率和地址。感興趣的哥子可以 關(guān)注公眾號
    發(fā)表于 04-17 10:09

    智能顯示模塊支持哪些波特率?智能顯示模塊怎么設(shè)置波特率?

    智能顯示模塊支持哪些波特率?智能顯示模塊怎么設(shè)置波特率?
    發(fā)表于 03-17 11:26

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

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

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

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

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

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

    波特率是什么

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

    可編程電源的通信波特率應(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 ?3262次閱讀
    基于瑞薩64位MPU RZ/G2L的uboot<b class='flag-5'>串口</b>多<b class='flag-5'>波特率</b>支持介紹
    遂川县| 阳信县| 宁国市| 福海县| 礼泉县| 常宁市| 安顺市| 乾安县| 阿城市| 台州市| 大足县| 凤阳县| 韶关市| 饶平县| 五华县| 农安县| 鄂尔多斯市| 遵义市| 桂平市| 吴江市| 贡觉县| 临桂县| 永新县| 来安县| 清水河县| 泰和县| 阿拉善右旗| 沽源县| 玉门市| 霍山县| 翁牛特旗| 资兴市| 邹城市| 兰溪市| 望江县| 江川县| 板桥市| 湖州市| 任丘市| 连州市| 咸丰县|