stm32程序有关问题:单片机回发PC数据,关于TC和TXE标志

stm32程序问题:单片机回发PC数据,关于TC和TXE标志
本帖最后由 u010176717 于 2014-08-19 20:12:52 编辑

程序是使用中断方式接收PC数据,然后回发,
A和B采用TC和TXE标志判断。
A程序发送的数据长度超多一定程度(比如20),发送几次单片机就停了,不知怎么回事。
B程序无任何问题
使用串口调试助手,发送间隔20ms
程序A:
void USART1_IRQHandler(void)
{
uint8_t ch;
if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)

   ch = USART_ReceiveData(USART1);
    while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
USART_SendData(USART1,  ch);

}   
}

程序B:
void USART1_IRQHandler(void)
{
uint8_t ch;
if(USART_GetITStatus(USART1, USART_IT_RXNE) == SET)

   ch = USART_ReceiveData(USART1);
    while (USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
USART_SendData(USART1,  ch);

}   
}


stm32程序有关问题:单片机回发PC数据,关于TC和TXE标志
------解决思路----------------------
Tc 的用法有问题。这个是传输结束标志,也就是说如果当时没有数据正在传输,程序就死在那儿傻傻地等下去了
Txe 是传送缓冲区空标志,只要没有数据可送就会置位,所以没问题
------解决思路----------------------
引用:
Quote: 引用:

Tc 的用法有问题。这个是传输结束标志,也就是说如果当时没有数据正在传输,程序就死在那儿傻傻地等下去了
Txe 是传送缓冲区空标志,只要没有数据可送就会置位,所以没问题

没有数据传输时 TC=1, 程序里RESET代表0,所以循环不会执行的

因为Tc只在传输结束时置位,所以当Tc=0而当时又没有数据正在传输中时,永远不会有Tc=1出现,所以程序就死那儿了