萬變不離其宗之UART要點總結

2022-09-16 02:15:11 字數 1558 閱讀 4988

首先這玩意兒分兩種:

線上空閒、無資料狀態為常高電平,故邏輯低定義為起始位。

停止位:

波特率:bit rate 就是位/秒的概念,就是1秒傳多少位的概念。常見的波特率有哪些呢?

這裡須注意的要點:

兩邊分別代表兩個通訊的裝置,單從uart程式設計的角度講收發不需要物理同步握手,想發就發。圖中箭頭代表資料資訊流向。rx表示接收資料,tx表示傳送資料。資料總是從傳送端傳遞到接收端,這就是為啥rx連線tx,tx連rx的原因。

同步簡單說,收發不可自如,不可以想發就發,收發需要利用硬體io口進行握手,rts/cts就是用於同步的握手訊號:

這個對於普通應用而言並不常見,這裡不做詳細展開,需要用到的時候只需要對應收發時控制握手訊號即可。

對於不同的微控制器,其硬體體系各異,暫存器也差異很大,但是從收發程式設計策略角度而言,常見有下面三種方式:

這裡以偽**方式描述一下:

/*查詢傳送位元組*/

void uart_send_byte( uint8 ch )

/*傳送乙個緩衝區*/

void uart_send_buffer( uint8 *pbuf,uint8 size )

中斷接收需要考慮的幾個要點:

#define frame_size  (128u)

static uint8 tx_buffer[frame_size];

static uint8 tx_index = 0;

static uint8 tx_length = 0;

static uint8 rx_buffer[frame_size];

static uint8 rx_index = 0;

static bool rx_frame_done = false;

void prepare_frame( uint8 * pbuf, uint8 size )

bool uart_start_sending( uint8 * pbuf, uint8 size )

void uart_tx_isr( void )

{ if( tx_index還需要考慮的是,對於uart硬體層面的出錯處置,以stm32為例,就可能有下面的錯誤可能發生:

另外不同的微控制器其底層硬體實現差異也不較大,比如有的硬體傳送緩衝是單位元組的緩衝,有的則具有fifo,這些在選型程式設計時都需要綜合考慮。

dma傳送模式而言,大致分這樣幾步:

dma接收模式而言,大致分這樣幾步:

程式優化總結 萬變不離其宗

程式優化總結 萬變不離其宗 空間優化,時間優化.目前我們就在pc上,所以主要目標是時間優化.第一步 演算法結構層面的優化.搞懂演算法,從巨集觀層面優化結構,能在乙個層面做的事情,盡量合併一起做 第二步 c語言層面的優化.從函式,語言層面優化程式 1.減少記憶體訪問 2.合併運算 3.空間換時間 4....

程式優化總結 萬變不離其宗

空間優化,時間優化.目前我們就在pc上,所以主要目標是時間優化.第一步 演算法結構層面的優化.搞懂演算法,從巨集觀層面優化結構,能在乙個層面做的事情,盡量合併一起做 第二步 c語言層面的優化.從函式,語言層面優化程式 1.減少記憶體訪問 2.合併運算 3.空間換時間 4.迴圈合併 展開等處理 5.查...

李開復 演算法的力量 萬變不離其宗

程式語言雖然該學,但是學習計算機演算法和理論更重要,因為計算機演算法和理論更重要,因為計算機語言和開發平台日新月異,但萬變不離其宗的是那些演算法和理論,例如資料結構 演算法 編譯原理 計算機體系結構 關係型資料庫原理等等 演算法是電腦科學領域最重要的基石之一,但卻受到了國內一些程式設計師的冷落。許多...