Добрый день! Подскажите пожалуйста, что не так в коде? Надо настроить таймер2 МК stm32f405. Обратный отсчёт. начать с 20 сек и когда будет 0 - выкинуть в прерывание. У меня прерывание срабатывает сразу же после включения платы.
Код | RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; TIM2->CR1 &= ~TIM_CR1_CEN; TIM2->CR1 |= TIM_CR1_DIR; TIM2->EGR |= TIM_EGR_UG; TIM2->PSC |= (uint16_t)(APB1_FREQUENCY/2000)-1; //Задаём частоту таймера = 2000 Hz. (84000000/2000) - 1; (за 1 сек таймер тикает 2000 раз, т.е. с частотой 2 KHz; 84000000 - максимальна частота шины APB1) TIM2->ARR = 0; TIM2->DIER |= TIM_DIER_UIE; TIM2->CNT = 2000*20; NVIC_EnableIRQ(TIM2_IRQn); __NOP(); __NOP(); TIM2->SR &= ~(TIM_SR_UIF); TIM2->CR1 |= TIM_CR1_CEN;
void TIM2_IRQHandler(void){ if(TIM2->SR & TIM_SR_UIF){ TIM2->SR &= ~TIM_SR_UIF; second_counter++; interrupt_flag = 1; } }
|
|