Estoy usando stm32l100C6-A para comunicarme con el medidor de gas a través de I2C. Mi código intenta iniciar la transferencia I2C, como esto:
I2C1->CR1 |= I2C_CR1_START;
// waiting for EV5 - Master Mode Select
while( ! (I2C1->SR1 & I2C_FLAG_SB) );
<yadda..yadda..>
y a veces funciona, la transferencia se completa, todo está bien. Pero otras veces, en lugar de una transferencia completa en líneas I2C, veo esto (SCL y SDA están en diferentes escalas):
Por lo que puedo ver, eso es solo una condición de inicio normal. Pero I2C1- > SR1 es cero, no se establecen bits, no importa cuánto tiempo espere.
Después de eso, hacer que el restablecimiento de I2C a través de I2C1->CR1 |= I2C_CR1_SWRST;
no ayude, hacer la reinicialización completa de I2C no ayuda, restablecer RCC para I2C no ayuda. Sólo ayuda de reinicio completo de MCU
Como el restablecimiento completo ayuda, el problema debe estar en la MCU, pero no pude encontrar nada similar en la errata o Internet.
Estoy usando I2C en 85kHz.
No tengo idea de lo que está pasando y no me gusta restablecer MCU como solución alternativa. ¿Alguna idea?