Forum: Mikrocontroller und Digitale Elektronik emIDE, STM32, STStdLib: Externer Interrupt (PortPin)?


von STM32 Fragender (Gast)


Lesenswert?

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
von Micha (Gast)


Lesenswert?

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?

von STM32 Fragender (Gast)


Lesenswert?

> 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
Noch kein Account? Hier anmelden.