STM32 串口通信中 USART_FLAG_TC 与 USART_FLAG_TXE 区别

本文转载于https://zhidao.baidu.com/question/369250768675559284.html?qbl=relate_question_2&word=usart%20tc%20txe

首先了解STM32串口发送数据的简单过程,如下图所示。

发送:软件将数据写到USARTx->DR里面,硬件自动把USARTx->DR里面的数据并行转移到“发送移位寄存器”,然后硬件自动将发送移位寄存器中的数据通过TX引脚串行发送出去。

接收:RX上有数据过来,则先将数据一位一位的放到“接收移位寄存器”里面,收满一个字节后,硬件自动将“接收移位寄存器”里面的数据并行转移到USARTx->DR里面。

while (!(USART1->SR & USART_FLAG_TC));这句是等待数据完完全全从“发送移位寄存器”中发送出去,while (!(USART1->SR & USART_FLAG_TXE));这句是等待数据从USARTx->DR转移到“发送移位寄存器”中。在后一句的写法中,并不需等待数据完全发送,只需要USARTx->DR里面的数据已经被转移走,就可以马上进行再次写入USARTx->DR操作,这样是不是就可以节省很多时间了?

STM32 串口通信中 USART_FLAG_TC 与 USART_FLAG_TXE 区别