Forum: Mikrocontroller und Digitale Elektronik STM32F4- I2C Eventinterrupt


von Jonny (Gast)


Lesenswert?

Hallo liebe community,

ich versuche derzeit mit STM32f407VG eine I2C Kommunikation aufzubauen.
Mein Problem ist gerade das der Eventinterrupt nicht erkannt wird. Dazu 
habe ich im folgenden Codesegment die Ports/Peripherie/Interrupt 
eingestellt.

int main(void)
{
  GPIO_InitTypeDef GPIO_InitStruct_I2C1;
  NVIC_InitTypeDef NVIC_InitStruct_I2C1;
  I2C_InitTypeDef I2C_InitStruct;

  SystemInit();

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);

        // I2C Ausgänge initialisieren
  GPIO_InitStruct_I2C1.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
  GPIO_InitStruct_I2C1.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStruct_I2C1.GPIO_Speed = GPIO_Speed_2MHz;
  GPIO_InitStruct_I2C1.GPIO_OType = GPIO_OType_OD;
  GPIO_InitStruct_I2C1.GPIO_PuPd  = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOB, &GPIO_InitStruct_I2C1);

  GPIO_PinAFConfig(GPIOB,GPIO_PinSource6 | GPIO_PinSource7, 
GPIO_AF_I2C1);


        // Interrupt initialisieren
  NVIC_InitStruct_I2C1.NVIC_IRQChannel = I2C1_EV_IRQn;
  NVIC_InitStruct_I2C1.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStruct_I2C1.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStruct_I2C1.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStruct_I2C1);

  I2C_DeInit(I2C1);

  //I2C initialisieren
  I2C_InitStruct.I2C_Ack = I2C_Ack_Enable;
  I2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
  I2C_InitStruct.I2C_ClockSpeed = 100000;
  I2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2;
  I2C_InitStruct.I2C_Mode = I2C_Mode_I2C;
  I2C_InitStruct.I2C_OwnAddress1 = 0;
  I2C_Init(I2C1, &I2C_InitStruct);

        // I2c Interrupts aktivieren
  I2C_ITConfig(I2C1, I2C_IT_EVT, ENABLE);

   //I2C modul aktivieren
        I2C_Cmd(I2C1, ENABLE);

  I2C_GenerateSTART(I2C1, ENABLE); //start bit senden (Interrupt 
auslösen)


//in stm32f4xx_it.c definiert

void I2C1_EV_IRQHandler(void)
{
}


Er müsste doch demnach sobald I2C_GenerateSTART(I2C1, ENABLE); 
ausgeführt wird in die Interruptroutine (I2C1_EV_IRQHandler) springen 
oder nicht?

Muss ich noch weitere Einstellungen bezüglich der Interruptvektoradresse 
durchführen oder reicht es eine Funktion mit dem Namen 
I2C1_EV_IRQHandler zu erstellen, so wie ich das gemacht habe?

Schon mal vielen Dank für jede Hilfe.

Gruß
Jonny

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.