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?