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)是返回最近接收的数据 如果没有新的数据接收 怎么样清除原来接收的数据
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我现在在做串口发送指令 然后通过判断接收到的指令来调用其他函数
---------------------------------
我现在在做串口发送指令 然后通过判断接收到的指令来调用其他函数
而这些判断语句存在主函数的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接收缓冲区数据进行清空处理吗 这样每次判断后进入调用函数后对接收缓冲区清空 等待新的数据接收再进行判断
---------------------------------
数据是会覆盖的,你可以开辟一个缓存区,就是一个数组来试试
用数组在中断方式下可以实现,但是我想可不可以直接清除接收缓冲区的数据。
一周热门 更多>