Forum: Mikrocontroller und Digitale Elektronik STM32 StdPeriphLib I2C Addr Interrupt zurück setzen


von LQFP oder QFN? (Gast)


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?

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.