No se puede saltar a la función de interrupción del temporizador en el descubrimiento STM32F4

0

Hice un código para llamar a la función de interrupción de Timer2 de esta manera:

timerx->TIMx_PSC    =42000;   // prescaler
timerx->TIMx_ARR    =2000;    // counting number
timerx->TIMx_CR1    |=0x90;   // auto reload, count down
timerx->TIMx_DIER   |=0x01;   // enable update interrupt
interruptsx->ISER[0]|= 1<<(TIMER2_INTERRUPT);   // enable timer_interrupt 
TIMER2_INTERRUPT=28   
timerx->TIMx_CR1    |=0x01;   // enable counter  
timerx->TIMx_EGR    =0x01;    // update generation

y

void TIM2_IRQHandler(){
if(timer2->TIMx_SR & 0x1){
gpio_toggle_off(gpio_A,GPIO_Pin_1);
number_display(gpio_D,number0);
}
timer2->TIMx_SR=0x0;
}

El problema es: no salta a TIM2_IRQHandler (). ¿Como puedó resolver esté problema?

    
pregunta ios198

2 respuestas

2

Los siguientes trabajos (es decir, activan interrupciones) en mi tablero de descubrimiento STM32F4 en el entorno Coocox usando GCC:

#include    "stm32f4xx.h"

int main (void) {
SystemInit();
NVIC->ISER[0] |= 0x10000000;
RCC->APB1ENR |= 1;
TIM2->CR1 = 0x0010;
TIM2->ARR = 0x8000;
TIM2->CR2 = 0;
TIM2->SMCR = 0;
TIM2->DIER = 0x0001;
TIM2->CR1 |= 0x0001;
while (1);
}

void TIM2_IRQHandler (void) {
TIM2->SR &= 0xfffe;
}

Estoy bastante seguro de que la razón es que no comienzo el temporizador (establezca el bit 0 de TIM2- > CR1) hasta que después de se configure todo lo demás.

    
respondido por el markt
0

Tuve el mismo problema y la solución fue llamar manualmente HAL_TIM_Base_Start_IT() después de MX_TIM2_Init() . Estoy usando CubeMX y pensé que lo hace automáticamente, pero no lo hace.

    
respondido por el Alaa M.

Lea otras preguntas en las etiquetas