波特率程式設計

2021-08-10 10:56:03 字數 1506 閱讀 7676

波特率指資料訊號對載波的調製速率,它用單位時間內載波調製狀態改變次數來表示[1]  。

波特率發生器不是產生波特率時鐘的,波特率時鐘頻率/波特率因子=波特率。

波特率發生器的作用是從輸入時鐘轉換出需要的波特率clk

乙個完整的由verilog實現的波特率發生器:

module baud_gen(

clk_50mhz, rst_p, bclk

);input clk_50mhz; /*輸入的系統時鐘,50mhz*/

input rst_p; /*復位脈衝,高電平有效*/

/* 倍頻值16乘以9600波特率,即9600*16=153600,得到波特率發生器的實際輸出訊號頻率為153.6kbit/s */

output bclk; // 輸出訊號:uart(串列埠)波特率發生器輸出的時鐘脈衝,頻率:153.60kbps

//即每秒1536000個脈衝,*波特率發生器輸出脈衝bclk,注意:除了主頻分頻之外,

//還決定了這個訊號的占空比,在本例中輸出訊號占空比為 1:325

reg bclk; //暫存器資料型別bclk

reg [8:0] cnt; //暫存器資料型別cnt,9位,uart用它來記錄接收到的主頻脈衝個數,

//注意在修改輸出波特率值時,若占空比小於1:511,需要增加該變數所佔位數

//以下語句利用同步計數器完成時鐘分頻,

always @(posedge clk_50mhz) begin /* 每當訊號clk_50mhz發生電平變化執行以下語句 */

if(rst_p) begin /* 如果復位脈衝訊號為高電平執行以下語句 */

cnt <= 0; //對主頻訊號計數器cnt做非阻塞方式復位賦值,賦值為邏輯0 。此後每當時鐘訊號到來就變。

bclk <= 0; /* 暫存器變數bclk賦值為邏輯0,使該脈衝訊號復位為低電平,以低電平作為開始*/

endelse begin

/* 50mhz除以153600(uart實際頻率)等於325.5 即50_000_000 /153600 = 325.5(波特率除數) */

if(cnt > 324) begin /*如果cnt的數值大於324,即cnt計數脈衝數等於325(0-324個脈衝)*/

cnt <= 0; /* 50mhz主頻訊號計數器cnt值,被非阻塞方式復位*/

bclk <= 1; /*串列埠波特率時鐘脈衝訊號bclk賦值為邏輯1,使該脈衝訊號跳變到高電平週期*/

endelse begin

cnt <= cnt + 1; /* 50mhz主頻訊號計數器cnt值被非阻塞方式增量賦值(加1) */

bclk <= 0; //波特率發生器時鐘脈衝訊號bclk被非阻塞方式賦值為』0』,

//使該脈衝訊號跳變到低電平週期*/

endend

endendmodule

50_000_000 /153600 = 325.5  相當於325分頻, 由於串列埠速率較低,其16 倍頻率值也不高,因此在設計中,可以不要求波特率發生器

輸出訊號的占空比為50%。

波特率 位元率和波特率

最近因為專案在複習通訊原理,對於位元率和波特率概念始終區分不是很明確,網上找了很多教程,找到了我認為最好理解的乙個版本。一,位元 bit 與資訊度量衡 度量衡是乙個名詞,通俗簡單的理解就是某個東西的單位,舉個栗子 1,乙個妹子的重量是100kg,那麼kg就是單位,用來描述物體 妹子 的性質 質量 k...

UART和波特率

什麼是 uart uart是一種通用序列資料匯流排,用於非同步通訊。該匯流排雙向通訊,可以實現全雙工傳輸和接收。在嵌入式設計中,uart用來與pc進行通訊,包括與監控偵錯程式和其它器件,如eeprom通訊。uart通訊 uart首先將接收到的並行資料轉換成序列資料來傳輸。訊息幀從乙個低位起始位開始,...

UART和波特率

什麼是 uart uart是一種通用序列資料匯流排,用於非同步通訊。該匯流排雙向通訊,可以實現全雙工傳輸和接收。在嵌入式設計中,uart用來與pc進行通訊,包括與監控偵錯程式和其它器件,如eeprom通訊。uart通訊 uart首先將接收到的並行資料轉換成序列資料來傳輸。訊息幀從乙個低位起始位開始,...