1、 使能串口發送TE,此時USART_DR為空,此時應查詢TXE是否置1,TXE置1,TX腳先發送一個空閑幀,把F1幀寫入USART_DR,TXE被清零。因為這時正在發送空閑幀,所以寫入USART_DR的數據被放入TDR寄存器,還沒有拷貝到移位寄存器。
2、 在空閑幀發送完后,TDR寄存器中的數據被拷貝到移位寄存器,此時應查詢TXE是否置1,TXE置1,表示TDR已空,可以放入下一個數據。此時在TX腳上將會發送F1幀的數據,同時把F2幀的數據寫入USART_DR,TXE被清零。
3、 在F1幀的停止位發送完后,因為TDR寄存器中的F2還沒被拷入移位寄存器,所以此時TXE仍為0,TC不置1.此時應查詢TXE是否置1,TXE置1,表示TDR已空,可以放入下一個數據。此時在TX腳上將會發送F2幀的數據,同時把F3幀的數據寫入USART_DR,TXE被清零。
4、 在F2幀的停止位發送完后,因為TDR寄存器中的F3還沒被拷入移位寄存器,所以此時TXE仍為0,TC不置1.此時應查詢TXE是否置1,TXE置1,表示TDR已空,后面沒有數據寫入USART_DR,TXE保持高電平,此時在TX腳上將會發送F3幀的數據。
5、 在F3幀的停止位發送完后,因為此時TXE為1,所以TC標志會置1.如果TCIE為1,將會產生中斷。
串口發送注意幾點:
1、 如果正在發送數據,寫數據進USART_DR將會把數據寫到TDR緩沖寄存器,在本次發送完成后,再把TDR中的數據拷貝進移位寄存器。
2、 如果當前沒有發送數據,寫數據進USART_DR將會把數據直接放到移位寄存器,不經過TDR,TXE被清零,然后發送開始,TXE被硬件置1。
3、 只有當一幀數據的停止位發送完成并且TXE為1,TC才會被置1