记录-使用STM32F1串口的空闲中断

 STM32的空闲中断,看到网上的介绍说,数据流间隔超过一字节时间没接收到数据就会产生一个空闲总中断,这样我们就可以应用与一帧数据流的判断,这样就可以无需缓存解析处理串口数据,前提是命令接收间有间隔,否则很容易出现解析命令不完整

void USART2_IRQHandler(void)
{
    static u8 buf[100]={0};
    static u8 bufLen  = 0;
    if(USART2->SR&(1<<5))
    {
        //缓存接收的数据
        if(bufLen>=sizeof(buf))bufLen = 0;
        buf[bufLen++] = USART_ReceiveData(USART2);

        //使能串口的空闲中断
        USART_ITConfig(USART2,USART_IT_IDLE,ENABLE);
    }
    //空闲中断(一帧数据)
    if(USART_GetITStatus(USART2,USART_IT_IDLE) != RESET)
    {
        USART_ITConfig(USART2,USART_IT_IDLE,DISABLE);
        //处理帧数据
        for(u8 i=0;i<bufLen;i++)
        {
            que_Write(&Rx2_que,buf[i]);
        }
        bufLen = 0;
    }
}

可以不关空闲中断也可以,清除空闲中断方法

 

    //空闲中断(一帧数据)
    if(USART_GetITStatus(USART2,USART_IT_IDLE) != RESET)
    {
        //        USART_ITConfig(USART2,USART_IT_IDLE,DISABLE);
        u16 temp = USART2->SR;
            temp = USART2->DR;
        //处理帧数据
        for(u8 i=0;i<bufLen;i++)
        {
            que_Write(&Rx2_que,buf[i]);
        }
        bufLen = 0;
    }

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值