Forum: Mikrocontroller und Digitale Elektronik STM32F4 konfiguration von EXTI


von Denis S. (h44656e)


Lesenswert?

Hallo Zusammen,

ich habe eine grundsätzliche frage ich versuche ein paar Zeilen Code von 
STM32F100 auf STM32F4 zu portieren.

Im einzelnem kriege ich die Buttons nicht konfiguriert so konfiguriert, 
dass ich über eine IRQ Routine behandelt werden.



bei STM32F100 Habe ich wie folgt die Pins konfiguriert und  über 
exti15_10_irqhandler behandelt. Bei STM32F4 kriege ich einfach nicht 
hin.

vielleicht kann mir jemand einen Tipp geben.

1
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
2
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13;
3
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
4
  GPIO_Init(GPIOC, &GPIO_InitStructure);
5
6
7
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); 
8
9
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource11);  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource10);  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource12);  GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource13);
10
11
  EXTI_InitStructure.EXTI_Line = EXTI_Line10;
12
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
13
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  
14
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
15
  EXTI_Init(&EXTI_InitStructure);
16
17
  EXTI_InitStructure.EXTI_Line = EXTI_Line11;
18
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
19
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;  
20
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
21
  EXTI_Init(&EXTI_InitStructure);
22
23
  EXTI_InitStructure.EXTI_Line = EXTI_Line12;
24
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
25
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
26
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
27
  EXTI_Init(&EXTI_InitStructure);
28
29
  EXTI_InitStructure.EXTI_Line = EXTI_Line13;
30
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
31
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
32
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
33
  EXTI_Init(&EXTI_InitStructure);
34
 
35
  NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
36
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
37
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
38
NVIC_Init(&NVIC_InitStructure);


Bei STM32F4 Kriege Ich die die ganze geschichte nicht über 
EXTI15_10_IRQn konfiguriert.
das einzige was bis jetzt funktioniert ist


1
      GPIO_InitTypeDef GPIO_InitStructure;
2
      EXTI_InitTypeDef EXTI_InitStructure;
3
      NVIC_InitTypeDef NVIC_InitStructure;
4
5
      /// Enable the BUTTON Clock
6
7
      RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOC, ENABLE);
8
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
9
10
      /// Configure Button pin as input
11
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
12
      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
13
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
14
      GPIO_Init(GPIOC, &GPIO_InitStructure);
15
16
     //Anbindung mit Interruptgenerator
17
18
        /// Connect Button EXTI Line to Button GPIO Pin
19
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource4);
20
21
        /// Connect Button EXTI Line to Button GPIO Pin
22
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOC, EXTI_PinSource3);
23
24
25
        // Configure Button EXTI line
26
        EXTI_InitStructure.EXTI_Line =  EXTI_Line4;
27
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
28
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
29
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
30
        EXTI_Init(&EXTI_InitStructure);
31
32
        // Configure Button EXTI line
33
        EXTI_InitStructure.EXTI_Line =  EXTI_Line3;
34
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
35
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
36
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
37
        EXTI_Init(&EXTI_InitStructure);
38
39
40
        // Enable and set Button EXTI Interrupt to the lowest priority
41
        NVIC_InitStructure.NVIC_IRQChannel =  EXTI4_IRQn;
42
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
43
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
44
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
45
        NVIC_Init(&NVIC_InitStructure);
46
47
        // Enable and set Button EXTI Interrupt to the lowest priority
48
        NVIC_InitStructure.NVIC_IRQChannel =  EXTI3_IRQn;
49
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
50
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
51
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
52
        NVIC_Init(&NVIC_InitStructure);

von Denis S. (h44656e)


Lesenswert?

....  vielleicht eine grundsätzliche Frage:

wo ist der unterschied zwischen EXTI0 bis EXTI4 und dem EXTI15_10 ?


wäre über jeden Tipp froh!

von Denis S. (h44656e)


Lesenswert?

Erledigt!

war wirklich ein ganz dummer Fehler. ich habe die Konfiguration in einer 
C++ Datei geschrieben. Määäp!

Jetzt ist das ganze über extern "C" aus einer .c Datei angebunden und es 
funktioniert.


Nicht desto trotz bleibt die Frage, wo der unterschied zwischen den EXTI 
lines liegen

Danke!

von Christoph (Gast)


Lesenswert?

Naja. Einen Unterschied gibt es da eigentlich nicht. Die ersten 
EXTI-Lines sind nur einzeln rausgeführt, damit man die Möglichkeit hat 
auf einzelne Interrupts direkt zu reagieren, ohne auswerten zu müssen, 
welches Ereignis den Interrupt verursacht hat. Bei den Sammel EXTI-Lines 
weiß man ja nie, welcher den Interrupt ausgelöst hat. Da muss man dann 
die Flags auswerten.

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.