Forum: Mikrocontroller und Digitale Elektronik STM32 I2C Slave Betrieb


von Nbe (Gast)


Lesenswert?

Hi Leute,

kämpfe seit paar Stunden mit meinem STM32. Und zwar wollte ich diesen 
als I2C Slave laufen lassen. Grundsätzlich funktioniert die 
Kommunikation. Ich kann mehrmals zu dem STM32 Daten senden, probiere ich 
aber die Daten vom STM32 zu lesen, klappt es genau ein Mal. Danach hält 
der STM32 wie es aussieht die SCL Leitung auf low. Habe nachgeforscht 
und bin leider zu keinem schlüssigen Ergebnis gekommen, warum es so ist 
und was man da machen kann. Vielleicht hatte jemand schon die gleichen 
Probleme mit dem Chip.
hier ist meine ISR (mehr oder weniger wie aus den Beispielen):
1
void I2C2_EV_IRQHandler(void)
2
{
3
   
4
    char a;
5
    switch (I2C_GetLastEvent(I2C2))
6
    {
7
       
8
        // --> I2C Slave as receiver //////////////////////////////////////////
9
        case I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED:   
10
            Rx2_Idx = 0;
11
        break;
12
13
        case I2C_EVENT_SLAVE_BYTE_RECEIVED:              
14
          if (Rx2_Idx < IC2_RX_BUFFERSIZE)
15
          {
16
            a = I2C_ReceiveData(I2C2); 
17
            I2C2_Buffer_Rx[Rx2_Idx++] = a;
18
          }
19
        break; 
20
        ///////////////////////////////////////////////////////////////////////    
21
      
22
        // --> I2C Slave as sender ////////////////////////////////////////////
23
        case I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED:
24
            I2C_SendData(I2C2, 0x5D);
25
        break;
26
27
        case I2C_EVENT_SLAVE_BYTE_TRANSMITTED:
28
            I2C_SendData(I2C2, 0x5D);
29
        break;
30
        ///////////////////////////////////////////////////////////////////////
31
          
32
        
33
        case I2C_EVENT_SLAVE_STOP_DETECTED:              
34
            (void)(I2C_GetITStatus(I2C2, I2C_IT_STOPF));
35
            I2C_Cmd(I2C2, ENABLE);
36
        break;
37
38
        default:
39
        break;
40
    }
41
}

von Michael65589 (Gast)


Lesenswert?

Hi  Nbe,

hast Du es inzwischen hin bekommen?

Gruß
Michael

von Ich und kein anderer (Gast)


Lesenswert?

Es muss im ER Handler das Acknowledge failure flag gelöscht werden, da 
das letzte byte beim Lesezugriff vom Master mit einem NACK quittiert 
wird.

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.