Forum: Mikrocontroller und Digitale Elektronik EXTI PortB13


von Bill (Gast)


Lesenswert?

Hallo,

ich möchte auf PortB.13 einen externen Interrupt auslösen. Der Pin ist 
als Eingang mit Pullup definiert, am Oszi kann ich beim Tasterdruck 
sehen, dass dort ein Wechsel von High auf Low stattfindet.

Es ist ein STM32F070RB.

Ich habe folgende paar Zeilen Code, die keinen Interrupt auslösen. Hat 
jemand ein Tip, was ich übersehen haben könnte?
1
void setInterrupt(uint8_t u8Flag, uint8_t u8Priority) {
2
  NVIC->ICPR[u8Flag / 32] |= 1 << (u8Flag % 32);
3
  NVIC->IP[u8Flag / 4] |= (u8Priority << 6) << (8 * (u8Flag % 4));
4
  NVIC->ISER[u8Flag / 32] |= 1 << (u8Flag % 32);
5
}
6
7
/*Fallende Flanke, Pending löschen, PB13 auf EXTI13*/
8
EXTI->FTSR1 |= EXTI_FTSR1_FT13;
9
EXTI->FPR1 |= EXTI_FPR1_FPIF13;
10
EXTI->EXTICR[3] |= 1 << EXTI_EXTICR4_EXTI13_Pos;
11
setInterrupt(EXTI4_15_IRQn, 1);
12
13
void EXTI4_15_IRQHandler() {
14
  EXTI->FPR1 |= EXTI_FPR1_FPIF13;
15
}

von Stefan F. (Gast)


Lesenswert?

Ich sehe da keinen Fehler, aber so ist der Code ja noch nicht 
vollständig. Zeige mal den ganzen Code.

Ich würde in der ISR vor dem Ende eine LED toggeln.

Hast du das Bit RCC_APB2ENR_SYSCFGEN eingeschaltet? Hast du den Port 
eingeschaltet und als Input konfiguriert?

Eventuell hilft dir mein Beispiel auf 
http://stefanfrings.de/stm32/stm32l0.html#nvic, das ist für den STM32L0, 
aber ich denke es geht auf deinem F0 ebenso.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.