sappppp 发表于 2016-3-28 11:02:58

請問程式如果有兩個中斷如何執行呢?

想要請教,我的程式裡面有兩個中斷void USART1_IRQHandler(void)做讀取PC輸入數據值 和 void TIM1_UP_IRQHandler(void)做PWM輸出。
可是我發現我的中斷一直進入USART1_IRQHandler卻不會進入TIM1_UP_IRQHandler。可是如果我將讀取PC輸入數據值放再TIM1_UP_IRQHandler中,數據會錯誤。
所以想要請教,兩個中斷我要怎麼編程,使這兩個中斷都可以執行呢?
謝謝

无薪税绵 发表于 2018-3-1 12:41:18

void USART1_IRQHandler(void)                        //串口1中断服务程序
{
u8 Res;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)//接收中断
{
      //必须要清中断标志位
      USART_ClearFlag(USART1,USART_FLAG_RXNE);        
      USART_ClearITPendingBit(USART1, USART_IT_RXNE);

   //读取接收到的数据
      Res =USART_ReceiveData(USART1);//(USART1->DR);
   }
}

//如果没有进入中断,就要查看:定时配置是否正常,是否开启了中断
void TIM1_UP_IRQHandler(void)
{
   if ( TIM_GetITStatus(TIM1 , TIM_IT_Update) != RESET )
   {
         //必须清除中断标志位否则一直中断
         TIM_ClearITPendingBit(TIM1 , TIM_FLAG_Update);
    }

}

maxtch 发表于 2018-3-1 13:08:53

每个中断都要快进快出,及时清除中断标志位。

bargagebaobei 发表于 2018-3-1 15:58:39

我怀疑楼主的串口是不是一直都在传送数据或者在串口中断里边一直有函数在运行,建议你对中断处理函数瘦身,还有就是调整一下定时器和串口的中断等级,看看这样会不会有所改善
页: [1]
查看完整版本: 請問程式如果有兩個中斷如何執行呢?