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条回答
正点原子
1楼-- · 2019-08-17 10:29
 精彩回答 2  元偷偷看……
iamyj2007
2楼-- · 2019-08-17 10:29

我现在在做串口发送指令 然后通过判断接收到的指令来调用其他函数 

iamyj2007
3楼-- · 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接收缓冲区数据进行清空处理吗 这样每次判断后进入调用函数后对接收缓冲区清空 等待新的数据接收再进行判断
gongkansb
4楼-- · 2019-08-17 15:09
回复【4楼】iamyj2007:
---------------------------------
数据是会覆盖的,你可以开辟一个缓存区,就是一个数组来试试 
iamyj2007
5楼-- · 2019-08-17 20:02
我知道可以覆盖, 但是我采用查询方式接收的。 在新数据来之前一直判断是上次接收的数据, 所以一直循环。 我想判断后执行一次清空接收缓冲区跳出循环。
用数组在中断方式下可以实现,但是我想可不可以直接清除接收缓冲区的数据。
Sya_inn
6楼-- · 2019-08-17 22:55
 精彩回答 2  元偷偷看……

一周热门 更多>