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
>Prozessor defekt?
Programm defekt?
nein ich ändere ja nur die GPIO pin zuweisung.
>nein ich ändere ja nur die GPIO pin zuweisung.
Vieleicht hast du dabei ja was vergessen.
Clock für GPIOF z.B.
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 | }
|
>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.
Jetzt hat er es doch noch geschafft ein Edit zu machen;)
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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.