STM32 F4 I2C2 geht nicht auf pins PF0 und PF1 aber auf PB10 und PB11 woran liegst?

OP #3012993
Lesenswert?

Hi,

auf dem STM32 hab ich 2 sensoren am I2C2 Bus (PF0 und PF1). Tote hose! 
man sieht nicht mal die Startbedingung oder irgendwas vom Prozessor 
kommen. Im Debugger hängt er sich beim warten des I2C Init Flags auf, 
also wartet und wartet.
Wenn ich es an PB10 und PB11 betreibe, geht der I2C2 und die Sensoren 
funktionieren wunderbar. Woran kann das liegen?

Prozessor defekt?


VG
Sven
OP #3013219
Lesenswert?

das ist es leider nicht, hab das so:

"RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);"


hier ensteht das Problem bzw. bleibt er hängen:
1
    /*I2CTest with busy waiting to test hardware*/
2
      /*Initialize I2C2*/
3
       RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
4

5
      I2C_InitTypeDef  I2C_InitStructure;
6
      GPIO_InitTypeDef GPIO_InitStructure;
7

8
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
9
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
10
      GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
11
      GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
12

13
      RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE);
14
      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
15

16
      /* Connect PXx to I2C_SCL, I2C_SDA*/
17
      GPIO_PinAFConfig(GPIOF, GPIO_PinSource1, GPIO_AF_I2C2); //SCL
18
      GPIO_PinAFConfig(GPIOF, GPIO_PinSource0, GPIO_AF_I2C2);  //SDA
19
      GPIO_Init(GPIOF, &GPIO_InitStructure);
20

21
      I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
22
      I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
23
      I2C_InitStructure.I2C_OwnAddress1 = 0x00;
24
      I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
25
      I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
26
      I2C_InitStructure.I2C_ClockSpeed = 400000;
27
      I2C_Init( I2C2, &I2C_InitStructure);
28

29
      I2C_Cmd(I2C2, ENABLE);
30

31
      //I2C_AcknowledgeConfig(I2C2, DISABLE);
32

33
      volatile int x= 0;
34

35
      I2C_GenerateSTART(I2C2, ENABLE);
36

37
      while(I2C_GetFlagStatus(I2C2, I2C_FLAG_SB)!= SET) //Wait for Startbit set
38
      {
39
              x++;
40
      }
41

42
      I2C_Send7bitAddress(I2C2,0xEC,I2C_Direction_Transmitter);
43

44
      while(I2C_GetFlagStatus(I2C2, I2C_FLAG_ADDR)!= SET) //Wait for Address send flag
45
      {
46
              x++;
47
      }
48

49
      I2C_SendData(I2C2,0x48);
50

51
      while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BTF)!= SET) //Wait for Address send flag
52
      {
53
              x++;
54
      }
Gast #3013226
Lesenswert?

>das ist es leider nicht, hab das so:
>
>"RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);"

Das frisst der C Compiler so aber nicht. Das ist ein String.
Da schmeisst der ne Fehlermeldung.

Sag mal bist du zu dämlich deinen kompletten nicht funktionierenden
Code zu posten oder glaubst du das hier ein Haufen von Hellsehern
vor der Glotze hockt und versucht geistigen Kontakt zu dir herzustellen
um diesen Code auf deinem Monitor per mentaler Fähigkeiten zu sehen?

Mir sind gerade die Satzzeichen ausgegangen.
Gast #3013242
Lesenswert?

Vieleicht hilft das ja:

  /* sEE_I2C Peripheral Enable */
  I2C_Cmd(sEE_I2C, ENABLE);
  /* Apply sEE_I2C configuration after enabling it */
  I2C_Init(sEE_I2C, &I2C_InitStructure);

Achte auf die Kommentare!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren