Forum: Mikrocontroller und Digitale Elektronik STM32 externer IRQ an PB11


von Matthias L. (Gast)


Lesenswert?

Hoi Leute,

wie der Betreff sagt, ich versuche am STM32F107 mit CoIDE einen 
Interrupt am PB11 zu erzeugen.
Es sollen beide Flanken ermittelt werden und dann will ich das Signal 
Hi/LO ausgeben.

Das Ergebnis ist, das nicht einmal bei Flanke eine UART-Ausgabe kommt, 
sondern ununterbrochen. Die UART-Ausgabe selbst funktioniert. ALso 
scheint er immer wieder in den INT zu springen, aber warum?

Jemand eine Idee?
1
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);
2
3
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;// | GPIO_Pin_9 |  GPIO_Pin_8;
4
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
5
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
6
    GPIO_Init( GPIOB , &GPIO_InitStructure);
7
8
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource11);
9
10
    EXTI_InitStructure.EXTI_Line = EXTI_Line0;
11
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
12
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
13
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
14
    EXTI_Init(&EXTI_InitStructure);
15
16
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
17
18
    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
19
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
20
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
21
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
22
    NVIC_Init(&NVIC_InitStructure);
23
24
void EXTI0_IRQHandler(void)
25
{
26
    EXTI_ClearITPendingBit(EXTI_Line0);
27
    
28
    uint8_t u08EELoad =  GPIO_ReadInputDataBit( GPIOB, GPIO_Pin_11);
29
30
    { // DIAG
31
        uint8_t   au8E2Load[] = "esc eeprom = 0x00\r\n";
32
        u08toHex( &au8E2Load[15], u08EELoad );
33
        stm32_rs232_send( sizeof(au8E2Load)-1, &au8E2Load );
34
    }
35
}

von Jörn K. (joern)


Lesenswert?

Hallo Matthias,

probiert mal den EXTI_Line11 Interrupt.

Siehe RM0008, Figure 21:

http://www.st.com/st-web-ui/static/active/en/resource/technical/document/reference_manual/CD00171190.pdf

Und den Takt für die AFIO musst du, glaube ich, auch noch einschalten:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

Sonst werden die Einstellungen von

GPIO_EXTILineConfig ( XXX )

nicht übernommen.

Gruß
Jörn

von Matthias L. (Gast)


Lesenswert?

Demnach müsste es so sein:
1
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
2
3
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;// | GPIO_Pin_9 |  GPIO_Pin_8;
4
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
5
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
6
    GPIO_Init( GPIOB , &GPIO_InitStructure);
7
8
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource11);
9
10
    EXTI_InitStructure.EXTI_Line = EXTI_Line11;
11
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
12
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;
13
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
14
    EXTI_Init(&EXTI_InitStructure);
15
16
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
17
18
    NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
19
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
20
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
21
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
22
    NVIC_Init(&NVIC_InitStructure);
23
24
25
void EXTI15_10_IRQHandler(void)
26
{
27
    EXTI_ClearITPendingBit(EXTI_Line11);
28
    ...
29
}

Aber da passiert garnichts....

von Jörn (Gast)


Lesenswert?

-> NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; <-

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.