STM32 串列埠 通訊 中斷

2021-09-18 01:36:13 字數 2695 閱讀 5217

一、資料傳送與接收。

(1)、stm32 的傳送與接收是通過資料暫存器usart_dr來實現的,這是乙個雙暫存器,包含了 tdr 和 rdr。

當向該暫存器寫資料的時候,串列埠就會自動傳送;

當收到資料的時候,也是存在該暫存器內。

1)stm32 庫函式操作 usart_dr 暫存器傳送資料的函式是:

void usart_senddata(usart_typedef* usartx, uint16_t data);通過該函式向串列埠暫存器 usart_dr 寫入乙個資料。

2)stm32 庫函式操作 usart_dr 暫存器讀取串列埠接收到的資料的函式是:

uint16_t usart_receivedata(usart_typedef* usartx);通過該函式可以讀取串列埠接受到的資料。

(2)、獲取相應 串列埠狀態,串列埠的狀態可以通過狀態暫存器usart_sr讀取。

1)在我們韌體庫函式裡面,讀取串列埠狀態的函式是:

flagstatususart_getflagstatus(usart_typedef* usartx, uint16_t usart_flag);

這個函式的第二個入口引數非常關鍵,它是標示我們要檢視串列埠的哪種狀態,比如上面講解的rxne(讀資料暫存器非空)以及 tc(傳送完成)。

例如:我們要判斷讀暫存器是否非空(rxne),操作庫函式的方法是:

usart_getflagstatus(usart1, usart_flag_rxne);

我們要判斷傳送是否完成(tc),操作庫函式的方法是:

usart_getflagstatus(usart1, usart_flag_tc);

等等,這些標識號在 mdk 裡面是通過巨集定義定義的。

(3)、獲取相應 中斷狀態(注意區別(2)和(3))

1)當我們使能了某個中斷的時候,當該中斷發生了,就會設定狀態暫存器中的某個標誌位。經常我們在中斷處理函式中,要判斷該中斷是哪種中斷,使用的函式是:

itstatususart_getitstatus(usart_typedef* usartx, uint16_t usart_it)

比如我們使能了串列埠傳送完成中斷,那麼當中斷發生了, 我們便可以在中斷處理函式中呼叫這個函式來判斷到底是否是串列埠傳送完成中斷。

方法是:usart_getitstatus(usart1, usart_it_tc)

返回值是 set,說明是串列埠傳送完成中斷發生。

2)這裡要注意區分的是中斷的不同種類:

有:串列埠中斷 ;

外部中斷

定時器中斷

(4)串列埠配置的一般步驟:

串列埠時鐘 和 gpio時鐘 使能

gpio埠模式的設定

串列埠設定

開啟中斷,初始化nvic

編寫中斷處理函式;

編寫串列埠資料收發函式

注意:對於復用功能的gpio,要先使能gpio時鐘,同時設定gpio模式為 復用功能對應的模式。

二、程式編寫

int main(void)

}

//對串列埠2進行初始化

void uart2_init(u32 bound)

//void usart2_irqhandler(void)函式是串列埠 1 的中斷響應函式,當串列埠 1 發生了相應的中斷後,就會跳到該函式執行。

//串列埠中斷服務程式,這一段是 接收資料服務

void usart2_irqhandler(void)

}} }

//串列埠資料接收程式

void ult_receive()

if(uart2_data[16]==11 && uart2_data[17]==7)

}

補充:串列埠的傳送

這個地方那個之所以把這個寫出來主要是想說傳送中斷和接受中斷其實是共用乙個中斷函式的,到底是那個中斷發生了呢,這就需要我們讀取中斷狀態標誌來識別了。

//傳送資料

//使用函式usart_senddata(usart1, char data),一次只能傳送乙個字元。

1)當然我們可以用如下函式傳送字串。

void usart1_puts(char * str)

}2)當然我們也可以迴圈傳送字串陣列

for(i = 0; txbuf1 != '\0'; i++)

int main(void)

usart_rx_sta=0;

} else

if(times%200==0)

printf("çëêäèëêý¾ý,òô»ø³µ¼ü½áêø\n");

if(times%30==0)

led0=!led0;

delay_ms(10);

} }

}

STM32串列埠通訊中斷接收

串列埠的時序和工作原理就不寫了,主要寫如何應用 串列埠的設定除了gpio外,需要設定的引數有波特率 資料位 停止位,校驗方式 gpio輸出配置af pp復用推挽輸出 gpio出入配置in flaoting浮空輸入 usart的配置為115200的波特率,8位資料長度,1位停止位,無校驗,無硬體流控制...

stm32串列埠通訊

通訊方式 1 同步通訊 帶時鐘同步訊號傳輸 spi,iic等 2 非同步通訊 不帶時鐘用途訊號 usrt,單匯流排 stm32串列埠引腳表 串口號 rxd txd 1 pa10 pa9 2 pa3pa2 3 pb11 pb10 4 pc11 pc10 5 pd2pc12 通訊過程 接收過程 由rx入...

STM32串列埠通訊

1.常用的串列埠相關暫存器 1 usart sr狀態暫存器,對應的庫函式 flagstatus usart getflagstatus usart typedef usartx,uint16 t usart flag 2 usart dr資料暫存器,對應的庫函式 void usart senddat...