STM32F103定时器IRQ处理程序永远不会执行

时间:2015-05-21 20:32:11

标签: timer embedded interrupt stm32 interrupt-handling

我正在尝试设置一个每1ms执行一次的计时器,以便估计函数的执行时间。我在帖子的末尾附上了代码。我非常确定定时器的配置,因为我对工作演示只进行了很少的修改(iNemo_AHRS_continous演示,甚至prvFindFactors的函数都是通过这样的演示获得的)。 不幸的是,在这种情况下,我的ISR永远不会执行,任何想法的原因?感谢

void iNemoProfilerConfig(void)
{
  unsigned short a;
  unsigned short b;
  unsigned long n;
  /* This value is the frequency interrupts in Hz */
  unsigned short frequency = 1000;
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  NVIC_InitTypeDef NVIC_InitStructure;

  /* Enable timer clocks */
  RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM4, ENABLE );

  TIM_ClearITPendingBit(TIM4, TIM_IT_Update);

  TIM_TimeBaseStructInit( &TIM_TimeBaseStructure );

  /* Time base configuration for timer 2 - which generates the interrupts. */
  n = SystemCoreClock/frequency;

  prvFindFactors( n, &a, &b );
  TIM_TimeBaseStructure.TIM_Period = b - 1;
  TIM_TimeBaseStructure.TIM_Prescaler = a - 1;
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseInit( TIM4, &TIM_TimeBaseStructure );
  TIM_ARRPreloadConfig( TIM4, ENABLE );

  NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 13;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init( &NVIC_InitStructure );

}

    void Enable_Timer4(FunctionalState command) {
    TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
    TIM_ITConfig( TIM4, TIM_IT_Update, command );
}

    void TIM4_IRQHandler(void)
{
    USART1_Printf("INTERRUPT = %i \r\n", counter);
  if(TIM_GetITStatus(TIM4, TIM_IT_Update))
  {
    //xTim2Raised=SET;
    counter++;
    /* Clear the IRQ bit */
    TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
  }
}
//main chunk
    int main(void)
{

  SystemInit();
  /* At this stage the microcontroller clock setting is already configured,
  this is done through SystemInit() function which is called from startup
  file (startup_stm32f10x_xx.s) before to branch to application main.
  To reconfigure the default setting of SystemInit() function, refer to
  system_stm32f10x.c file
  */
  USART1_Init();



  for(uint32_t i=0; i<0xFFFFF;i++);


  iNemoTimerConfig();
  iNemoProfilerConfig();
  iNEMO_AHRS_Start();

  LSM_Start();
  L3G_Start();

  /* Wait some seconds in order to ensure the user opens the VCOM terminal */
  for(uint32_t i=0;i<0x1FFFFFF;i++);

  Enable_Timer(ENABLE);
  Enable_Timer4(ENABLE);
   while(1)
  {
      counter = 0;
      iNEMO_AHRS_Attitude();
      USART1_Printf("counter = %i \r\n", counter);

0 个答案:

没有答案