初级会员

- 积分
- 63
- 金钱
- 63
- 注册时间
- 2014-1-17
- 在线时间
- 0 小时
|
第一种方法是判断TXE位
void Txd_Byte(u8 data)
{
USART_SendData(USART1, data); //A
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); //B
}
第二种方法是判断TC位
void Txd_Byte(u8 data)
{
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET); //A
USART_SendData(USART1, data); //B
}
按手册,TXE位是当TDR寄存器中的数据被硬件转移到移位寄存器的时候,该位被硬件置位;
TC位是当包含有数据的一帧发送完成后,并且TXE=1时,由硬件将该位置’1’。
这么说在发送单个字节时,TXE是这个字节从DR寄存器移到移位寄存器后置位;TC是这个字节从DR寄存器移到移位寄存器并且从移位寄存器发送出去后置位。这样理解对不?
那这样,是不是第一种方法在发送大量数据时会快些(先不理DMA)?那怎么看很多程序都是用方法2呢?出于什么考虑呢? |
|
|