stm32 串口接收缓冲区数据清除

2019-08-17 07:35发布

void USART2_IRQHandler(void) 



    if(USART_GetFlagStatus(USART2,USART_IT_RXNE)==SET) 
    {               
        RX2 = USART_ReceiveData(USART2); 
        USART_SendData(USART1,RX2);         USART_ClearFlag(USART2,USART_FLAG_RXNE);         while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET) ;              
    }

    if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) 
    { 
        /* 清接收中断标志*/ 
        USART_ClearITPendingBit(USART2, USART_IT_RXNE);
    }

}

  USART_ReceiveData(USART2)是返回最近接收的数据   如果没有新的数据接收  怎么样清除原来接收的数据 

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
13条回答
iamyj2007
2019-08-17 12:06
回复【2楼】正点原子:
---------------------------------
我现在在做串口发送指令 然后通过判断接收到的指令来调用其他函数 

而这些判断语句存在主函数的while中 如果不对接收缓冲区数据进行清除处理 那么就一直调用某一函数 
while(1)
{
              if(USART_ReceiveData(USART2)==0x30)               
                  {
 GPIO_SetBits(GPIOB,GPIO_Pin_0);
 GPIO_ResetBits(GPIOB,GPIO_Pin_1);
 GPIO_SetBits(GPIOC,GPIO_Pin_8);
 GPIO_ResetBits(GPIOC,GPIO_Pin_9);

 } 
 else if(USART_ReceiveData(USART2)==0x31)
                            {    
                          GPIO_SetBits(GPIOB,GPIO_Pin_5);
 GPIO_ResetBits(GPIOB,GPIO_Pin_6);
 GPIO_SetBits(GPIOC,GPIO_Pin_10);    
 GPIO_ResetBits(GPIOC,GPIO_Pin_11);

 }
 else if(USART_ReceiveData(USART2)==0x32)
                {
  GPIO_SetBits(GPIOB,GPIO_Pin_7);
 GPIO_ResetBits(GPIOB,GPIO_Pin_8);
 GPIO_SetBits(GPIOC,GPIO_Pin_12);
 GPIO_ResetBits(GPIOC,GPIO_Pin_13);

   
 }
}
可以对USART2接收缓冲区数据进行清空处理吗 这样每次判断后进入调用函数后对接收缓冲区清空 等待新的数据接收再进行判断

一周热门 更多>