文章预览
上一篇文章是关于串口接收Overrun的问题,今天接着说串口,这次讨论的是串口发送函数写法的问题。串口发送可以通过轮询、中断或者DMA方式,这里我们讨论轮询发送方式。 串口发送有两个关键的标志位:Transmit Data Register Empty Flag和Transmit Complete Flag,各家MCU寄存器名字可能略有不同,但是其实都是一个含义。比如ST MCU叫TXE和TC NXP MCU叫TDRE和TC 复旦微MCU叫TXBE和TXSE TXE/TDRE/TXBE为1表示发送数据寄存器为空,数据已经发送到了移位寄存器里,这时就可以发送数据寄存器里写数据了。 TC/TXSE为1表示发送数据寄存器为空,移位寄存器数据也为空,整个发送过程都完成了。 网络上有很多关于这个话题的讨论,其中有一篇文章还专门针对以下5种串口发送函数的写法做了分析和好坏讨论 写法1:先判断TXE,再写数据 写法2:先判断TC,再写数据 写法3:先写数据,后判
………………………………