STM32: Probleme mit I²C

OP #2207938
Lesenswert?

Hallo Leute, ich bins wieder.

Hab diesmal ein Problem mit I²C. Ich versuche einen Bl-Ctrl 2.0 Regler 
anzusprechen, es funktioniert jedoch nicht. Die Konfiguration der I²C 
Schnittstelle sollte passen, der Programmcode ebenso. Pull - Ups sind 
auch vorhanden. Hier mal die Konfiguration der I²C Schnittstelle:
1
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
2
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
3
I2C_InitStructure.I2C_OwnAddress1 = 0x52;
4
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
5
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
6
I2C_InitStructure.I2C_ClockSpeed = 400000;
7

8
I2C_Init(I2C1, &I2C_InitStructure);
9

10
/* I2C1 SDA and SCL configuration */
11
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
12
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
13
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
14
GPIO_Init(GPIOB, &GPIO_InitStructure);
15
I2C_Cmd(I2C1, ENABLE);

Und das ist der Programmcode (gleich mal sorry für die Länge, weis nicht 
was davon relevant ist):
1
Timeout = 0xFFFF;
2

3
        myprint2("\r\nEnter...");
4
        I2C_GenerateSTART(I2C1, ENABLE);
5
        myprint2("\r\nStart");
6
        while ((!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)) && (!stop))
7
        {
8
          if(Timeout == 0)
9
          {
10
            lEvent = I2C_GetLastEvent(I2C1);
11
            myprint2("\r\n   Error Occured: Code %u", lEvent);
12
            if(IS_I2C_EVENT(lEvent)){
13
              myprint2("\r\n       Is I2C Event");
14
            }
15

16
            stop = 1;
17
          }
18
          Timeout--;
19
        }
20
        stop = 0;
21
        Timeout = 0xFFFF;
22
        myprint2("\r\nEvent 1");
23
        Delay_ms(20);
24
        I2C_Send7bitAddress(I2C1, 0x52, I2C_Direction_Transmitter);
25

26
        myprint2("\r\n7b Address");
27
        while ((!I2C_CheckEvent(I2C1,
28
            I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)) && (!stop))
29
        {
30
          if(Timeout == 0)
31
          {
32
            lEvent = I2C_GetLastEvent(I2C1);
33
            myprint2("\r\n   Error Occured: Code %u", lEvent);
34
            if(IS_I2C_EVENT(lEvent)){
35
              myprint2("\r\n       Is I2C Event");
36
            }
37

38
            stop = 1;
39
          }
40
          Timeout--;
41
        }
42
        stop = 0;
43
        Timeout = 0xFFFF;
44
        myprint2("\r\nEvent 2");
45
        I2C_SendData(I2C1, 100);
46
        myprint2("\r\nSend Data");
47
        while ((!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED)) && (!stop))
48
        {
49
          if(Timeout == 0)
50
          {
51
            lEvent = I2C_GetLastEvent(I2C1);
52
            myprint2("\r\n   Error Occured: Code %u", lEvent);
53
            if(IS_I2C_EVENT(lEvent)){
54
              myprint2("\r\n       Is I2C Event");
55
            }
56

57
            stop = 1;
58
          }
59
          Timeout--;
60
        }
61
        stop = 0;
62
        Timeout = 0xFFFF;
63
        myprint2("\r\nEvent 3");
64
        I2C_GenerateSTOP(I2C1, ENABLE);
65
        myprint2("\r\nStop");

und die Ausgabe davon in Putty:
1
Enter...
2
Start
3
Event 1
4
7b Address
5
   Error Occured: Code 536870944
6
Event 2
7
Send Data
8
   Error Occured: Code 536870944
9
Event 3
10
Stop

Ich sitze jetzt hier schon ein paar Stunden und versuche Das Problem zu 
lösen. Ich hoffe ihr könnt mir helfen.

Danke schon im vorraus!

mfg,
TDK29

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