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"); } } }







Zitieren

Lesezeichen