为什么定时器中断要清除而串口不必?

2019-08-20 15:50发布

光盘资料中的串口实验和定时器实验中,为什么定时器的中断函数中有清除中断标志位,而串口的中断函数中没有啊?
而且我自己写程序的时候如果不把定时器中断清除他好像会一直产生中断。

这是串口接收中断函数代码

void USART1_IRQHandler(void)
{
        u8 res;
         if(USART_GetITStatus(USART1,USART_IT_RXNE))
{
     res= USART_ReceiveData(USART1);
     USART_SendData(USART1,res);   
  }
}

这是定时器向上计数中断函数代码

void TIM3_IRQHandler(void)   //TIM3中断
{
        if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //检查TIM3更新中断发生与否
                {
                TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx更新中断标志
                LED1=!LED1;
                }
}

新人求指教~!

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
likunxue
1楼-- · 2019-08-20 17:04
因为串口当你读取  USARTx->DR 中的值后,会自动清除串口接收中断标志,
这个说明书上有介绍,
不过我还是建意加上清除中断标志;      
止天
2楼-- · 2019-08-20 22:27
 精彩回答 2  元偷偷看……
烟酒不沾
3楼-- · 2019-08-20 22:31
串口在中断函数中通过读 USART_DR 可以将RXNE(读数据寄存器非空) 清零!
三叶草
4楼-- · 2019-08-20 23:46
最好清除,以防发生不可预料的错误
xkwy
5楼-- · 2019-08-21 02:57
x.png
wjxh950210
6楼-- · 2019-08-21 08:16
明白了,谢谢大家!

一周热门 更多>