Wenn du mit den Registern ein Interrupt-Betrieb für Timer2 konfigurierst, wird die Funktion mit dem Namen TIM2_IRQHANDLER 'automatisch' aufgerufen. Also einfach eine Funktion so definieren:
Ausschnitte aus nem alten Projekt von mir mit nem STM32F107:Code:void TIM2_IRQHandler() { // mach was... }
Code:// ... #include <stm32f10x.h> // sfr nach keil #include "STM32F107_rcc.h" // strukturen der sfr #include "STM32F107_gpio.h" // strukturen der sfr #include "STM32F107_tim.h" // strukturen der sfr int main() { //... // Timer 2 für Zeitmessung #define VORTEILER_TIM2 ((SystemCoreClock / 10000)-1) // Teilung auf 10 kHz #define TIM2_PRIO 0x10 // höchste Priorität #define TIM2_INTERV 1 // 1ms #define VORLADEWERT_TIM2 (TIM2_INTERV*10 - 1) RCCst->APB1ENR.tim2 = 1; // Takt für Timer 2 freigeben TIM2st->DIER.uie = 1; // Freigabe: Überlauf von Zähler löst Interrupt aus TIM2st->CR1.dir = 1; // Zähler zählt runter TIM2st->PSC = VORTEILER_TIM2; TIM2st->ARR = VORLADEWERT_TIM2; TIM2st->CNT = VORLADEWERT_TIM2; TIM2st->CR1.cen = 0; // Timer 2 Zählfreigabe NVIC->IP[2] = TIM2_PRIO; // Priorität NVIC->ISER[TIM2_IRQn / 32] = 1 <<(TIM2_IRQn % 32); // ISR für Zeitmessung setzen // ... } void TIM2_IRQHandler(void) // wird jede ms aufgerufen { TIM2st->SR.uif = 0; zaehler_ms++; }







Zitieren

Lesezeichen