Forum: Mikrocontroller und Digitale Elektronik STM32F4 Disc. FreeRTOS und EXTI


von Denis S. (h44656e)


Lesenswert?

Hallo Zusammen,
Ich bastele grade an FreeRTOS mit FreeRTOS_EC zusatz.  Jetzt habe ich 
ganz seltsames Problem.  Egal welchen Ports ich benutze  feuern nicht 
alle EXTI. Z.B. im unten angegebenen angegeben abschnitt sind auf GPIOC 
die  Pins GPIO_Pin_11; GPIO_Pin_12; GPIO_Pin_13; GPIO_Pin_14 als Eingang 
mit Interrupt Konfiguriert. Feuern allerdings nur 11 und 12.


Ich stehe echt auf dem Schlauch! Ich weiß auch nicht ob es was mit 
FreeRTOS zu tun hat oder mit meiner Blödheit (das letzte ist 
wahrscheinlicher).

über jeden Tipp werde ich mich  freuen!
Denis

p.S
Quellcode
1
void init_exti()
2
{
3
4
      GPIO_InitTypeDef GPIO_InitStructure;
5
      EXTI_InitTypeDef EXTI_InitStructure;
6
      NVIC_InitTypeDef NVIC_InitStructure;
7
8
      /// Enable the BUTTON Clock
9
      RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOC, ENABLE);
10
11
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
12
13
14
15
      /// Configure Button pin as input
16
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
17
      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
18
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
19
      GPIO_Init(GPIOC, &GPIO_InitStructure);
20
21
     //Anbindung mit Interruptgenerator
22
23
        /// Connect Button EXTI Line to Button GPIO Pin
24
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource11);
25
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource12);
26
27
28
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource13);
29
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource14);
30
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource15);
31
32
33
        // Configure Button EXTI line
34
        EXTI_InitStructure.EXTI_Line =  EXTI_Line11;
35
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
36
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
37
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
38
        EXTI_Init(&EXTI_InitStructure);
39
40
        // Configure Button EXTI line
41
        EXTI_InitStructure.EXTI_Line =  EXTI_Line12;
42
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
43
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
44
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
45
        EXTI_Init(&EXTI_InitStructure);
46
47
        // Configure Button EXTI line
48
        EXTI_InitStructure.EXTI_Line =  EXTI_Line13;
49
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
50
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
51
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
52
53
        // Configure Button EXTI line
54
        EXTI_InitStructure.EXTI_Line =  EXTI_Line14;
55
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
56
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
57
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
58
59
        // Configure Button EXTI line
60
        EXTI_InitStructure.EXTI_Line =  EXTI_Line15;
61
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
62
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
63
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
64
65
66
        NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
67
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
68
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
69
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
70
71
        NVIC_Init(&NVIC_InitStructure);
72
73
74
}
75
76
77
78
79
void EXTI15_10_IRQHandler()
80
{
81
  GPIOE->BSRRL=0xFFFF;
82
83
84
    //Manü Links / Wert--
85
      if (EXTI->PR & (1<<10)) {                        // EXTI13 interrupt pending?
86
      EXTI_ClearITPendingBit(EXTI_Line10);         // clear pending interrupt
87
      GPIOE->BSRRL=0xFFFF;
88
89
     }
90
91
    //Manü Links / Wert++
92
      if (EXTI->PR & (1<<11)) {                        // EXTI13 interrupt pending?
93
       EXTI_ClearITPendingBit(EXTI_Line11);                          // clear pending interrupt
94
       GPIOE->BSRRL=0x00FF;
95
96
97
     }
98
99
100
     if (EXTI->PR & (1<<12)) {                        // EXTI13 interrupt pending?
101
       EXTI_ClearITPendingBit(EXTI_Line12);                          // clear pending interrupt
102
       GPIOE->BSRRL=0xFFFF;
103
     }
104
105
     if (EXTI->PR & (1<<13)) {                        // EXTI13 interrupt pending?
106
      EXTI_ClearITPendingBit(EXTI_Line13);             // clear pending interrupt
107
       GPIOE->BSRRL=0xFFFF;
108
109
     }
110
111
     if (EXTI->PR & (1<<14)) {                        // EXTI13 interrupt pending?
112
      EXTI_ClearITPendingBit(EXTI_Line13);             // clear pending interrupt
113
       GPIOE->BSRRL=0xFFFF;
114
115
     }
116
117
     if (EXTI->PR & (1<<14)) {                        // EXTI13 interrupt pending?
118
      EXTI_ClearITPendingBit(EXTI_Line13);             // clear pending interrupt
119
       GPIOE->BSRRL=0xFFFF;
120
121
     }
122
     
123
124
125
     //EXTI_GetITStatus()
126
127
128
129
130
}

von microman (Gast)


Lesenswert?

Hallo,
der Call von der Init-Funktion fehlt bei 13 und 14.

von Denis S. (h44656e)


Lesenswert?

Danke!

ist ja echt blöd!

von erhardd (Gast)


Lesenswert?

...die Button auf GPIOC, aber EXTI_PortSourceGPIOE ?

von Denis S. (h44656e)


Lesenswert?

Danke das hatte ich schon gesehen.

Die Blindheit war tatsächlich bezüglich des fehlenden 
EXTI_Init(&EXTI_InitStructure) Aufrufs. Ich hatte das ganze mit 
unterschiedlichen Ports ausprobiert. :-) dank "copy and paste" hatte ich 
den gleichen Fehler immer wieder begannen.

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.