一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

波特率是什么?波特率設(shè)計(jì)

冬至子 ? 來(lái)源:兩猿社 ? 作者:IC猿 ? 2023-06-05 15:19 ? 次閱讀

01 波特率是什么

從宏觀理解,波特率表征了串口的 傳輸速度 。

從微觀上,波特率是指在系統(tǒng)中 單位時(shí)間內(nèi)傳輸?shù)拇a元個(gè)數(shù) 。對(duì)于UART而言,碼元是二進(jìn)制的,都是用高低電平傳輸,所以波特率和比特率在數(shù)值上是相等的。例如,當(dāng)波特率為115200時(shí),實(shí)質(zhì)就是UART串口每秒傳輸115200個(gè)bit的數(shù)據(jù)量,傳輸一個(gè)bit的時(shí)間等于1/115200秒。常見(jiàn)的UART串口波特率為300、600、1200、4800、9600、19200、34800等。

串口傳輸中一個(gè)bit數(shù)據(jù)的周期即傳輸一個(gè)bit的時(shí)間,即可以表示為:

1.jpg

在串口傳輸中,一幀數(shù)據(jù)由起始位(1bit)、數(shù)據(jù)位(典型8bit)、校驗(yàn)位(1bit)和停止位(1bit)組成,在通常情況下一幀數(shù)據(jù)有11bit。那么可以算出1幀數(shù)據(jù)傳輸所需的時(shí)間為11x1/bps。

串口通信的雙方需要設(shè)置相同的波特率 ,由波特率約定數(shù)據(jù)傳輸?shù)闹芷凇Q定了應(yīng)該多久讀取一次電平值。

02 模塊接口與描述

1.jpg

  • 26MHz功能時(shí)鐘主要用于波特率的產(chǎn)生與計(jì)算,由外部輸入。
  • 接收波特率使能信號(hào)由接收數(shù)據(jù)模塊中產(chǎn)生,UART_RX線檢測(cè)到起始位后使能接收波特率。
  • 發(fā)送波特率使能信號(hào)由發(fā)送數(shù)據(jù)模塊中產(chǎn)生,需要發(fā)送數(shù)據(jù)時(shí)即可使能。
  • 波特率分頻系數(shù)是配置模塊產(chǎn)生,由APB總線配置。
  • 接收和發(fā)送波特率時(shí)鐘根據(jù)配置由26MHz時(shí)鐘產(chǎn)生的用接收和發(fā)送數(shù)據(jù)的信號(hào)。

03 功能時(shí)鐘與波特率設(shè)計(jì)

本項(xiàng)目使用的功能時(shí)鐘為26MHz,波特率可通過(guò)波特率分頻系數(shù)BAUD_DIV進(jìn)行配置。波特率分頻系數(shù)BAUD_DIV與波特率之間的關(guān)系為:

1.jpg

為了方便計(jì)算和設(shè)計(jì),我們將N固定為16,只配置BAUD_DIV來(lái)調(diào)整波特率,波特率可配置如下:

1.jpg

波特率計(jì)算公式中,分母即為一個(gè)數(shù)據(jù)周期所需要計(jì)26MHz時(shí)鐘的個(gè)數(shù)。已知波特率和功能時(shí)鐘頻率,即可計(jì)算一個(gè)波特率周期所需的功能時(shí)鐘數(shù)。公式中的乘N操作使用左移實(shí)現(xiàn)(默認(rèn)波特率為9600)。

always@(posedge clk26m ornegedge rst26m_) begin
    if(!rst26m_) begin
        cnt_value <= 10'd169 < < 4;
    end
    elsebegin
        cnt_value <= (baud_div + 1'b1) < < 4;
    end
end

在產(chǎn)生接收數(shù)據(jù)的波特率時(shí)鐘時(shí),需要注意,接收模塊是根據(jù)所產(chǎn)生的這個(gè)波特率時(shí)鐘來(lái)進(jìn)行數(shù)據(jù)接收,數(shù)據(jù)采集如果都在“ 每位數(shù)據(jù)的中間 ”,那么采樣出的數(shù)據(jù)是最穩(wěn)定的。

圖片

接收數(shù)據(jù)采樣

所以在產(chǎn)生波特率時(shí)鐘時(shí),RX波特率計(jì)數(shù)器累加到一半時(shí)就應(yīng)使產(chǎn)生接收波特率時(shí)鐘。而發(fā)送數(shù)據(jù)時(shí)則不必這樣,只需保證波特率正確即可。

波特率模塊實(shí)現(xiàn)如下:

`timescale 1ns/1ps
module    UART_BAUD(
   // inputs
    clk26m,
    rst26m_,
    tx_bps_en,
    rx_bps_en,
    baud_div,
    // outputs
    rx_bpsclk,
    tx_bpsclk
);

input            clk26m;             // 26M function clock
input            rst26m_;            // function clk's rst_
input            rx_bps_en;          // baud enable signal
input            tx_bps_en;
input  [9:0]     baud_div;           // baud frequency divide factor
output           rx_bpsclk;          // receive bps clk
output           tx_bpsclk;          // send bps clk

reg  [13:0]     cnt_value;           // bps count value
reg  [13:0]     cnt_baud_rx;         // receive baud counter
reg  [13:0]     cnt_baud_tx;         // send baud counter


// produce receive bpsclk
always@(posedge clk26m ornegedge rst26m_) begin
    if(!rst26m_) begin
        cnt_baud_rx <= 14'd0;
    end
    elsebegin
        if(rx_bps_en) begin
            if(cnt_baud_rx > cnt_value - 1'b1) begin
                cnt_baud_rx <= 14'd0;
            end
            elsebegin
                cnt_baud_rx <= cnt_baud_rx + 1'b1;
            end
        end
        elsebegin
            cnt_baud_rx <= 14'd0;
        end
    end
end
assign  rx_bpsclk = (cnt_baud_rx == (cnt_value >>1))? 1'b1:1'b0;

// produce send bpsclk
always@(posedge clk26m ornegedge rst26m_) begin
    if(!rst26m_) begin
        cnt_baud_tx <= 14'd0;
    end
    elsebegin
        if(tx_bps_en) begin
            if(cnt_baud_tx > cnt_value - 1'b1) begin
                cnt_baud_tx <= 14'd0;
            end
            elsebegin
                cnt_baud_tx <= cnt_baud_tx + 1'b1;
            end
        end
        elsebegin
            cnt_baud_tx <= 14'd0;
        end
    end
end
assign  tx_bpsclk = (cnt_baud_tx == (cnt_value >>1))? 1'b1:1'b0;

always@(posedge clk26m ornegedge rst26m_) begin
    if(!rst26m_) begin
        cnt_value <= 10'd169 < < 4;
    end
    elsebegin
        cnt_value <= (baud_div + 1'b1) < < 4;
    end
end

endmodule

波特率模塊雖然理解和實(shí)現(xiàn)起來(lái)比較簡(jiǎn)單,但也是比較重要的,是接收和發(fā)送數(shù)據(jù)的依據(jù)。

聲明:本文內(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)投訴
  • 接收機(jī)
    +關(guān)注

    關(guān)注

    8

    文章

    1216

    瀏覽量

    54099
  • 計(jì)數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2283

    瀏覽量

    95842
  • 串口通信
    +關(guān)注

    關(guān)注

    34

    文章

    1633

    瀏覽量

    56388
  • 時(shí)鐘域
    +關(guān)注

    關(guān)注

    0

    文章

    52

    瀏覽量

    9700
  • Uart串口
    +關(guān)注

    關(guān)注

    0

    文章

    29

    瀏覽量

    7040
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32單片機(jī)的串口波特率計(jì)算方法

    不管是什么單片機(jī),在使用串口通信的時(shí)候,有一個(gè)非常重要的參數(shù):波特率。什么是波特率波特率就是每秒傳送的字節(jié)數(shù)。雙方在傳輸數(shù)據(jù)的過(guò)程中,波特率一致,這是通訊成功的基本保障。下面以STM
    的頭像 發(fā)表于 01-05 09:59 ?2.9w次閱讀
    STM32單片機(jī)的串口<b class='flag-5'>波特率</b>計(jì)算方法

    UART通信總線的特性與協(xié)議幀

    同步點(diǎn)是通過(guò)兩個(gè)設(shè)備的相同波特率(UART和大多數(shù)串行通信一樣,發(fā)送和接收設(shè)備需要將波特率波特率是指信息傳輸?shù)叫诺赖乃俾剩┰O(shè)置為相同的值。
    發(fā)表于 10-12 10:27 ?1919次閱讀
    UART通信總線的特性與協(xié)議幀

    STM32G4的外部晶振設(shè)置can通信波特率,波特率均不正常無(wú)法通信怎么解決?

    目前使用G4配置CAN,波特率500k,在選擇內(nèi)部晶振為外設(shè)時(shí)鐘時(shí),可以通過(guò)計(jì)算配置500k正常通信,但是使用外部24M晶振時(shí),只有把APB1設(shè)置為16M時(shí)可以正常通信,一旦采用其他頻率時(shí),波特率
    發(fā)表于 04-11 06:23

    #硬聲創(chuàng)作季 #CAN #PLC 總線設(shè)計(jì)的波特率應(yīng)該如何選擇?

    CAN波特率波特率發(fā)生器
    學(xué)習(xí)電子知識(shí)
    發(fā)布于 :2022年11月02日 20:00:29

    單片機(jī)原理及應(yīng)用: 波特率#單片機(jī)

    單片機(jī)波特率波特率發(fā)生器
    學(xué)習(xí)硬聲知識(shí)
    發(fā)布于 :2022年11月06日 15:02:57

    單片機(jī)原理與應(yīng)用: 波特率計(jì)算#單片機(jī)

    單片機(jī)波特率波特率發(fā)生器
    學(xué)習(xí)硬聲知識(shí)
    發(fā)布于 :2022年11月08日 19:07:59

    STM32+CUBE+HAL庫(kù)+CAN+無(wú)法通信

    STM32+CUBE+HAL庫(kù)+CAN+無(wú)法通信問(wèn)題解決要解決這個(gè)問(wèn)題最需要注意的波特率其他的跟著網(wǎng)上其他資料配就好了波特率波特率波特率重要的事情說(shuō)三遍這個(gè)是can的配置注意這個(gè)APB
    發(fā)表于 08-19 07:21

    STC8a8k單片機(jī)串口波特率倍速后發(fā)送和接收就不對(duì)了是為什么?

    STC8a8k單片機(jī)串口波特率的倍速是干什么用的,什么時(shí)候用什么時(shí)候不用,什么作用,為什么我設(shè)置的同樣的波特率波特率倍速后串口發(fā)送和接收的就不對(duì)了,TH和TL都有更改過(guò),而且是從isp助手上復(fù)制的,這是怎么回事,還需要設(shè)置什么
    發(fā)表于 10-27 06:48

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

    波特率(Baud Rate) 單位 bps -- 每秒傳送的字節(jié)數(shù) Byte Per Second.。
    發(fā)表于 08-23 11:54 ?46.3w次閱讀

    一文了解波特率、比特、通信速度的區(qū)別

    在信息傳輸通道中,攜帶數(shù)據(jù)信息的信號(hào)單元叫碼元,每秒鐘通過(guò)信道傳輸?shù)拇a元數(shù)稱為碼元傳輸速率,簡(jiǎn)稱波特率。波特率是傳輸通道頻寬的指標(biāo)。
    的頭像 發(fā)表于 04-06 14:46 ?5928次閱讀

    什么是波特率?為什么要設(shè)置波特率?

    歡迎來(lái)到東用知識(shí)小課堂!一、什么是波特率?波特率(BaudRate)單位bps是用于衡量串口通信速度的單位,它表示每秒鐘發(fā)送的比特?cái)?shù)。如果一個(gè)串口的波特率為9600,就表示該串口在一秒鐘內(nèi)可以發(fā)送
    的頭像 發(fā)表于 04-08 00:00 ?7626次閱讀
    什么是<b class='flag-5'>波特率</b>?為什么要設(shè)置<b class='flag-5'>波特率</b>?

    什么是波特率?波特率是如何影響CAN總線長(zhǎng)度的?

    信息在通信通道中傳輸?shù)乃俾时环Q為波特率。通俗地說(shuō),波特率是數(shù)據(jù)在網(wǎng)絡(luò)上傳輸?shù)乃俣?速率。這是以比特/秒表示的。因此,一秒鐘內(nèi)在通信網(wǎng)絡(luò)上傳輸?shù)谋忍財(cái)?shù)就是波特率。
    的頭像 發(fā)表于 08-14 15:23 ?7353次閱讀
    什么是<b class='flag-5'>波特率</b>?<b class='flag-5'>波特率</b>是如何影響CAN總線長(zhǎng)度的?

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

    在電子設(shè)備的世界中,數(shù)據(jù)是通過(guò)各種方式進(jìn)行傳輸?shù)摹F渲?,串口通信是一種常見(jiàn)的數(shù)據(jù)傳輸方式,它以其簡(jiǎn)單、可靠和廣泛的特性,成為了電子設(shè)備間通信的重要手段。而在串口通信中,有一個(gè)非常重要的參數(shù)——波特率
    的頭像 發(fā)表于 11-03 08:21 ?6369次閱讀
    什么是串口<b class='flag-5'>波特率</b>?串口通信為什么要設(shè)置<b class='flag-5'>波特率</b>?

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

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

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

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