49 votos

STM32 Entendiendo la configuración del GPIO

En la biblioteca de periféricos estándar de STM32, necesitamos configurar el GPIO.

Pero hay 3 funciones que no sé cómo configurarlas;

  • GPIO_InitStructure.GPIO_Speed
  • GPIO_InitStructure.GPIO_OType
  • GPIO_InitStructure.GPIO_PuPd

En el GPIO_Speed Hay 4 opciones para elegir

GPIO_Speed_2MHz  /*!< Low speed */
GPIO_Speed_25MHz /*!< Medium speed */
GPIO_Speed_50MHz /*!< Fast speed */
GPIO_Speed_100MHz

¿Cómo sé qué velocidad debo elegir? ¿Hay alguna ventaja o desventaja en utilizar la velocidad alta o la velocidad baja? (por ejemplo: ¿el consumo de energía?)

En el GPIO_OType Hay dos opciones para elegir

GPIO_OType_PP // Push pull
GPIO_OType_OD // Open drain

¿Cómo saber cuál elegir? y ¿qué es el drenaje abierto y el push pull?

En el GPIO_PuPd Hay 3 opciones para elegir

GPIO_PuPd_NOPULL // No pull
GPIO_PuPd_UP     // Pull up
GPIO_PuPd_DOWN   // Pull down

Creo que esta configuración está relacionada con el ajuste inicial del push pull.

0 votos

Relacionado: cómo forzar explícitamente el modo "open drain" en microcontroladores que no lo soportan nativamente, como AVR/Arduino, PIC, etc: electronics.stackexchange.com/a/354993/26234

56voto

bitsmack Puntos 5415
  • GPIO_PuPd (Pull-up / Pull-down)

    En los circuitos digitales, es importante que las líneas de señal no puedan "flotar". Es decir, tienen que estar siempre en un estado alto o bajo. Cuando flotan, el estado es indeterminado, y causa varios tipos de problemas.

    La forma de corregir esto es añadir una resistencia desde la línea de señal a Vcc o Gnd. De esta manera, si la línea no está siendo activamente conducida a un nivel alto o bajo, la resistencia hará que el potencial se desplace a un nivel conocido.

    Los ARM (y otros microcontroladores) tienen circuitos incorporados para hacer esto. De esta manera, no necesitas añadir otra parte a tu circuito. Si eliges "GPIO_PuPd_UP", por ejemplo, es equivalente a añadir una resistencia entre la línea de señal y Vcc.

  • GPIO_OType (Tipo de salida):

    Push-Pull: Este es el tipo de salida que la mayoría de la gente considera "estándar". Cuando la salida se pone a nivel bajo, se "tira" activamente hacia tierra. A la inversa, cuando la salida se pone en alto, es activamente "empujada" hacia Vcc. Simplificado, se ve así:

    pushpull

    Una salida Open-Drain, en cambio, sólo está activa en una dirección. Puede tirar de la clavija hacia tierra, pero no puede conducirla hacia arriba. Imagine la imagen anterior, pero sin el MOSFET superior. Cuando no tira a tierra, el MOSFET (del lado inferior) es simplemente no conductor, lo que hace que la salida flote.

    Para este tipo de salida, es necesario añadir una resistencia de pull-up al circuito, que hará que la línea se ponga en alto cuando no sea conducida a bajo. Puedes hacer esto con una parte externa, o ajustando el valor de GPIO_PuPd a GPIO_PuPd_UP.

    El nombre proviene del hecho de que el drenaje del MOSFET no está conectado internamente a nada. Este tipo de salida también se denomina "colector abierto" cuando se utiliza un BJT en lugar de un MOSFET.

  • GPIO_Speed

    Básicamente, esto controla el slew rate (el tiempo de subida y bajada) de la señal de salida. Cuanto más rápido sea el slew rate, más ruido se irradiará del circuito. Es una buena práctica mantener el slew rate lento, y sólo aumentarlo si tienes una razón específica.

1 votos

Gracias! por la gran respuesta ;), ¿te importaría explicar un poco más sobre los diferentes problemas cuando está en estado flotante?

3 votos

La idea es que la permanencia durante cualquier periodo de tiempo en una tensión de entrada intermedia puede encender parcialmente los FETs superiores e inferiores de un bloque de entrada y cortocircuitar parcialmente la fuente de alimentación a través de ellos, dando lugar a un consumo de energía excesivo o (en casos especialmente graves) potencialmente dañino.

3 votos

@Tim Además, cuando las líneas son flotantes, es muy fácil perturbar los niveles de tensión. Simplemente agitando la mano alrededor del circuito puede cambiar el estado de la entrada, debido a las interacciones capacitivas...

5voto

shash Puntos 668

La velocidad del GPIO es la máxima frecuencia que el GPIO puede producir. Los ajustes más bajos pueden ahorrar energía.

El tipo de salida es si el pin afirma altos y bajos (push pull), o si la salida enciende la puerta de un FET que está conectado al pin en el drenaje (Open drain). Esto puede ser conveniente si necesitas que cualquier pin conectado sea capaz de tirar de un bus bajo sin cortocircuitar otros pines.

Las resistencias pull up unen la salida del pin a la barra de alimentación, y las pull down la unen a través de una resistencia a tierra. Esto wiĺl, entre otras cosas, controlar el voltaje del pin incluso si el bit está en un estado de alta impedancia. Esto es importante para hacer cosas como usar un interruptor puntual para cambiar el valor de una entrada digital. Incluso con el interruptor abierto, la entrada es predecible.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X