Forum: Mikrocontroller und Digitale Elektronik STM32F107VC Externer Interrupt


von Ma B. (drumstick)


Lesenswert?

GUTEN TAG!

Ich arbeite mit dem uVision von Keil mit einem STM32F107VC Prozessor!
Ich möchte mit dem Eingang Port D13 einen externen Interrupt erzeugen.
Das mit der Einsprungstelle der Interrupts und die Wahl der richtigen 
Quelle habe ich noch nicht ganz verstanden.

Mein Programm:
1
#define     INTERMASKREG            0x00002000
2
#define     FALLTRIGSELECREG        0x00002000
3
#define     EXINTCONFIGREG4         0x00000030
4
5
6
void init(void)                                            //
7
{
8
9
// EXT-Interrupt
10
    EXTI  ->  IMR       = INTERMASKREG; 
11
    EXTI  ->  FTSR      = FALLTRIGSELECREG;               
12
    AFIO  ->  EXTICR[3] = EXINTCONFIGREG4;//PortD13 the EXT_Inter.source
13
    NVIC    ->  ISER[0]    = 0x0000000D;                    //
14
                                        
15
}
16
17
18
19
void EXTIO_IRGHandler(void)
20
{
21
22
    if(EXTI -> PR & (1 << 13))
23
    {
24
    
25
        EXTI    ->  PR |= (1 << 13);
26
27
        GPIOD   ->  BSRR         =   (0 << 12);
28
        GPIOD   ->  BSRR         =   (0 << 11);   
29
    }
30
31
}

Hat jemand eine Idee, was da nicht gut ist?? ich meine, wenn ich den 
PortD Pin 13  auf 1 setze, müsste doch ein externer Interrupt ausgelöst 
werden??

Vielen Dank und freundliche Grüsse!

M.B.

von Noob (Gast)


Lesenswert?

Ist der Pin richtig konfiguriert?
Ist der Port mit einem Takt versorgt?

Noob

von Ma B. (drumstick)


Lesenswert?

Hallo!
1
#define     CLOCKCONFIG             0x001D8402
2
#define     CLOCKCONTROLL           0x01000081
3
#define     CLOCKENABLES            0x00000BF5
4
5
#define     CONFIGREGHIGHA          0x888888BB
6
#define     CONFIGREGLOWC           0x88888888
7
#define     CONFIGREGLOWD           0x88888888
8
#define     CONFIGREGHIGHD          0x88833833
9
#define     CONFIGREGHIGHE          0x33333333
10
11
12
13
// Clocks
14
    RCC     ->  APB2ENR     =   CLOCKENABLES;
15
    RCC     ->  CFGR        =   CLOCKCONFIG;    // Clockconfigurations
16
    RCC     ->  CR          =   CLOCKCONTROLL;   // 8MHz, PLL enable
17
18
    while(RCC -> CR   == (1<<1))          // waiting for Clock is stabile
19
    {                                                       //
20
        __nop();                                            //
21
    }                                                       //
22
23
    // GPIOs
24
    GPIOA   ->  CRH         =   CONFIGREGHIGHA; // Ports Input/Output
25
    GPIOD   ->  CRL         =   CONFIGREGLOWD; // Ports confi Input/Output
26
    GPIOD   ->  CRH         =   CONFIGREGHIGHD; // Ports confi Input/Output
27
    GPIOC   ->  CRL         =   CONFIGREGLOWC;  // Ports confi Input/Output
28
    GPIOE   ->  CRH         =   CONFIGREGHIGHE; // Ports confi Input/Output
29
    
30
    GPIOD   ->  BSRR         =   (1 << 12);

So sieht die Clock- und Port config. aus! Müsste doch passen??

Danke und Gruss

M.B.

von Ma B. (drumstick)


Lesenswert?

Hallo!

Ich denke der Fehler muss hier liegen:
1
NVIC    ->  ISER[0]    = 0x0000000D;

Ich habe nämlich noch nicht begriffen, wie dies funktioniert!

Gruss

M.B.

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.