void USART2_IRQHandler(void)
{
uchar tmp;
//接收中断
if(USART_GetITStatus(USART2,USART_IT_RXNE)==SET) // 接收 中断
{
USART_ClearITPendingBit(USART2,USART_IT_RXNE); // U1RX_Clear_Intr_Status_Bit;
tmp=USART_ReceiveData(USART2);
}
//USART_IT_TXE // 发送中断
if( USART_GetITStatus(USART2, USART_IT_TXE) == SET ) //一个是TXE=发送数据寄存器空,
{
if(TIndex2 < TCount2)
{
USART_SendData(USART2, TxBuf2[TIndex2++]);
}
else if(TIndex2 == TCount2)
{
USART_SendData(USART2, 0x0D);
TIndex2 ++;
}
else
{ // 因为是 发送寄存器空 的中断,所以发完字符串后必须关掉,
// 否则只要空了,就会进中断 //送數據寄存器空標志位
//fTransmission_Complete=1;
USART_ITConfig(USART2, USART_IT_TXE, DISABLE);
//DIS_485TX(); 为避免提前关闭,导致的发送不全.移至 外部Timer中控制.
}
}
//溢出-如果发生溢出需要先读SR,再读DR寄存器 则可清除不断入中断的问题
if(USART_GetFlagStatus(USART2,USART_FLAG_ORE)==SET)
{
USART_ClearFlag(USART2,USART_FLAG_ORE); // 读SR
USART_ReceiveData(USART2); // 读DR
}
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』