STM32 externer IRQ an PB11

Gast #3570734
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
}
#3570886
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
Gast #3570909
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....

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