En la biblioteca de periféricos estándar STM32, necesitamos configurar el GPIO.
Pero hay 3 funciones que no estoy seguro de cómo configurarlas;
- GPIO_InitStructure.GPIO_Speed
- GPIO_InitStructure.GPIO_OType
- GPIO_InitStructure.GPIO_PuPd
En GPIO_Speed , hay 4 configuraciones para elegir
GPIO_Speed_2MHz /*!< Low speed */
GPIO_Speed_25MHz /*!< Medium speed */
GPIO_Speed_50MHz /*!< Fast speed */
GPIO_Speed_100MHz
¿Cómo sé de qué velocidad elijo? ¿Hay alguna ventaja o desventaja al usar alta velocidad o baja velocidad? (por ejemplo: consumo de energía?)
En GPIO_OType , hay 2 configuraciones 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 push pull?
En GPIO_PuPd , hay 3 configuraciones 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 la configuración inicial de push pull.
Respuestas:
GPIO_PuPd (Pull-up / Pull-down)
En los circuitos digitales, es importante que nunca se permita que las líneas de señal "floten". Es decir, siempre deben estar en un estado alto o bajo. Cuando flota, el estado es indeterminado y causa algunos tipos diferentes de problemas.
La forma de corregir esto es agregar una resistencia desde la línea de señal a Vcc o Gnd. De esa manera, si la línea no se conduce activamente hacia arriba o hacia abajo, la resistencia hará que el potencial se desplace a un nivel conocido.
El ARM (y otros microcontroladores) tienen circuitos integrados para hacer esto. De esa manera, no necesita agregar otra parte a su circuito. Si elige "GPIO_PuPd_UP", por ejemplo, es equivalente a agregar 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 baja, es activamente "tirada" a tierra. Por el contrario, cuando la salida se establece en alta, se "empuja" activamente hacia Vcc. Simplificado, se ve así:
Una salida de drenaje abierto, por otro lado, solo está activa en una dirección. Puede tirar del pasador hacia el suelo, pero no puede conducirlo alto. Imagine la imagen anterior, pero sin el MOSFET superior. Cuando no está tirando a tierra, el MOSFET simplemente no es conductor, lo que hace que la salida flote:
Para este tipo de salida, debe haber una resistencia pull-up agregada al circuito, lo que provocará que la línea suba cuando no se maneje bajo. Puede hacer esto con una parte externa, o estableciendo el valor GPIO_PuPd en 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 la velocidad de respuesta (el tiempo de subida y el tiempo de caída) de la señal de salida. Cuanto más rápida sea la velocidad de respuesta, más ruido se irradia desde el circuito. Es una buena práctica mantener la velocidad de rotación lenta y solo aumentarla si tiene una razón específica.
fuente
GPIO Speed es la frecuencia máxima que GPIO puede producir. Una configuración más baja puede ahorrar energía.
El tipo de salida es si el pasador establece altos y bajos (push pull), o si la salida enciende la puerta de un FET que está unido al pasador en el drenaje (drenaje abierto). Esto puede ser conveniente si necesita cualquier pin conectado para poder tirar de un bus bajo sin cortocircuito en otros pines.
Las resistencias hacia arriba conectan la salida del pin al riel de alimentación y hacia abajo la conecta a tierra a través de una resistencia. Esto, 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 de punto para cambiar un valor de entrada digital. Incluso con el interruptor abierto, la entrada es predecible.
fuente