Hallo Sisor

Erstmal vielen Dank.

Mir ist die Bedeutung in deiner Codezeile zwar noch nicht ganz klar, aber ich habs einfach mal kopiert und der Kompiler meckert nicht.

So richtig will es aber immer noch nicht. Hier mal der komplette Code. Muß ich mit dem NVIC noch irgendwas machen?
Und woher weiß der Kompiler, daß Timer-Interrupts in TIM2_IRQHandler abgearbeitet werden sollen? So richtig ist mir das
auch nicht klar. Ich hab das aus einem Beispiel, finde in der STM32F4xx aber nichts dazu. (Leider auch nichts ähnliches).

Mir reicht für den ersten Test eine Ansage vom Debugger in der ISR.

Code:
void TIM2_IRQHandler(void){
  printf("TIM2 Interrupt\n");
}

void configLed(){
  RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;      //Taktversorgung Port A
  GPIOA->MODER |= (GPIO_MODER_MODER5_0);    //A5 => Ausgang
  GPIOA->OTYPER &= ~(GPIO_OTYPER_OT_5);     //A5 0> Push-Pull
  GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPDR5);     //A5 ohne Pullup-Pulldown
}

void configButton(){
  RCC->AHB1ENR |= RCC_AHB1ENR_GPIOCEN;      //Taktversorgung Port C
  GPIOC->MODER |= GPIO_MODER_MODER0_0;      //C13 => Eingang
  GPIOC->PUPDR |= GPIO_PUPDR_PUPDR13_1;     //C13 => Pulldown einschalten
}

void configTakt(){
  RCC->CFGR |= RCC_CFGR_PPRE1_DIV16;        //Takt für APB1 auf 1MHz runterteilen
}

void configTimer2(){
  RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;       //Takt für Tim2 freigeben
  TIM2->PSC = 10000;                        //Prescaler 10.000
  TIM2->CR1 |= TIM_CR1_CEN;                 //Timer aktivierent

  TIM2->DIER |= TIM_DIER_TIE;                //Trigger Interrupt enable
  NVIC->ISER[TIM2_IRQn / 32] = 1 <<(TIM2_IRQn % 32);
  printf("Timer2 Konfi beendet\n");
}

void configNVIC(){
}

void main(void){
  configTakt();
  configTimer2();
  configLed();
  configButton();
  printf("Einstellung fertig\n");
  
  while(1){ //Halteschleife da da Debug-Fenster sonst mit Knopf-gedrückt-Meldungen geflutet wird
  }

  while(1){
    if(!(GPIOC->IDR & GPIO_IDR_IDR_13)){
      GPIOA->BSRR |= GPIO_BSRR_BS_5;            //Ausgang A5 setzen
      printf("Knopf gedrückt\n");
    }
    else{
      GPIOA->BSRR |= (GPIO_BSRR_BR_5);          //Ausgang A5 zurücksetzen
      printf("Knopf nicht gedrückt\n");
    }
  }
}