打印
[应用相关]

关于串口中断!个人理解与网络搜索的信息

[复制链接]
691|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
goodluck09876|  楼主 | 2019-7-20 09:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近看到有关串口中断引发的问题,个人把自己一直使用的串口解析上传一下:

    if (USART_GetFlagStatus(QX5_USARTx, USART_FLAG_PE) != RESET)
    {
        USART_ReceiveData(QX5_USARTx);
        USART_ClearFlag(QX5_USARTx, USART_FLAG_PE);
    }

    if (USART_GetFlagStatus(QX5_USARTx, USART_FLAG_ORE) != RESET)
    {
        USART_ReceiveData(QX5_USARTx);
        USART_ClearFlag(QX5_USARTx, USART_FLAG_ORE);
    }

    if (USART_GetFlagStatus(QX5_USARTx, USART_FLAG_FE) != RESET)
    {
        USART_ReceiveData(QX5_USARTx);
        USART_ClearFlag(QX5_USARTx, USART_FLAG_FE);
    }
       
    if(USART_GetITStatus(QX5_USARTx,USART_IT_RXNE)!=RESET)
    {

        //数据缓冲转换
        if(UART2_Flag.Buf_Now==Buf_A) //现在用的是Buf_A,则使用Buf_B
        {
            UART2_Flag.USER_USART_RX_Buf_A[UART2_Flag.Num_Rx] = USART_ReceiveData(QX5_USARTx);
            UART2_Flag.Num_Rx++;
        }
        else    //现在用的是Buf_B,则使用Buf_A
        {
            UART2_Flag.USER_USART_RX_Buf_B[UART2_Flag.Num_Rx] = USART_ReceiveData(QX5_USARTx);
            UART2_Flag.Num_Rx++;
        }
    }

    if(USART_GetITStatus(QX5_USARTx,USART_IT_IDLE)!=RESET)
    {

        Uart_stateus = QX5_USARTx->SR;
        Uart_stateus = QX5_USARTx->DR; //清除串口空闲接受中断

        if(UART2_Flag.Buf_Now==Buf_A) //现在用的是Buf_A,则使用Buf_B
        {
            UART2_Flag.Buf_Now=Buf_B;
            /////////////////////////////////////
                        //2019年7月11日;加入;
            memcpy(UART2_Flag.USER_USART_RX_Buf_B, Empty_Flag.Null, 255);
            /////////////////////////////////////
        }
        else
        {
            UART2_Flag.Buf_Now=Buf_A;
            /////////////////////////////////////
                        //2019年7月11日;加入;
            memcpy(UART2_Flag.USER_USART_RX_Buf_A, Empty_Flag.Null, 255);
            /////////////////////////////////////
        }
        UART2_Flag.IDLE_FLAG=SET;
    }
}


使用特权

评论回复
沙发
goodluck09876|  楼主 | 2019-7-20 09:13 | 只看该作者
    if (USART_GetFlagStatus(QX5_USARTx, USART_FLAG_PE) != RESET)
    {
        USART_ReceiveData(QX5_USARTx);
        USART_ClearFlag(QX5_USARTx, USART_FLAG_PE);
    }
这里是增加的第一个中断判断

使用特权

评论回复
板凳
goodluck09876|  楼主 | 2019-7-20 09:14 | 只看该作者

    if (USART_GetFlagStatus(QX5_USARTx, USART_FLAG_ORE) != RESET)
    {
        USART_ReceiveData(QX5_USARTx);
        USART_ClearFlag(QX5_USARTx, USART_FLAG_ORE);
    }

这里是增加的第二个中断判断

使用特权

评论回复
地板
goodluck09876|  楼主 | 2019-7-20 09:14 | 只看该作者
  if (USART_GetFlagStatus(QX5_USARTx, USART_FLAG_FE) != RESET)
    {
        USART_ReceiveData(QX5_USARTx);
        USART_ClearFlag(QX5_USARTx, USART_FLAG_FE);
    }

这里是增加的第三个中断判断

使用特权

评论回复
5
goodluck09876|  楼主 | 2019-7-20 09:37 | 只看该作者
前几天 看大家遇到了这样的情况,串口引发的种种问题。这样处理一下,应该是可以解决。

使用特权

评论回复
6
wakayi| | 2019-8-9 12:13 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
7
wowu| | 2019-8-9 12:48 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
8
xiaoqizi| | 2019-8-9 12:52 | 只看该作者
非常感谢楼主分享

使用特权

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

本版积分规则

220

主题

5843

帖子

21

粉丝