cancel
Showing results for 
Search instead for 
Did you mean: 

STM32F205 timer fires up an interrupt early

georg2
Associate
Posted on November 20, 2015 at 04:24

I use TIM2. I configure device using this code

int main()

{

  ...

  

      TIM2->CR1 = 0;

      TIM2->EGR = 0;

      TIM2->PSC = 59;

      TIM2->ARR = 4999;

      TIM2->DIER |= TIM_DIER_UIE;

      TIM2->SR = 0;   

            

      NVIC_SetPriority(TIM2_IRQn,5);</span>

      NVIC_EnableIRQ(TIM2_IRQn);</span>

     GPIOD->BSRR = GPIO_BSRR_BS15;

      TIM2->CR1 |= TIM_CR1_CEN;

  while(1);

  

  return 0;

}

extern ''C'' void TIM2_IRQHandler()

{

  if((TIM2->SR & TIM_SR_UIF) > 0)

  {

    TIM2->SR &= ~TIM_SR_UIF;

    GPIOD->BSRR = GPIO_BSRR_BR15;

  }

}

APB1 timers speed is 60MHz.

(TIM2->CR1 |= TIM_CR1_CEN;) starts the timer

Expecting: the interrupt is fired up after 4999 tics  at first time and then every 4999 tics.

Actual: the interrupt is fired up after 200 tics  at first time and then every 4999 tics.

I set a breakpoint on TIM2_IRQHandler. The TIM2 struct is:

TIM2->CR = 0x0001

TIM2->DIER = 0x0001;

TIM2->ARR = 4999

TIM2->PSC = 59

TIM2->CNT = 0x00C8

TIM2->SR = 0x

0000001

F

Whats the reason of this behavior?

Thank you.

#stm32 #interrupt #timer
0 REPLIES 0