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
}
}
上一篇:STM32F103中USART2的使用
下一篇:LPC17xx Uart0,Uart1,Uart2,Uart3的區別
推薦閱讀
史海拾趣