I2C-slave-Empfänger auf stm32f4

Ich versuche zu implementieren, die eine i2c-slave-receiver interrupt service routine auf einem stm32f4.
Hier ist mein smart Stück code.

void I2C2_EV_IRQHandler()
  {
    switch (I2C_GetLastEvent(I2C2))
    {
    //The address sent by the master matches the own address of the peripheral
    case I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED:
        //The slave stretches SCL low until ADDR is
        //cleared and DR filled with the data to be sent
        I2C_ClearFlag(I2C2,I2C_FLAG_ADDR);
        break;

    //The application is expecting a data byte to be received
    case I2C_EVENT_SLAVE_BYTE_RECEIVED:
        I2C_ReceiveData(I2C2);
        break;

    //The application is expecting the end of the communication
    //Make sure that both ADDR and STOPF flags are cleared
    //if both are found set.
    case I2C_EVENT_SLAVE_STOP_DETECTED:
        if(I2C_GetFlagStatus(I2C2,I2C_FLAG_ADDR) == SET)
            I2C_ClearFlag(I2C2,I2C_FLAG_ADDR);
        if(I2C_GetFlagStatus(I2C2,I2C_FLAG_STOPF) == SET)
            I2C_ClearFlag(I2C2,I2C_FLAG_STOPF);
}

}

Den interrupt aufgerufen wird, und I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED Fall eingegeben wird.
Die SCL low ist jetzt. Das Referenz-Handbuch sagt, wenn ich klar die Adresse, die Flagge, geht die Uhr weiter, und Daten werden gesendet (Seite 579 - Slave-Empfänger). Meiner Meinung nach ist der interrupt wird immer dann aufgerufen, wenn keine Daten eintreffen und der nächste Zustand wird I2C_EVENT_SLAVE_BYTE_RECEIVED.

Ich nicht finden können, jedes Beispiel von stm oder über google. Kann jemand mir helfen, oder zeigen Sie mir ein Beispiel.

Ein Fehler im code oben, ist das fehlende erkennen in jedem Fall. In meinem Fall sind es auch die anderen Sklaven, die Kommunikation mit dem master. So nach dem initialisieren mein Sklave ein hören auf den bus. Ich erhalten eine stop-bit, das war nicht Teil meiner Kommunikation. Also ich bin nicht in der Lage zu löschen, die Stop-bit. Auch das zurücksetzen der ADDR-flag ist nicht so einfach wie ich dachte.

InformationsquelleAutor Jonny Schubert | 2012-03-26

Schreibe einen Kommentar