www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STM32 I2C Slave Betrieb


Autor: Nbe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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):
void I2C2_EV_IRQHandler(void)
{
   
    char a;
    switch (I2C_GetLastEvent(I2C2))
    {
       
        // --> I2C Slave as receiver //////////////////////////////////////////
        case I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED:   
            Rx2_Idx = 0;
        break;

        case I2C_EVENT_SLAVE_BYTE_RECEIVED:              
          if (Rx2_Idx < IC2_RX_BUFFERSIZE)
          {
            a = I2C_ReceiveData(I2C2); 
            I2C2_Buffer_Rx[Rx2_Idx++] = a;
          }
        break; 
        ///////////////////////////////////////////////////////////////////////    
      
        // --> I2C Slave as sender ////////////////////////////////////////////
        case I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED:
            I2C_SendData(I2C2, 0x5D);
        break;

        case I2C_EVENT_SLAVE_BYTE_TRANSMITTED:
            I2C_SendData(I2C2, 0x5D);
        break;
        ///////////////////////////////////////////////////////////////////////
          
        
        case I2C_EVENT_SLAVE_STOP_DETECTED:              
            (void)(I2C_GetITStatus(I2C2, I2C_IT_STOPF));
            I2C_Cmd(I2C2, ENABLE);
        break;

        default:
        break;
    }
}


Autor: Michael65589 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi  Nbe,

hast Du es inzwischen hin bekommen?

Gruß
Michael

Autor: Ich und kein anderer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.