TXE和TC这两个标志位,是常为1,MCU复位后这两位为1,清零的方法是往DR寄存器写入数据,而置位的方法是等DR里面的数据从TX引脚上全部发出来。
所以STM32在中断的时候,更适合使用环形缓存的方式。通常的单片机在使用环形缓存时,要用两个过程,第一步压入数据,第二步是检查压入环形缓存前环形缓存是否为空并判断是否需要向寄存器发射第一个字节,否则不能保证数据的连贯。
在STM32上使用环形缓存时,可以这么做。
初始化单片机时,使能串口中断,但是TXEIE和TCIE不要使能。
UART_WRITE函数是中断外调用的函数(函数名自定义,也可以是PUTCH),该函数压入环形缓存后,再使能TXEIE或者TCIE中任意一个,则会自动进入中断函数。
中断函数中的TXE标准和TC标准(一定要和TXEIE和TCIE一起相“与”),只判断环形缓存的入口和出口(检测缓存中有没有数据),如果环形缓存中有数据,则取一个字节出来并写入DR,如果环形缓存空了,则在TXE中断或者TC中断里面关闭TXEIE或者TCIE。