打印
[AT32F407]

调试USART,中断中清除中断标志的疑问

[复制链接]
7065|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sunismyself|  楼主 | 2021-8-24 17:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
例程中,中断内的代码如下:
void USART3_IRQHandler(void)
{
  if(USART_GetITStatus(USART3, USART_INT_RDNE) != RESET)
  {
    /* Read one byte from the receive data register */
    RxBuffer2[RxCounter2++] = USART_ReceiveData(USART3);

    if(RxCounter2 == NbrOfDataToRead1)
    {
      /* Disable the USART3 Receive interrupt */
      USART_INTConfig(USART3, USART_INT_RDNE, DISABLE);
    }
  }
  
  if(USART_GetITStatus(USART3, USART_INT_TDE) != RESET)
  {   
    /* Write one byte to the transmit data register */
    USART_SendData(USART3, TxBuffer2[TxCounter2++]);

    if(TxCounter2 == NbrOfDataToTransfer2)
    {
      /* Disable the USART3 Transmit interrupt */
      USART_INTConfig(USART3, USART_INT_TDE, DISABLE);
    }
  }
}
难道不需要用USART_ClearFlag(USART3,USART_FLAG_RDNE),来清除中断标志吗?我尝试了清除中断标志,结果在中断内就出不来了
问题2:
调试USART2过程中,在串口中断内设置了断点,断点后全速运行,发现程序死在了中断内,一直在扫描中断,重新发了数据,才从中断中跳了出来。。。好奇怪呀

使用特权

评论回复
沙发
sunismyself|  楼主 | 2021-8-24 18:01 | 只看该作者
这个现象在非调试状态下,好像是没有的。。。

使用特权

评论回复
板凳
sunismyself|  楼主 | 2021-8-24 18:14 | 只看该作者
看寄存器,读数据寄存器,清除该位。我观察寄存器,这个现象又不复现了。。。

使用特权

评论回复
地板
muyichuan2012| | 2021-8-24 20:53 | 只看该作者
本帖最后由 muyichuan2012 于 2021-8-25 09:20 编辑

不是读data就可以清rdne标志位

使用特权

评论回复
5
LoveDDD| | 2021-8-25 14:10 | 只看该作者
执行读操作时,中断标志就清了

使用特权

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

本版积分规则

个人签名:追求简单的纯粹,放下、放下。

17

主题

113

帖子

2

粉丝