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