Extra I2C en stm32f

0

Estoy usando stm32f105 para controlar 5 buses I2C y algunos otros circuitos periféricos. El problema es que usé todos los pines I2C dedicados por otros circuitos periféricos. ¿Es posible que cambie los pines GPIO (E / S de propósito general) como I2C?

Para ese propósito, se debe emitir un pin por un tiempo y luego cambiar a entrada (para SDA). es decir, se debe emitir un pin y cargar la dirección, luego cambiar para ingresar y recibir el ACK del esclavo, luego volver a leer o recibir datos del esclavo, y finalmente volver a la salida.

Me pregunto si es práctico? ¿Hay algún código fuente para eso en cualquier lugar?

    
pregunta Amir

2 respuestas

2

Sí, es posible. Configure ambos pines para abrir la salida de drenaje en GPIOx_CRL o GPIOx_CRH , y no tiene que preocuparse por cambiar la dirección del pin. Si el bit de puerto es 1 , entonces el cable es arrastrado por el proveedor externo, y puede leer 1 en GPIOx_IDR , o el esclavo lo baja, y tendrá 0 en GPIOx_IDR .

Hay una implementación de software sencilla en Wikipedia . Use TIM6 o TIM7 para el retraso, o DWT->CYCCNT si no quedan temporizadores disponibles. Deje las partes arbitration_lost si es el único maestro en el bus.

    
respondido por el berendi
2

I2C es un bus direccionable. Mientras no controle muchos dispositivos con la misma dirección, debería poder colocar múltiples dispositivos en el mismo bus.

Para responder a tu pregunta, sí, es posible golpear a I2C, pero es más doloroso que SPI. No quieres hacerlo a menos que realmente tengas que hacerlo.

Antes de comenzar a utilizar bit bitging, si no puede colocar varios dispositivos en un bus, puede considerar Conmutadores y multiplexores I2C

    
respondido por el Scott Seidman

Lea otras preguntas en las etiquetas