发送缓冲器空闲标志(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