STM32 StdPeriphLib I2C Addr Interrupt zurück setzen

Gast #2044848
Lesenswert?
• ▲
▼
Hallo, ich will im STM32 mit der StdPeriphLib 3.4.0 einen I²C Slave 
implementieren, allerding kann ich das ADDR Bit im SR1 nicht zurück 
setzen. Die Doku sagt folgendes:

ADDR (Address sent) is cleared by software sequence: a read operation to 
I2C_SR1 register (I2C_GetITStatus()) followed by a read operation to 
I2C_SR2 register ((void)(I2Cx->SR2)).

RM0008 sagt:
This Bit is cleared by software reading SR1 register followed reading 
SR2, or by hardware when PE=0.

Folgende zwei Algorithmen funktionieren nicht:

1.:
1
SR1Register = I2C1->SR1;
2
SR2Register = I2C1->SR2;
2.:
1
if (I2C_GetIT_Status(I2C1, I2C_IT_ADDR))
2
{
3
    SR1Register = I2C2->SR2;
4
    SR2Register = I2C1->SR1;
5
}

Gibts da noch etwas anderes zu beachten? Oder macht ihr das genauso und 
es funktioniert?

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.