Forum: Mikrocontroller und Digitale Elektronik STM32F10x, Gemeinsame Interrupt EXTI15_10


von Martin (Gast)


Lesenswert?

Hallo zusammen,

Ich habe eine Frage bezüglich des Interrupt Handlings des o.g. 
Controllers.

Die o.g. IRQ EXTI15_10_IRQHandler händelt ja alle Interrupts auf den 
Line 10-15, sprich auf den Pins 10-15 der Ports.

Jetzt wollte ich den Pin 13 von Port D als Interrupt (Falling edge) 
konfigurieren.

Allerdings springt der Controller nun IMMER (Pin-Status unabhängig) in 
diese ISR rein. Wenn ich dort den Port abfrage welcher den Ir auslöst 
funktioniert diese Abfrage so wie sie soll, was ein Hardwarefehler 
ausschließen sollte.

Hier der Code

•
1
main.h
2
3
#define EXTI_LINE_OVC_LID     EXTI_Line13
4
5
#define LID_OVC_PIN             GPIO_Pin_13           
6
#define LID_OVC_SPEED           GPIO_Speed_50MHz
7
#define LID_OVC_MODE            GPIO_Mode_IN_FLOATING;
8
#define LID_OVC_PORT            GPIOD
9
10
11
12
13
14
15
main.c
16
17
GPIO_InitStructure.GPIO_Pin   = LID_OVC_PIN;
18
GPIO_InitStructure.GPIO_Mode   = LID_OVC_MODE;
19
GPIO_InitStructure.GPIO_Speed       = LID_OVC_SPEED;
20
GPIO_Init(LID_OVC_PORT, &GPIO_InitStructure);
21
GPIO_EXTILineConfig(GPIO_PortSourceGPIOD, GPIO_PinSource13);
22
23
24
EXTI_InitStructure.EXTI_Line = EXTI_LINE_OVC_LID;
25
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
26
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
27
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
28
EXTI_Init(&EXTI_InitStructure);
29
30
31
  /* Enable the EXTI15_10 Interrupt */
32
NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
33
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 7;
34
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
35
NVIC_Init(&NVIC_InitStructure);
36
37
38
39
40
41
stm32f10x_it.c
42
void EXTI15_10_IRQHandler(void)
43
{
44
 if(EXTI_GetITStatus(EXTI_LINE_OVC_LID) != RESET)
45
  {
46
    if(GPIO_ReadInputDataBit(LID_OVC_PORT, LID_OVC_PIN) == 0x00)
47
      test=1;
48
    else
49
                           test=2;     
50
51
    // Clear the power fail EXTI line pending bit
52
    EXTI_ClearFlag(EXTI_LINE_OVC_LID);
53
    EXTI_ClearITPendingBit(EXTI_LINE_OVC_LID);
54
  }
55
}

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.