發送緩沖器空閑標志(TXE)
此標志為’1’時表明發送緩沖器為空,可以寫下一個待發送的數據進入緩沖器中。當寫入SPI_DR時, TXE標志被清除。
接收緩沖器非空(RXNE)
此標志為’1’時表明在接收緩沖器中包含有效的接收數據。讀SPI數據寄存器可以清除此標志。
TXE=1發送緩沖器為空,沒有數據可發,就要等待發送緩沖器非空
RXNE=1接受緩沖區非空,沒地址存放數據,就需要等待其為空
原文:https://blog.csdn.net/weixin_42269817/article/details/82690429
STM32串口使用DMA方式接收數據可以減小CPU的開銷。對於接收定長數據,可以將DMA接收緩沖區的長度設定為待接收數據的長度,這樣利用DMA的傳輸完成中斷DMAx_IT_TCy就可以知道已經接收了一幀數據。對於接收不定長數據,如何知道意見完成了數據的接收呢?可以結合串口的空閑中斷來實現。具體做法見http://wenku.baidu.com/link?url=ZGGaGpvy2dbSqoBaoTuXwkFBz0uc_hs3h02ILrIaQOlV_EulFZCssv1NFgFNIBX0K-F43exnBIclpHNltWVpdzDgi0o-AvKJKsi4BpxGOhq
空閑中斷是在檢測到在數據收受后,總線上在一個字節的時間內沒有再接收到數據時發生。即串口的RXNE位被置位之后才開始檢測,檢測到空閑之后,串口的CR1寄存器的IDLE位被硬件置1,必須采用軟件將IDLE位清零才能避免反復進入空閑中斷。具體的做法是先讀取USART_SR,再讀取USART_DR。需要注意的是,不能采用庫函數USART_ClearFlag()或者USART_ClearItPending()來清除IDEL標注,因為這兩個函數接收的中斷標志位僅包括:
USART_FLAG_CTS: CTS Change flag (not available for UART4 and UART5).
USART_FLAG_LBD: LIN Break detection flag.
USART_FLAG_TC: Transmission Complete flag.
USART_FLAG_RXNE: Receive data register not empty flag.
原文:https://blog.csdn.net/lf9335/article/details/55218335
