sunismyself 发表于 2021-8-24 17:53

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

例程中,中断内的代码如下:
void USART3_IRQHandler(void)
{
if(USART_GetITStatus(USART3, USART_INT_RDNE) != RESET)
{
    /* Read one byte from the receive data register */
    RxBuffer2 = 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);

    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

执行读操作时,中断标志就清了
页: [1]
查看完整版本: 调试USART,中断中清除中断标志的疑问