Valor de pin de un pin GPIO configurado como alta impedancia

2

Estoy utilizando una placa de descubrimiento STM32F4 y mi intención es configurar uno de sus pines GPIO a alta impedancia, lo que he hecho de la siguiente manera:

GPIO_InitStruct.Pin = GPIO_PIN_12;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;

Desde mi entendimiento, para configurar un pin a alta impedancia, se debe ingresar el modo. Estoy en lo correcto?

Si leo el estado de este pin, obtengo un valor de 1. No estoy seguro de si los pines de alta impedancia deberían devolver un 1 o un 0. ¿Podría alguien ayudarme a entender esto?

    
pregunta smyslov

1 respuesta

6

Has configurado tu pin correctamente. El pin está en modo de alta impedancia y solo tendrá la corriente de fuga como corriente de entrada (en el orden de los microamperios).

La lectura del valor del pin le dará el valor lógico de la tensión aplicada al pin. Los niveles de voltaje que corresponden a 0 o 1 están disponibles en la hoja de datos de los dispositivos.

Por ejemplo, para el STM32F401 una tensión de hasta (máximo) 0.35 * VDD-0.04 V se considerará bajo o 0.

Un voltaje de al menos 0.4 * VDD se considera alto o 1.

Entonces, si suministra a su dispositivo 3.3V, todo lo que esté en el pin hasta 1.115 V se considerará un 0 y todo lo que supere los 1.32 V se considerará un 1.

Sin embargo, para evitar que el pin cambie rápidamente entre los dos estados, hay una histéresis de 0.45 * VDD +0.3 V. Así que para cambiar entre los dos estados necesita un cambio de voltaje mayor que solo la diferencia entre 1.115 V y 1.32 V.

Ahora, si tiene un pin desconectado y lee el valor del registro de entrada, el valor es básicamente indefinido. Podría ser 0 o 1 dependiendo de muchos factores, voltajes de pin adyacentes, EMI y otros.

El pin y la pista conectada actúan básicamente como una antena. Por lo tanto, capta todo tipo de señales y como solo se requiere una pequeña carga para llevar el voltaje de 0 niveles a 1 niveles, cambiará entre ellos fácilmente. Esto depende de la capacitancia de la pista y el pin, sin condensadores agregados, está en el rango de algunos picofaradios, que pueden cargarse e influenciarse fácilmente.

Esto hace que su controlador sea susceptible a perturbaciones externas. Esto puede llevar a un comportamiento errático en caso de una EMI fuerte (sostener un teléfono móvil cerca de su microcontrolador), algunos dispositivos reaccionan mucho más sensibles, por lo que incluso agitar su mano podría molestarlo.

Debido a eso, se considera una mejor práctica tener algún tipo de unidad activa en cada pin de entrada. O bien el circuito externo se asegura de que tenga un nivel definido todo el tiempo, o se usa una resistencia de pull-up o pull-down. La mayoría de los microcontroladores tienen resistencias incorporadas, por lo que los componentes externos no son necesarios.

Para habilitar la resistencia de pull-up o pull-down en un pin, puede usar el GPIO_InitStruct.Pull . Establézcalo en GPIO_PULLUP o GPIO_PULLDOWN respectivamente. Cuál es la correcta depende de su aplicación, por lo general, si está esperando una señal alta, habilitará el desplegable para asegurarse de que no reciba una señal alta accidental. Esto también proporcionaría una lectura confiable si el pin no está conectado.

Los pines no utilizados también pueden configurarse como salida si se dejan desconectados para evitar los efectos negativos.

Nota: si desea realizar un diseño conectable, debe pensar en una protección ESD adicional para el pin.

    
respondido por el Arsenal

Lea otras preguntas en las etiquetas