Forum: Mikrocontroller und Digitale Elektronik STM32 F4 I2C2 geht nicht auf pins PF0 und PF1 aber auf PB10 und PB11 woran liegst?


von Ersi (cell85)


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

von holger (Gast)


Lesenswert?

>Prozessor defekt?

Programm defekt?

von Ersi (cell85)


Lesenswert?

nein ich ändere ja nur die GPIO pin zuweisung.

von holger (Gast)


Lesenswert?

>nein ich ändere ja nur die GPIO pin zuweisung.

Vieleicht hast du dabei ja was vergessen.
Clock für GPIOF z.B.

von Ersi (cell85)


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
      }

von holger (Gast)


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.

von holger (Gast)


Lesenswert?

Jetzt hat er es doch noch geschafft ein Edit zu machen;)

von holger (Gast)


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!

von Ersi (cell85)


Lesenswert?

hättest du vielleicht bissl netter ausdrücken können. tz
Keine sorge ich schreibe keine Befehle als string.

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.