No ingresar ISR para el temporizador 4 en stm32f4

He codificado el temporizador 4 en una placa de descubrimiento STM32f407vg. Pero mientras se depura el control no se ingresa al ISR. Encuentre 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 a un ISR.

Se trata de firmware/software, y no de diseño electrónico. Se trata del uso de una placa de desarrollo. No veo cómo se permite sobre el tema... De todos modos, ¿has preguntado esto en los foros de STM?
@KyranF Durante mucho tiempo se ha considerado que la programación integrada en este nivel es el tema aquí. Lo más probable es que la experiencia aquí sea mejor que en otras pilas de programación para tales preguntas, y tal vez se comunique de una manera ligeramente diferente para las especialidades integradas.
@ScottSeidman Realmente siento que necesitamos un intercambio de pila de programación integrada (microprocesador y tamaño de computadora de placa única), para cerrar la brecha entre Stack Overflow y EE.SE
@KyranF: claramente de acuerdo area51.stackexchange.com/proposals/70800/…
@ScottSeidman jaja, guau. Bien entonces. Lo seguiré, gracias por el enlace.
Debe definir NVIC_EnableIRQ (Timer4_IRQn) en su función principal para habilitar la interrupción TIMER4.

Respuestas (1)

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

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

Obviamente, esto 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.