Forum: Mikrocontroller und Digitale Elektronik externer Interrupt F103 Cortex M3


von Hans M. (anno)


Lesenswert?

Hallo,

hier habe ich ein Beispiel für den Cortex M3 F103.

Hier wird auf einen externen Interrupt an Pin 0 reagiert. Ich benötige 
aber Pin 11 an Port B.


GPIO_InitTypeDef GPIO_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_In_Floating;
GPIO_Init(GPIOB,&GPIO_Init_Structure);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource0);

EXTI_InitStructure.EXTI_Line = EXTI_Line0
EXTI_InitStructure.EXTI_Mode_Interupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);


Was muss ich denn da genau verändern, dass der Interrupt an Port B Pin 
11 abgegriffen wird?

von Matthias K. (matthiask)


Lesenswert?

Zuerst mal das Referenz Manual, zumindest den Teil EXTI lesen! Ein Blick 
in die FW-Lib Examples zu EXTI lohnen sich auch...

Grob gesagt, überall wo die 0 im Bsp. steht in 11 ändern. Dann auch den 
richtigen Interrupthandler verwenden.

von Hans M. (anno)


Lesenswert?

NVIC_InitStructure.NVIC_IRQChannel = EXTI11_IRQn

Gibt es nicht. Was soll ich dafür verwenden?

von abc (Gast)


Lesenswert?

1
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource11);              EXTI_InitStruct.EXTI_Line    = EXTI_Line11;   
2
EXTI_InitStructure.EXTI_Mode_Interupt;
3
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
4
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
5
EXTI_Init(&EXTI_InitStructure);
6
7
  NVIC_InitStruct.NVIC_IRQChannel = EXTI15_10_IRQn;  //Kanal NVIC -> Vektortabelle
8
  NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 2; //Hauptprioritaet
9
  NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;  //Subprioritaet
10
  NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;    //Aktivieren
11
  NVIC_Init(&NVIC_InitStruct);  //Initialisierung des NVIC-Controllers 
12
13
14
15
void EXTI15_10_IRQHandler(void)
16
{
17
   if(EXTI_GetITStatus(EXTI_Line11) != RESET) //EXTI_Line 11 hat ausgelöst
18
    EXTI_ClearITPendingBit(EXTI_Line11);
19
  }                                  
20
21
22
}

von abc (Gast)


Lesenswert?

Muss man so machen da es keinen eigenen IR für Linie 11 gibt sondern nur 
den zusammengefassten 15_10 -> siehe Vektortabelle.

von abc (Gast)


Lesenswert?

Korrektur: Überall schauen dass selber Name der Struktur existiert, ich 
verwende immer NVIC / EXTI_InitStruct statt InitStructure, beim 
zusammenkopieren oben hab sich dadurch unterschiede ergeben.

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.