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

[复制链接]
 楼主| 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标志位
LoveDDD 发表于 2021-8-25 14:10 | 显示全部楼层
执行读操作时,中断标志就清了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

17

主题

113

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部