打印

关于串口中断函数内可以在接收中断时,清除上一次接收的数据

[复制链接]
261|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
里面还是会有点BUG存在,只是确保功能正常。当i>=数组长度时的数据处理还没写好。有空再处理一下!
void USART1_IRQHandler(void)
{
        u8 Res;
        static u8 i=0;
        static u8 flag=0;               
                if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
                {
                        if(flag==1)                                                                                                                                                                                //下一次接收时能清楚上一次的BUF
                        {
                                memset(USART_RX_BUF,0,USART_REC_LEN);
                                flag=0;
                        }
                        if(flag==0)
                        {
                                Res=USART_ReceiveData(USART1);        //读取接收到的数据
                                if(i<USART_REC_LEN)
                                {
                                        USART_RX_BUF=Res;
                                        i++;
                                }
                                else
                                {
                                        printf("接收溢出,请重新输入");
                                }
                        }
                                                
                }
                else if(USART_GetITStatus(USART1,USART_IT_IDLE ) != RESET)//空闲中断,判断接收什么时候结束使其可以按时接收第二帧数据
                {
                        USART1->ICR |= 1<<4; // 清除中断
                        i=0;
                        flag=1;
                }
        USART_ClearFlag(USART1,USART_FLAG_TC);        
               
}

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

437

主题

437

帖子

0

粉丝