Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > STM32 Таймер. Обратный отсчет


Автор: supercelt 10.5.2021, 15:16
Добрый день! Подскажите пожалуйста, что не так в коде? Надо настроить таймер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;
    }
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)