STM32 串口TXE和TC标志位的理解
我们发送数据的时候是先放在数据寄存器(TDR),然后在往移位寄存器里面丢,TXE就是用来判断我们的数据寄存器里面有数据没有,如果为1表示TDR里面的数据全部移到了移位寄存器,并且没有新的数据进来,0就是表示有数据。TC是判断移位寄存器的,但是我们一定要先读SR寄存器,然后再写DR寄存器,也就是移位寄存器,才能让数据一直发送,如果先写入,数据就会丢失。为啥是这样?因为我们的数据寄存器里面有数据时,TXE就会由硬件自动置0,而我们的TC不会,我们要先由软件判断是否有数据,如果有才会置0。
如果TDR寄存器有数据TXE标志位就是0,0&上USART_FLAG就是0,0不等于0,就执行else,bitstatus就被赋值为0,那么我们函数的返回值就是0,我们就可以用if判断函数FlagStatus的返回值,看我们的数据是否发送完毕。
if( USART_GetFlagStatus(USARTx,USART_FLAG_TXE)==0),这样的话我们就可以一直发送数据了。