No se ingresa ISR para el temporizador 4 en stm32f4

2

He codificado para el temporizador 4 en un tablero de descubrimiento STM32f407vg. Pero mientras se depura el control no se ingresa al ISR. Por favor, busque el código a continuación y ayuda:

void InitializeTimer()
{

    TIM_TimeBaseInitTypeDef timerInitStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);

    timerInitStructure.TIM_Prescaler = 0;

    timerInitStructure.TIM_CounterMode = TIM_CounterMode_Up;

    timerInitStructure.TIM_Period = 255;

    timerInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    timerInitStructure.TIM_RepetitionCounter = 0;

    /*Initialise timer 4 */
    TIM_TimeBaseInit(TIM4, &timerInitStructure);
    TIM_Cmd(TIM4, ENABLE); 



}


void EnableTimerInterrupt()
{

    NVIC_InitTypeDef nvicStructure;
    nvicStructure.NVIC_IRQChannel = TIM4_IRQn;
    nvicStructure.NVIC_IRQChannelPreemptionPriority = 0;
    nvicStructure.NVIC_IRQChannelSubPriority = 1;
    nvicStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&nvicStructure);
}

void TIM4_IRQHandler(void)
{


if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
    {


        TIM_ClearITPendingBit(TIM4, TIM_IT_Update);

    }

}

Con esta configuración no puedo ingresar un ISR.

    
pregunta user3600996

1 respuesta

2

No solo tiene que configurar el modo de temporizador, el intervalo, etc., y habilitarlo, sino que también tiene que decirle al temporizador sobre qué eventos debe generarse la interrupción. Puedes hacer esto con una función:

void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);

Esto obviamente se debe a que el temporizador puede generar una señal de interrupción por muchas razones diferentes, no solo cuando, por ejemplo, se desborda.

    
respondido por el Adam Czapski

Lea otras preguntas en las etiquetas