Hallo Leute, versuche nun schon seit 2 Tagen bei einem STM32F107 (IDE: emIDE) in eine externe Interrupt-Routine zu springen (EXTI_Line0). Ich benütze die ST-StandardLib. Der Interrupt an PA.0 wird auch ausgelöst, doch es wird nicht die Service-Routine "void EXTI0_IRQHandler(void)" gesprungen, sondern der Interrupt landet bei "void HardFault_Handler(void)". stm32f10x_it.h und "stm32f10x_it.c sind entsprechend angepasst worden. Ich denke die NVIC (Interrupt Vector Tabelle) wird nicht richtig initialisiert. Hat jemand eine Idee, an was es liegen kann? Muss Startup.S ergänzt werden? /*** Hier die Initalisierung ***/ void vExt_IRQTest(void) { GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE); GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); EXTI_InitStructure.EXTI_Line = EXTI_Line0; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; NVIC_Init(&NVIC_InitStructure); } /* IRQ-Routine */ void EXTI0_IRQHandler(void) { EXTI_ClearITPendingBit(EXTI_Line0); if(GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_3)) { GPIO_WriteBit(GPIOD, GPIO_Pin_7, SET); }else { GPIO_WriteBit(GPIOD, GPIO_Pin_7, RESET); } }
:
Verschoben durch User
Hast du den Prototyp void EXTI0_IRQHandler(void); in der stm32f10x_it.h auch nicht vergessen? Funktioniert das EXTI-Beispiel aus der Std.Per.Lib?
> in der stm32f10x_it.h auch nicht vergessen? Ist eingetragen. Der Compiler läuft durch, ohne Warnings und Errors. Der SysTick Interrupt ist auch Okay. Habe wirklich alles 3fach kontrolliert. > Funktioniert das EXTI-Beispiel aus der Std.Per.Lib? Der obige Code ist im Prinzip das Beispiel aus der Lib. Finde absolut kein Fehler, ich vermute es hängt mit der emIDE Umgebung zusammen, eventuell Startupcode, Grundinitilisierung Vector Tabelle ??? Hat noch einer eine Idee?
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.