Forum: Mikrocontroller und Digitale Elektronik STM8S I²C Kommunikation


von Peter (Gast)


Lesenswert?

Hallo,

ich habe zwei STM8S Discovery Boards (Modul A und Modul B) und möchte 
beide mit I²C verbinden. Dabei soll das Modul A (Master) bei Modul B 
(Slave) Daten anfordern. Jetzt hab ich für Modul A folgendes 
geschrieben:
1
  /* I2C configuration
2
    ---------------------------------------------------------------------------*/
3
    I2C_DeInit();
4
    I2C_Cmd(ENABLE);
5
    I2C_Init(100000, 0x10, I2C_DUTYCYCLE_2, I2C_ACK_CURR, I2C_ADDMODE_7BIT, 16);
6
7
while (1)
8
  {
9
    if(c>15000)
10
    {
11
      if(!I2C_GetFlagStatus(I2C_FLAG_BUSBUSY))
12
      {
13
        I2C_GenerateSTART(ENABLE);                      // I2C start
14
        
15
        while (!I2C_CheckEvent(I2C_EVENT_MASTER_START_SENT));
16
        
17
        I2C_Send7bitAddress(0x18, I2C_DIRECTION_RX);    // adress 00011000 -> Modul_B
18
        
19
        while(!I2C_CheckEvent(I2C_EVENT_MASTER_ADDRESS_ACKED));  /* Wait RXNE=1 EV7 bit is setI2C_Buffer_RX is ready to read */
20
        I2C_ClearFlag(I2C_FLAG_ADDRESSSENTMATCHED);
21
        
22
        while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_RECEIVED));
23
        rec = I2C_ReceiveData();
24
        
25
        I2C_GenerateSTOP(ENABLE);                        // I2C stop
26
        
27
        int2str(data, rec);
28
        sendUART_String(data);
29
      }
30
      c=0;
31
    }
32
    else
33
    {
34
      c++;
35
    }
36
  }

und für das Modul B:
1
/* I2C configuration
2
    ---------------------------------------------------------------------------*/
3
    I2C_DeInit();
4
  
5
    I2C_Cmd(ENABLE);
6
    I2C_Init(100000, 0x18, I2C_DUTYCYCLE_2, I2C_ACK_CURR, I2C_ADDMODE_7BIT, 16);
7
8
while (1)
9
  {
10
    
11
    while(!I2C_CheckEvent(I2C_EVENT_SLAVE_ADDRESS_MATCHED));
12
    
13
    while(!I2C_CheckEvent(I2C_EVENT_SLAVE_BYTE_TRANSMITTED))
14
      I2C_SendData(0x11);
15
      
16
    while(!I2C_CheckEvent(I2C_EVENT_SLAVE_STOP_DETECTED));
17
  }

Doch leider klappt die Verbindung nicht. Ich bin mir auch nicht sicher, 
ob ich alles richtig gemacht habe (bzw. richtige ACK, Adressen, ...). 
Die Hardware ist einwandfrei (mit 4k7 Pullups).
Ich hoffe ihr könnt mir ein paar Tips geben.

Gruß
Peter

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.