附程序如下
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里面会有第一个数据的残留值吗?
|