Gast
#2457394
Hallo, ich arbeite mich gerade in das Thema STM32 ein. Nach erfolgreichen Versuchen mit den GPIO hänge ich nun an den Timern. Ich habe mir das Notwendigste aus den Datenblättern und dem RM0008 zusammen gesucht, aber ich erhalte keinen Einsprung in den Interrupthandler, wenn der Timer einen Overflow-Flag setzt. Vielleicht könntet Ihr mir erklären: 1. wass ich alles bei einem Timer (oder generell bei Interrupts) beim STM32 beachten muss 2. Welche Registereinträge hier am Beispiel wirklich relevant sind 3. Ob ich einen ausglösten Interrupt aktiv wieder auflösen muss, oder ob die Hardware das macht 4. Warum das alles so unübersichtlich dokumentiert sein muss... :) Ein Code-Beispiel: Timer 3 soll über einen Prescaler bis zu einem ARR-Wert zählen, dann einen Overflow setzen und über den Interrupthandler die LED PC8 auf meinem ST32-Discoveryboard blinken lassen. Soweit, so gut... #include "stm32f10x.h" void Tim3_Init () { RCC->APB1ENR |= (1 << 1); TIM3->PSC = 12000; TIM3->ARR = 1000; TIM3->CR1 |= (1 << 0); TIM3->DIER |= (1 << 0); } void TIM3_IRQHandler() { GPIOC->ODR ^= (1 << 8); } int main(void) { Tim3_Init(); RCC->APB2ENR |= (1 << 2) | (1 << 3) | (1 << 4); GPIOC->CRL = 0x33333333; while (1); } Das macht dieses Programm aber leider nicht. Ich wäre über einen Tipp sehr dankbar! Mit Gruß Mike