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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren