Forum: Mikrocontroller und Digitale Elektronik STM32: HAL External Interrupt


von DraconiX (Gast)


Lesenswert?

Ich bin her langsam am Verzweifeln...

Gegeben: STM32F1 mit ST HAL Headern. Dort gibt es weder die 
EXTI_InitTypeDef noch die NVIC_InitTypeDef. Ich habe das Nucleo-F103B 
Board, mit einem Taster an PC13, den ich gerne triggern möchte. Meine 
bisherigen Erkenntnisse:
1
void EXTIEnable()
2
{
3
    GPIO_InitTypeDef GPIO_InitStruct;
4
5
    /* GPIO Port C Clock Enable */
6
    __HAL_RCC_GPIOC_CLK_ENABLE();
7
8
    /*Configure GPIO pin : PC13 */
9
    GPIO_InitStruct.Pin = GPIO_PIN_13;          //P13
10
    GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; //Interrupt RE
11
    GPIO_InitStruct.Pull = GPIO_NOPULL;         //Kein PullUp
12
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);     //Übergeben
13
    
14
    
15
    __HAL_RCC_AFIO_CLK_ENABLE();       //AFIO Clock an
16
    AFIO->EXTICR = (1<<5);             //External Int req L13
17
    
18
    EXTI_TypeDef EXTI_TypeStruct;
19
    
20
    EXTI_TypeStruct.IMR  |= EXTI_IMR_MR13;      //Trigger Line 13
21
    EXTI_TypeStruct.RTSR |= EXTI_RTSR_RT13;     //Rising Edge Line 13
22
    
23
}

So... und da verliesen sie mich auch schon wieder. Wo finde ich das NVIC 
Register? Wo die IRQ Handels?!

von DraconiX (Gast)


Lesenswert?

Ahhhh... ich habs! Aus dem STM Datenblatt wird man da aber nicht 
wirklich schlau! Pin0 bis Pin4 gehen einzeln auf den EXTI_IRQ_0 bis 
EXTI_IRQ_4 - Pin 5-9 gehen dann zusammen auf EXTI_IRQ_9_5 und  Pin10-15 
gehen dann auf EXTI_IRQ_15_10 - Aber im AFIO Register verteilen sie sich 
alle auf die AFIO1-4... Da werde mal ein schlau!


Aber so geht es nun:
1
void EXTI15_10_IRQHandler(void)
2
{
3
    HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);
4
    GPIOA->ODR ^= GPIO_PIN_5;
5
}
6
7
void EXTIEnable()
8
{
9
10
    HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0);
11
    HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
12
13
    GPIO_InitTypeDef GPIO_InitStruct;
14
    __HAL_RCC_GPIOC_CLK_ENABLE();
15
16
    /*Configure GPIO pin : PC13 */
17
    GPIO_InitStruct.Pin = GPIO_PIN_13;
18
    GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
19
    GPIO_InitStruct.Pull = GPIO_NOPULL;
20
    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
21
22
}

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.