附程序如下
void USART2_IRQHandler(void){
u8 res;
if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET ) //接收數據寄存器非空中斷
{
res =USART_ReceiveData (USART2);//將進入串口2的哪一個數據取出
if((USART2_RX_STA&0X8000)==0) //表明 要么串口2還沒有收到數據 或者 收到數據已經后被調用過
{
if(USART2_RX_STA<USART2_REC_LEN) //判斷緩存器是不是已經存滿了
{
TIM_SetCounter(TIM3 ,0);//設置TIMx計數器寄存器值 清零定時器 避免其計時到達 進入定時器中斷
if(USART2_RX_STA==0)//判斷緩存器中是否已經存入數據
TIM_Cmd (TIM3,ENABLE );//給定時器3 一個新的狀態 使能它
USART2_RX_BUF[USART2_RX_STA++]=res;
}
else
{
USART2_RX_STA|=0X8000; //給接收完成標志位置1
}
}
}
}
如果串口正常接收了兩次數據 ,但是第一次數據的長度比第二次收到的長,那么USART2_RX_BUF里面會有第一個數據的殘留值嗎?
|