Estoy tratando de agregar una pantalla I2C a mi dron de control remoto. No puedo hacer que la pantalla funcione. Tomé el mismo código y lo copié en un núcleo stm32f303k8 y conseguí que la pantalla funcionara. Volví a mover el código al dron y lo probé en el procesador STM32F303cc. no funciona Las señales a continuación forman exactamente la misma línea de código que pasa por I2c en ambos chips. Bueno, recompilado en el marco cubemx para los diferentes chips, por supuesto. La línea amarilla es scl. La línea azul del reloj. La línea amarilla con los garabatos es del dron que no funciona. Los otros 2 son del núcleo de trabajo. ¿Qué pasa con la señal en el dron, el chip stm32f303cc? ¿Por qué es realmente ondulado? Ambos tienen resistencias de tracción de 2,2k y 4,7k. Específicamente, ¿por qué la línea amarilla debajo, imagen superior, dividir 50/50 entre alto y bajo en lo que parece ser el bit de reconocimiento? Gracias
dividido 50/50 entre alto y bajo en lo que parece ser el bit de reconocimiento
[...]
Parece un tira y afloja entre alto y bajo en el reconocimiento
Correcto, y eso significa que el Maestro I 2 C en realidad no liberó la línea SDA, para que el Esclavo I 2 C realice el Ack.
A su vez, eso significa que los pines GPIO utilizados para el bus I 2 C en el I 2 C Master (probablemente ambos pines, pero ciertamente SDA) se configuraron incorrectamente y se dejaron en su valor predeterminado de "push-pull", y no se cambiaron a "drenaje abierto", como se requiere para la operación I 2 C.
Eso es lo que causa el "tira y afloja" como lo describiste, o como dijo glen_geek : "¿por qué la línea SDA no llega hasta el suelo?" La respuesta es que SDA (y probablemente también SCL, pero la mayoría de los esclavos no intentan controlarlo) todavía se controla ( mediante un pin GPIO todavía configurado como "push-pull") y no se libera (solo con pull-up pasivo) ) como lo sería un pasador de "drenaje abierto".
Si confía en STM32CubeMX para escribir el código de inicialización, entonces acaba de descubrir un error en la versión que está usando (busque actualizaciones y erratas) o lo configuró incorrectamente (no lo uso, así que no puedo) No le diré qué configuración puede ser incorrecta).
En el Nucleo, el I2C está en I2C1. En el dron, está en I2C2.
Entonces, los puertos I 2 C son diferentes entre las configuraciones que funcionan y las que no funcionan. Eso podría explicar fácilmente por qué su problema aparece solo en una configuración, si el marco STM32CubeMX no está inicializando correctamente I2C2 (y ha habido errores de inicialización de puertos que afectan solo a algunos puertos).
glen_geek
Jeffrey Edward Messikian
Sam Gibson
Jeffrey Edward Messikian