有关串口通信USART_TC寄存器的一个问题

2019-07-20 01:59发布

int main(void)
{
u8 len;
u8 i;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
led_init();
    key_init();
exti_init();
    delay_init(168);
    while(1)
{
  if(USART_RX_STA&0x8000)
  {
   len=USART_RX_STA&0x3fff;
   for(i=0;i<len;i++)
   {
    USART_SendData(USART1,USART_RX_BUF);
       while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
   }
   USART_RX_STA=0;
  }
}
}
这是原子哥提供的例程代码,while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);TC寄存器不是发送完成标志吗?在这个地方我接收了一串字符,在for循环里向电脑发送这串字符,如果没有发送完的话,不就在这个while里死循环了??

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
shichuang
1楼-- · 2019-07-20 07:44
 精彩回答 2  元偷偷看……
shichuang
2楼-- · 2019-07-20 10:00
这个while语句是在等待发送完成,当进行到while语句的时候可能还没有发送完,但是这个时候单片机仍然还在执行发送指令,当执行完发送的时候,发送标志就会置高,也就会退出while循环了!
plue
3楼-- · 2019-07-20 11:38
就是这样的啊,等待全部发送完在退出while,没发送完就卡在while一直发就好
RED哞儿
4楼-- · 2019-07-20 12:47
 精彩回答 2  元偷偷看……
RED哞儿
5楼-- · 2019-07-20 12:52
plue 发表于 2019-5-12 11:35
就是这样的啊,等待全部发送完在退出while,没发送完就卡在while一直发就好

可是这只是一个状态寄存器啊,它一直卡死在while这,怎么一位一位的继续发送啊??
plue
6楼-- · 2019-07-20 18:39
 精彩回答 2  元偷偷看……

一周热门 更多>