與STM32的發送中斷相關的標誌位有USART_IT_TXE
和USART_IT_TC
。
根據ST芯片手冊的信息可知,USART在發送移位寄存器(Transmit Shift Register)前面,還有一個TDR(Transmit data register)寄存器。芯片手冊注圖如下:
芯片手冊對TXE的描述如下,向DR寄存器寫入數據即可清除TXE標誌位。
TXE標誌位由硬件置位,產生TXEIE中斷標誌位,如果開啓了TXE中斷,則會產生一次中斷。
TXE置位,意味着TDR的數據移位到DR寄存器,並已啓動發送;TDR寄存器已爲空,可以發送下一字節數據到TDR寄存器,並且不會覆蓋之前DR寄存器的內容。
當傳輸在進行時,寫入DR寄存器的內容被保存到TDR寄存器,等待當前傳輸完成時,再將TDR寄存器的內容拷貝到DR寄存器,然後執行發送;
當傳輸未進行時,寫入DR寄存器的內容被直接寫入到DR移位寄存器,啓動數據傳輸,並立即置TXE位;
每傳輸完一字節內容,如果TEX位爲1,則TC位爲1。並且會產生一箇中斷,如果設置了USART_CR1寄存器的TCIE位。
TC位清除軟件順序:
1.讀USART_SR寄存器;
2.寫USART_DR寄存器。
總結
USART_IT_TXE
是在TDR寄存器爲空時產生的中斷標誌位;USART_IT_TC
是在DR寄存器發送完最後一個位時產生的中斷標誌位。