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

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

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

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

串口通訊實(shí)際的波特率測(cè)量

汽車(chē)玩家 ? 來(lái)源:嵌入式大雜燴 ? 作者:嵌入式大雜燴 ? 2020-04-04 17:27 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

平時(shí)使用串口打印出現(xiàn)亂碼的絕大部分原因是串口波特率沒(méi)對(duì)。那么我們?cè)趺礈y(cè)量實(shí)際的波特率呢?在這之前,順便一起回顧一下波特率的概念。

什么是波特率、比特率?

比特率(Bitrate)表示每秒鐘傳輸?shù)亩M(jìn)制位數(shù),單位為比特每秒(bit/s)。

波特率(Baudrate)表示每秒鐘傳送的碼元符號(hào)的個(gè)數(shù),是衡量數(shù)據(jù)傳送速率的指標(biāo)。

碼元是通訊信號(hào)調(diào)制的概念,通訊中常用時(shí)間間隔相同的符號(hào)來(lái)表示一個(gè)二進(jìn)制數(shù)字,這樣的信號(hào)稱(chēng)為碼元。

常見(jiàn)的通訊傳輸中,用 0V 表示數(shù)字 0, 5V 表示數(shù)字 1,那么一個(gè)碼元可以表示兩種狀態(tài) 0 和 1,所以一個(gè)碼元等于一個(gè)二進(jìn)制比特位,此時(shí)波特率的大小與比特率一致。

如果在通訊傳輸中,有 0V、2V、 4V 以及 6V 分別表示二進(jìn)制數(shù) 00、 01、 10、 11,那么每個(gè)碼元可以表示四種狀態(tài),即兩個(gè)二進(jìn)制比特位,所以碼元數(shù)是二進(jìn)制比特位數(shù)的一半,這個(gè)時(shí)候的波特率為比特率的一半。因?yàn)楹芏喑R?jiàn)的通訊(比如串口通訊)中一個(gè)碼元都是表示兩種狀態(tài),所以大家常常直接以波特率來(lái)表示比特率 。

串口通訊協(xié)議

在串口通訊的協(xié)議層中,規(guī)定了數(shù)據(jù)包的內(nèi)容,它由啟始位、主體數(shù)據(jù)、校驗(yàn)位以及停止位組成,通訊雙方的數(shù)據(jù)包格式要約定一致才能正常收發(fā)數(shù)據(jù),其數(shù)據(jù)幀組成如下:

串口通訊實(shí)際的波特率測(cè)量

下面我們來(lái)實(shí)際驗(yàn)證一下其數(shù)據(jù)幀是不是真的是這樣的。編寫(xiě)如下代碼:

串口通訊實(shí)際的波特率測(cè)量

代碼很簡(jiǎn)單,就是使用串口不斷地往外發(fā)數(shù)據(jù)0xAA(當(dāng)然發(fā)送其它數(shù)據(jù)也是可以的) 。我們的串口配置如下:

串口通訊實(shí)際的波特率測(cè)量

我們可以使用示波器或者邏輯分析儀抓取實(shí)際信號(hào)看看數(shù)據(jù)是不是符合上面的幀格式。這里,我們使用邏輯分析儀抓取USART1的發(fā)送信號(hào)線(xiàn)(TX):

串口通訊實(shí)際的波特率測(cè)量

從實(shí)際結(jié)果中我們可以看到的確是按幀格式來(lái)發(fā)的。這里可能會(huì)有人有疑問(wèn),上面那個(gè)數(shù)據(jù)幀的圖片中有個(gè)空閑狀態(tài),這個(gè)又是什么呢?空閑、空閑,當(dāng)然是沒(méi)有在發(fā)數(shù)據(jù)時(shí)候的狀態(tài)呀,我們把我們的代碼改為:

串口通訊實(shí)際的波特率測(cè)量

在初始化完成之后只發(fā)送一次0xAA,邏輯分析儀抓到的數(shù)據(jù)為:

串口通訊實(shí)際的波特率測(cè)量

可見(jiàn),空閑狀態(tài)是個(gè)高電平。在上一個(gè)的范例中,我們一直在while循環(huán)中發(fā)送數(shù)據(jù)0xAA,所以就沒(méi)有空閑狀態(tài)。

在這個(gè)實(shí)驗(yàn)中我們需要知道的是兩個(gè)點(diǎn)是:

串口發(fā)送數(shù)據(jù)是低位先發(fā)的。我們單片機(jī)發(fā)0xAA(10101010B),所以邏輯分析儀抓到的有效數(shù)據(jù)是01010101B。

單片機(jī)的串口使用的是TTL電平,為正邏輯電平信號(hào)。邏輯分析儀抓到的數(shù)據(jù)0對(duì)應(yīng)著實(shí)際電壓0~0.5V,數(shù)據(jù)1對(duì)應(yīng)著實(shí)際電壓2.4V-5V,

經(jīng)常與TTL電平標(biāo)準(zhǔn)做對(duì)比的是RS-232電平標(biāo)準(zhǔn),如:

串口通訊實(shí)際的波特率測(cè)量

常見(jiàn)的電子電路中常使用 TTL 的電平標(biāo)準(zhǔn),理想狀態(tài)下,使用 5V 表示二進(jìn)制邏輯 1,使用 0V 表示邏輯 0;而為了增加串口通訊的遠(yuǎn)距離傳輸及抗干擾能力,RS-232電平標(biāo)準(zhǔn)使用-15V 表示邏輯 1, +15V 表示邏輯 0。

在舊式的臺(tái)式計(jì)算機(jī)中一般會(huì)有 RS-232 標(biāo)準(zhǔn)的 COM 口(也稱(chēng) DB9 接口) :

在這個(gè)示例程序中,我們?cè)O(shè)置的串口波特率為115200bps。在串口通訊中,碼元只用1個(gè)二進(jìn)制數(shù)來(lái)表示(即只有0 和 1兩種狀態(tài)),所以波特率與比特率在數(shù)值上是相等的。而比特率表示的是每秒鐘傳輸?shù)亩M(jìn)制位數(shù),那我們知道傳一位數(shù)據(jù)的時(shí)間豈不是就可以反推出波特率是多少了嗎?從邏輯分析儀中,我們可以知道發(fā)送一位數(shù)據(jù)的時(shí)間如下:

串口通訊實(shí)際的波特率測(cè)量

發(fā)送一位數(shù)據(jù)的時(shí)間大約為8.667us,所以1秒鐘發(fā)送多少位數(shù)據(jù)是可以算出來(lái)的:

算出來(lái)的波特率為115380bps,與115200bps很相近。最終肯定是有一定的誤差,這個(gè)誤差產(chǎn)生的原因包括邏輯分析儀的質(zhì)量及我們的測(cè)量環(huán)境等等因素。但是這個(gè)誤差也是在允許的范圍內(nèi)的,可以看看串口助手接收到的數(shù)據(jù)是不是正確的:

串口通訊實(shí)際的波特率測(cè)量

可見(jiàn),數(shù)據(jù)接收正確,也就是波特率對(duì)的上了。

串口波特率對(duì)不上怎么解決?

在實(shí)際中。我們可能會(huì)遇到這樣的情況,代碼里配置的波特率與串口助手上設(shè)置的波特率一樣了,但還是出現(xiàn)異常。

異常情況如我們往串口助手發(fā)送字符串,串口助手上本該顯示的字符串出現(xiàn)了亂碼?;蛘呶覀兺谥职l(fā)送一個(gè)數(shù)據(jù),發(fā)現(xiàn)數(shù)據(jù)移位了。

出這種情況大多是波特率對(duì)應(yīng)不上,我們就得自己檢查我們的底層文件了,代碼中的某個(gè)與波特率計(jì)算相關(guān)的值(時(shí)鐘)與實(shí)際不匹配了,就會(huì)出現(xiàn)這樣的現(xiàn)象,比如之前我的一位同事就遇到這樣的情況就是這個(gè)原因?qū)е碌摹?/p>

我們用STM32的時(shí)候,一般都是使用外部晶振,比如STM32F103系列,可輸入的外部晶振的范圍是4~16MHz:

串口通訊實(shí)際的波特率測(cè)量

經(jīng)驗(yàn)值往往是8MHz,而且一般的demo工程底層代碼里默認(rèn)的也是設(shè)置為8MHz,比如:

串口通訊實(shí)際的波特率測(cè)量

但是,如果實(shí)際晶振貼的不是8MHz的話(huà),就出問(wèn)題了(比如串口波特率就不正確了)。追根溯源,串口波特率是配進(jìn)USART_Init函數(shù)中的,打開(kāi)這個(gè)函數(shù):

串口通訊實(shí)際的波特率測(cè)量

計(jì)算串口波特率需要一個(gè)apbclock變量,而這個(gè)值得來(lái)源從RCC_GetClocksFreq函數(shù)來(lái),再打開(kāi)這個(gè)函數(shù):

串口通訊實(shí)際的波特率測(cè)量

所以要注意的是,HSE_VALUE這個(gè)值要與實(shí)際做對(duì)應(yīng)。

遇到這種問(wèn)題找誰(shuí)說(shuō)理去。。經(jīng)驗(yàn)就是不斷采坑不斷積累的一個(gè)過(guò)程,早點(diǎn)遇到坑可能也是一件好事。像類(lèi)似底層的問(wèn)題很少遇到,但是一旦遇到那就得比較棘手的問(wèn)題了,需要很有耐心地去查找。

能用穩(wěn)定的芯片是一件很幸福的事情,用不穩(wěn)定、不成熟的芯片的時(shí)候,那個(gè)才是真的難啊,真讓人懷疑人生啊。。。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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)注

    15

    文章

    1605

    瀏覽量

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

    關(guān)注

    2

    文章

    319

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    UART波特率計(jì)算及UART收發(fā)回顯實(shí)驗(yàn)

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

    ATClient配合USART_V2使用時(shí),無(wú)法開(kāi)at_client_init后修改串口波特率是怎么回事?

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

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

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

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

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

    請(qǐng)問(wèn)如何使用低功耗 UART (LP UART) 波特率補(bǔ)償?

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

    波特率是什么

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

    可編程電源的通信波特率應(yīng)如何設(shè)置?

    1000次查詢(xún)命令,統(tǒng)計(jì)錯(cuò)誤響應(yīng)次數(shù)。 閾值:誤碼率應(yīng)<0.1%,若超標(biāo)需降低波特率或檢查通信線(xiàn)路。 實(shí)時(shí)性測(cè)試 測(cè)量響應(yīng)時(shí)間:發(fā)送控制命令(如VOLT 5設(shè)置電壓為5V),用示波器或
    發(fā)表于 07-07 15:01

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

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

    第十四章 USART——串口通訊

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

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

    我用CubeMX配置的串口+GPDMA接收,115200波特率正常能用, 然后如果波特率設(shè)置錯(cuò)誤為9600,再改回來(lái)115200,接收就不能用了,調(diào)試好像時(shí)DMA出錯(cuò)了,然后啟用HAL_UARTEx_ReceiveToIdle_
    發(fā)表于 03-07 07:59

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

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

    CAN總線(xiàn)十萬(wàn)個(gè)為什么 | CAN自定義波特率有什么用?

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

    AN-891: ADuC703x系列LIN波特率計(jì)算

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

    請(qǐng)問(wèn)MSC1210串口UART1如何設(shè)置波特率?

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

    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 ?6325次閱讀