extern u8 RxBuf[20],Rxcount,Txcount;
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
{
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
RxBuf[Rxcount++]=USART_ReceiveData(USART1);
}
if(USART_GetITStatus(USART1,USART_IT_TC)!=SET)
{
if(Txcount<Rxcount)
{
USART_SendData(USART1, RxBuf[Txcount++]);
}
else
{
USART_ClearITPendingBit(USART1,USART_IT_TC);
USART_ITConfig(USART1,USART_IT_TC,DISABLE);
memset(RxBuf,0,Rxcount);
Rxcount=Txcount=0;
}
}
}
void TIM2_IRQHandler(void)
{
if(Rxcount>7)
{
USART_ITConfig(USART1,USART_IT_TC,ENABLE);
}
}
每次收到8个以上字符,则启动发送中断,把收到的数据发送回去,我是用的时USART_IT_TC,但是这个只能进入一次发送中断
之后就不能再进入发送中断了,但是如果换成USART_IT_TXE则可以每次都进入发送中断,这是为什么??? |