STM32F207 GPIO Interrupt

OP (Firma: mumu) #2551178
Lesenswert?

Hey, ich mache gerade meine ersten Gehversuche mit meinem STM32.

Kann mir jemand mit Interrupts helfen?

Ich möchte gerne einen Interrupt auf den Pin PC13 legen. So das bei 
Tastendruck

NVIC-EnableIRQ(EXTI15_10_IRQn) {} //activate interrupt

und die Funktion:

void EXTI15_10_IRQHandler(void) {}

Kann mir jemand sagen was da noch fehlt???

Danke
OP (Firma: mumu) #2551216
Lesenswert?

Durch die Eile passieren Fehler ;) Das sollte natürlich ganz anders 
lauten...


Ich würde mich bei der Programmierung gerne auf CMSIS beschränken. Gibt 
es hierfür auch Beispiele???


Könnte mir jemand ein GPIO Interrupt Beispiel, welches sich nur auf 
CMSIS beschränkt posten?
Gast #2551237
Lesenswert?

>Ich würde mich bei der Programmierung gerne auf CMSIS beschränken. Gibt
>es hierfür auch Beispiele???
>Könnte mir jemand ein GPIO Interrupt Beispiel, welches sich nur auf
>CMSIS beschränkt posten?

Das kann niemand.

CMSIS Cortex-M3 Core Peripheral Access Layer Source File

CMSIS bezieht sich nur auf den reinen CPU Core und dessen
Register. Sagen wir einfach mal CPU Register und Systick.

Die Peripherie ist für jeden Hersteller anders.
(Firma: matzetronics) #2551545
Lesenswert?

Hier mal was für GPIO C , Pin 3 . benutzt allerdings die FW library, 
ymmv . Vllt. hilfts ja trotzdem:
1
// aus 'setup.h'
2
/* Direction Command Pin */
3
#define DIRECTION_GPIO_CLK                    RCC_APB2Periph_GPIOC     
4
#define USER_GPIO_PORT            GPIOC
5
#define DIRECTION_COMMAND_PIN           GPIO_Pin_3
6
#define DIRECTION_EXTI_PORT_SOURCE      GPIO_PortSourceGPIOC
7

8
#define DIRECTION_EXTI_IRQn             EXTI3_IRQn
9
#define DIRECTION_EXTI_PIN_SOURCE       GPIO_PinSource3
10
#define DIRECTION_EXTI_LINE             EXTI_Line3
11
// aus 'main.c'
12
RCC_APB2PeriphClockCmd(DIRECTION_GPIO_CLK | RCC_APB2Periph_AFIO, ENABLE);
13

14
/* Configure Direction Switch EXTI line . Clocks laufen schon und der Port ist bereits input */
15
GPIO_EXTILineConfig(DIRECTION_EXTI_PORT_SOURCE, DIRECTION_EXTI_PIN_SOURCE);
16
EXTI_InitStructure.EXTI_Line = DIRECTION_EXTI_LINE;
17
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
18
// wähle die gewünschte Flanke
19
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
20
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
21
EXTI_Init(&EXTI_InitStructure);
22
// damit er nicht gleich losfeuert
23
EXTI_ClearITPendingBit(DIRECTION_EXTI_LINE);
24
NVIC_InitStructure.NVIC_IRQChannel = DIRECTION_EXTI_IRQn;
25
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;
26
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;
27
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
28
NVIC_Init(&NVIC_InitStructure);
Und dann:
1
/*
2
*  Direction Switch IRQ
3
*/
4
void EXTI3_IRQHandler(void)
5
{
6
  if(EXTI_GetITStatus(DIRECTION_EXTI_LINE) != RESET)
7
  {
8
    /* Clear the EXTI line pending bit */
9
    EXTI_ClearITPendingBit(DIRECTION_EXTI_LINE);
10
    // Mach was im Interrupt
11
   }
12
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren