请教stm32f4怎么判断定时器中断结束

2019-07-20 23:53发布

怎么判断定时器定时中断结束?求高手!
思路是两个定时器产生两个任意定时时间的中断,要求是当一个定时器定时结束时,马上启动另一个定时器,也就是两个定时器轮流工作。
程序如下:

void TIM2_Int_Init(void)
{
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);  

   TIM_TimeBaseInitStructure.TIM_Period = 849;  
   TIM_TimeBaseInitStructure.TIM_Prescaler=49;  //此值会在主程序中更改
   TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
   TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;

   TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);//初始化TIM3

   TIM_ClearFlag(TIM2, TIM_FLAG_Update);
   TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);

   NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;
   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;
   NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03;
   NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
   NVIC_Init(&NVIC_InitStructure);
}

TIM3定时器设置和TIM2一样。

void TIM2_IRQHandler(void)
{
    if(TIM_GetITStatus(TIM2,TIM_IT_Update)==SET) //溢出中断
   {
      TIM2_EN = true;
      TIM_Cmd(TIM2, DISABLE);
   }
  TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
}

void TIM3_IRQHandler(void)
{
    if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中断
   {
      TIM3_EN = true;
     TIM_Cmd(TIM3, DISABLE);
   }
  TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
}

在主程序中
TIM_Cmd(TIM2, ENABLE);
while(TIM2_EN)TIM_Cmd(TIM3, ENABLE),TIM2_EN = false,TIM2->ARR=xx;
while(TIM3_EN)TIM_Cmd(TIM2, ENABLE),TIM3_EN = false,TIM3->ARR=xx;

可是不成功!好象定时器没启动。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。