STM32 USART傳送標誌 TXE TC

2021-07-29 20:43:27 字數 1973 閱讀 7636

在usart的傳送端有2個暫存器,乙個是程式可以看到的usart_dr暫存器,另乙個是程式看不到的移位暫存器,對應usart資料傳送有兩個標誌,

乙個是txe=傳送資料暫存器空,另乙個是tc=傳送結束。

當usart_dr中的資料傳送到移位暫存器後,txe被設定,此時移位暫存器開始向tx訊號線按位傳輸資料,但因為tdr已經變空,程式可以把下乙個要傳送的位元組(操作usart_dr)寫入tdr中,而不必等到移位暫存器中所有位傳送結束,所有位傳送結束時(送出停止位後)硬體會設定tc標誌。

另一方面,在剛剛初始化好usart還沒有傳送任何資料時,也會有txe標誌,因為這時傳送資料暫存器是空的。txeie和tcie的意義很簡單,txeie允許在txe標誌為』1』時產生中斷,而tcie允許在tc標誌為』1』時產生中斷。

至於什麼時候使用哪個標誌,需要根據你的需要自己決定。但我認為txe允許程式有更充裕的時間填寫tdr暫存器,保證傳送的資料流不間斷。tc可以讓程式知道傳送結束的確切時間,有利於程式控制外部資料流的時序。

txe–寫暫存器dr清零

rxne–讀暫存器dr清零,也可軟體手動清零

tc–  讀/寫暫存器dr清零,也可軟體手動清零

先說tc。即transmission complete。傳送乙個位元組後才進入中斷,這裡稱為「傳送後中斷」。和原來8051的ti方式一樣,都是傳送後才進中斷,需要在傳送函式中先傳送乙個位元組觸發中斷。傳送函式如下

/*******

功能:中斷方式傳送字串.採用判斷tc的方式.即 判斷 傳送後中斷 位.

輸入:字串的首位址

輸出:無

*******/

void usart_senddatastring( u8 *pdata )

中斷處理函式如下

/********

* function name  : usart1_irqhandler

* description    : this function handles usart1 global interrupt request.

* input          : none

* output         : none

* return         : none

*********/

void usart1_irqhandler(void)

}其中u8 *pdatabyte;是乙個外部指標變數

在中斷處理程式中,傳送完該字串後,不用關閉tc的中斷使能tcie,只需要清掉標誌位tc;這樣就能避免tc == set 導致反覆進入中斷了。

void usart_config()

再說判斷txe。即tx dr empty,傳送暫存器空。當使能txeie後,只要tx dr空了,就會產生中斷。所以,傳送完字串後必須關掉,否則會導致重複進入中斷。這也是和tc不同之處。

傳送函式如下:

/*******

功能:中斷方式傳送字串.採用判斷tc的方式.即 判斷 傳送後中斷 位.

輸入:字串的首位址

輸出:無

*******/

void usart_senddatastring( u8 *pdata )

中斷處理函式如下:

/********

* function name  : usart1_irqhandler

* description    : this function handles usart1 global interrupt request.

* input          : none

* output         : none

* return         : none

********/

void usart1_irqhandler(void)

}在串列埠初始化函式中就不用開啟txe的中斷了(是在傳送函式中開啟的)

stm32 USART使用標誌

在usart的傳送端有2個暫存器,乙個是程式可以看到的usart dr暫存器,另乙個是程式看不到的移位暫存器,對應usart資料傳送有兩個標誌,乙個是txe 傳送資料暫存器空,另乙個是tc 傳送結束 當usart dr中的資料傳送到移位暫存器後,txe被設定,此時移位暫存器開始向tx訊號線按位傳輸資...

STM32USART串列埠通訊

問題描述 利用usart串列埠程式,實現pc與stm32通訊,計算機傳送資料,stm32接受後,再傳送給pc端 1.gpio埠配置 根據手冊 pa.9為tx 傳送 pa.10為rx 接受 因此 pa.9為復用推挽輸出,pa.10為浮空輸入,一行 搞定 void gpio config 2.配置usa...

stm32 USART 串列埠通訊

簡單區分同步和非同步就是看通訊時需不需要對外提供時鐘輸出 usart 有專門控制傳送的傳送器 控制接收的接收器,還有喚醒單元 中斷控制等等。使用 usart 之前需要向 usart cr1 暫存器的 ue 位置 1 使能 usart,ue 位用來開啟供給給串列埠的時鐘。傳送或者接收資料字長可選 8 ...