u16 USART2_RX_STA=0;
void USART2_IRQHandler(void)
{
u8 res;
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)//接收到數據
{
res =USART_ReceiveData(USART2);
if((USART2_RX_STA&(1<<15))==0)//接收完的一批數據,還沒有被處理,則不再接收其他數據
{
if(USART2_RX_STA<USART2_MAX_RECV_LEN) //還可以接收數據
{
TIM_SetCounter(TIM4,0);//計數器清空 //計數器清空
if(USART2_RX_STA==0) //使能定時器4的中斷
{
TIM_Cmd(TIM4,ENABLE);//使能定時器4
}
USART2_RX_BUF[USART2_RX_STA++]=res; //記錄接收到的值
}else
{
USART2_RX_STA|=1<<15; //強制標記接收完成
}
}
}
}
|