STM32 Descripción de la configuración de GPIO

29

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 puedo saber de qué velocidad debo elegir? ¿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 el empuje?

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.

    
pregunta Tim

2 respuestas

35
  • GPIO_PuPd (Pull-up / Pull-down)

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

    La forma de corregir esto es agregar una resistencia de la línea de señal a Vcc o Gnd. De esa manera, si la línea no se impulsa de forma activa alta o baja, la resistencia hará que el potencial se desvíe 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, se "arrastra" activamente a tierra. Por el contrario, cuando la salida se establece en alta, se "empuja" activamente hacia Vcc. Simplificado, se ve así:

    Porotrolado,unasalidadedrenajeabiertosoloestáactivaenunadirección.Puedetirardelpasadorhaciaelsuelo,peronopuedeelevarlo.Imaginalaimagenanterior,perosinelMOSFETsuperior.Cuandonoestátirandoatierra,elMOSFETsimplementenoesconductor,loquehacequelasalidaflote:

    Para este tipo de salida, es necesario que se agregue una resistencia de pull-up al circuito, lo que hará que la línea se eleve cuando no esté bajo. Puede hacer esto con una parte externa, o configurando el valor de 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 usa un BJT en lugar de un MOSFET.

  • GPIO_Speed

    Básicamente, esto controla la velocidad de giro (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 giro, más ruido se irradia desde el circuito. Es una buena práctica mantener la velocidad de respuesta lenta y solo aumentarla si tiene una razón específica.

respondido por el bitsmack
4

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

El tipo de salida es si el pin establece máximos y mínimos (push pull), o si la salida enciende la compuerta de un FET que está unido al pin en el drenaje (drenaje abierto). Esto puede ser conveniente si necesita un pin adjunto para poder bajar el bus sin faltar en otros pines.

Las resistencias de tracción conectan la salida del pasador al riel de alimentación, y la tensión hacia abajo la conecta mediante una resistencia a tierra. Esto, entre otras cosas, controlará la tensión 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.

    
respondido por el Scott Seidman

Lea otras preguntas en las etiquetas