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?
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.
NVIC_InitStructure.NVIC_IRQChannel = EXTI11_IRQn Gibt es nicht. Was soll ich dafür verwenden?
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 | }
|
Muss man so machen da es keinen eigenen IR für Linie 11 gibt sondern nur den zusammengefassten 15_10 -> siehe Vektortabelle.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.