Red de conocimiento informático - Aprendizaje de programación - Modo de puerto IO

Modo de puerto IO

Recientemente, cuando estaba mirando la hoja de datos, descubrí que el GPIO en Cortex-M3 tiene hasta 8 tipos de configuración:

(1) entrada analógica GPIO_Mode_AIN

(2) Entrada flotante GPIO_Mode_IN_FLOATING

(3) Entrada desplegable GPIO_Mode _IPD

(4) Entrada desplegable GPIO_Mode_IPU

( 5) GPIO_Mode_Out_OD salida drenaje abierto

(6) salida push-pull GPIO_Mode_Out_PP

(7) salida GPIO_Mode_AF_OD multiplexada drenaje abierto

(8) GPIO_Mode_AF_PP salida multiplexada -salida pull

Para los novatos, creo que estos conceptos deben ser muy claros. Los tres tipos con los que suelo entrar en contacto son la salida push-pull, la salida de drenaje abierto y la entrada pull-up. , pero nunca los he resumido. Por lo tanto, aquí hay un resumen:

Salida push-pull: puede generar niveles altos y bajos y conectarse a dispositivos digitales; la estructura push-pull generalmente significa que dos transistores siempre están controlados por dos señales complementarias. un transistor está encendido mientras el otro está apagado. Los niveles altos y bajos están determinados por la fuente de alimentación del IC.

Un circuito push-pull coloca dos transistores o MOSFET con los mismos parámetros en un circuito de forma push-pull. Cada uno es responsable de la tarea de amplificación de las formas de onda de medio ciclo positivo y negativo. El circuito está funcionando, las dos potencias simétricas solo se enciende un tubo de interruptor a la vez, por lo que la pérdida de conducción es pequeña y la eficiencia es alta. La salida puede inyectar corriente en la carga o extraer corriente de la carga. La etapa de salida push-pull no solo aumenta la capacidad de carga del circuito, sino que también aumenta la velocidad de conmutación.

Comprensión detallada:

Como se muestra en la figura, la etapa de salida de un amplificador push-pull tiene dos "brazos" (dos conjuntos de componentes amplificadores La corriente de uno "). "brazo" aumenta, la corriente en el otro "brazo" disminuye. La corriente del "otro" brazo" disminuye y los dos estados cambian a su vez. Para la carga, parece que un "brazo" empuja y el otro "brazo" tira, tratando de completar la tarea de salida actual. Cuando la salida Cuando es de nivel alto, es decir, la puerta de carga de bajo nivel ingresa un nivel alto, la corriente de salida será extraída de la fuente de alimentación actual por la puerta de bajo nivel a través de VT3. alto y bajo, VT3 hasta el final y VT5 hasta el final alternarán el funcionamiento, reduciendo así el consumo de energía y mejorando la tolerancia de cada tubo. Y debido a que la resistencia del tubo es muy pequeña sin importar en qué dirección esté. La constante RC es muy pequeña y el nivel de velocidad de transición es muy rápido, lo que puede aumentar la capacidad de carga del circuito y aumentar la velocidad de conmutación.

Salida de drenaje abierto: la salida es equivalente al colector del. transistor y se requiere una resistencia pull-up para obtener un controlador de alto nivel, su capacidad para absorber corriente es relativamente fuerte (generalmente dentro de 20 mA)

El circuito de drenaje abierto tiene las siguientes características:

1. Utilice la capacidad de conducción del circuito externo para reducir la conducción interna del circuito integrado. Cuando se enciende el MOSFET dentro del circuito integrado, la corriente de conducción se extrae del VCC externo y. el MOSFET a GND

2. En términos generales, el drenaje abierto se usa para conectar dispositivos de diferentes niveles, igualar el nivel, porque el pin de drenaje abierto no está conectado a una resistencia pull-up externa y solo puede. Salida de nivel bajo. Si necesita tener la función de salida de nivel alto al mismo tiempo, necesita conectar una resistencia pull-up. De esta manera, la ventaja es que al cambiar el voltaje de suministro pull-up, el nivel de transmisión puede ser. Por ejemplo, al agregar una resistencia pull-up, se puede proporcionar una salida de nivel TTL/CMOS (el valor de la resistencia pull-up determina la velocidad de conversión del nivel lógico. Cuanto mayor sea el valor de la resistencia, menor será la velocidad). y menor será el consumo de energía, por lo que se debe considerar el consumo de energía y la velocidad al seleccionar la resistencia de carga).

3. OPEN-DRAIN proporciona un método de salida flexible, pero también tiene una debilidad, que es el retraso del flanco ascendente. Debido a que el flanco ascendente carga la carga a través de una resistencia pasiva pull-up externa, cuando se selecciona esta resistencia, el retraso es pequeño, pero el consumo de energía es grande; por el contrario, cuando el retraso es grande, el consumo de energía es pequeño; Por lo tanto, si existen requisitos de retraso, se recomienda utilizar salida de flanco descendente.

4. Se pueden conectar múltiples salidas de drenaje abierto a una línea. A través de una resistencia pull-up, se forma una relación "lógica Y" sin agregar ningún dispositivo. Este es también el principio para que autobuses como I2C y SMBus determinen el estado de ocupación del autobús. Suplementario ¿Qué es la "suma de líneas"?

En un empalme (cable), conecte una resistencia pull-up a la fuente de alimentación VCC o VDD y al colector C o drenaje D de n transistores NPN o NMOS, y al emisor E o fuente de estos transistores Ambos S están conectados a tierra, y cada vez que uno de los transistores se satura, la unión (cable) se lleva al nivel de tierra. Porque cuando la base de estos transistores inyecta corriente (NPN) o la puerta agrega un nivel alto (NMOS), el transistor se saturará, por lo que la relación entre los nodos (líneas) en estas bases o puertas es o no lógica NOR. Si al nodo le sigue un inversor, es lógica O.

De hecho, puede entenderse simplemente como: cuando todos los pines están conectados entre sí, se conecta una resistencia pull-up externa. Si un pin genera un 0 lógico, es equivalente a conexión a tierra. El circuito paralelo es equivalente a "cortocircuitado" por un cable, por lo que el nivel lógico del circuito externo será 0 y el resultado será consistente con el 1 lógico solo si ambos son altos.

Con respecto a la salida push-pull y la salida de drenaje abierto, finalmente use el gráfico más simple para resumir:

El lado izquierdo de la figura es el modo de salida push-pull, en el que el el comparador genera un nivel alto, el transistor PNP está apagado, mientras que el transistor NPN superior está encendido, y el nivel de salida es VS cuando el comparador genera un nivel bajo, por el contrario, el transistor PNP está encendido y el nivel de salida es VS. La salida es un nivel bajo conectado a tierra. El lado derecho puede entenderse como una forma de salida de drenaje abierto y debe conectarse a un pull-up.

Entrada flotante: nunca hemos podido encontrar una explicación muy autorizada para la entrada flotante, por lo que tenemos que entenderla a partir de la siguiente imagen.

Dado que la entrada flotante se usa generalmente para externos entrada clave, combinada con Para la parte de entrada del circuito en la imagen, tengo entendido que cuando el estado del nivel de la entrada flotante es incierto, el estado del IO está completamente determinado por la entrada externa si el pin se deja flotante. , el nivel del puerto es incierto. Leer. El nivel del puerto no está definido.

Entrada pull-up/entrada desplegable/entrada analógica: Estos conceptos son muy fáciles de entender y se pueden leer literalmente.

Salida de drenaje abierto multiplexada, salida push-pull multiplexada: cuando el puerto GPIO se utiliza como función secundaria (es decir, no se utiliza como puerto I de uso general), se pueden interpretar como la configuración. del puerto GPIO,

Finalmente, resuma el uso:

Seleccione el modo IO en STM32

(1) Entrada flotante_IN_FLOATING - Entrada flotante, la identificación de CLAVE puede realizarse, RX1

(2) Con entrada pull-up _IPU -- Entrada de resistencia pull-up interna IO

(3) Con entrada pull-down _IPD- -- IO interna entrada de resistencia desplegable

(4) Entrada analógica_AIN: aplique entrada analógica ADC o ahorre energía en condiciones de bajo consumo de energía

(5) Drenaje abierto output_OUT_OD - - Salida IO 0 está conectado a GND, la salida IO 1 está flotante y requiere una resistencia pull-up externa para generar un nivel alto.

Cuando la salida es 1, la resistencia pull-up eleva el estado del puerto IO, pero como es un modo de salida de drenaje abierto, el puerto IO también se puede cambiar a un nivel bajo o permanecer sin cambios a través de un circuito externo. . Puede realizar la función bidireccional IO de C51 leyendo los cambios en el nivel de entrada IO

(6) Push-pull output_OUT_PP: la salida IO 0 está conectada a GND, la salida IO 1 está conectada a VCC, lea Desconocido valor de entrada

(7) Salida push-pull multiplexada_AF_PP - funciones periféricas en chip (I2C SCL, SDA)

(8) Función de multiplexación en drenaje salida_AF_OD - función periférica en chip (TX1, MOSI, MISO.SCK.

Ejemplo de configuración de STM32:

(1) I2C analógico usando salida de drenaje abierto _OUT_OD, conecte Tire de la resistencia a las salidas 0 y 1 correctamente; lea GPIO_SetBits(GPIOB, GPIO_Pin_0) primero; tire hacia arriba y luego podrá leer el valor de IO; use GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0); el valor predeterminado es alto; si necesita leer el valor de IO, puede usar la entrada pull-up _IPU y la entrada de punto flotante _IN_FLOATING y la salida de drenaje abierto _OUT_OD

Use a Generalmente hay cinco formas; para funcionar con pines, y sus configuraciones son las siguientes:

1) Como entrada GPIO normal: configure el pin como entrada flotante, entrada pull-up débil o entrada pull-down débil según sea necesario, y haga not Habilita todos los bloques de funciones de multiplexación correspondientes a este pin.

2) Como salida GPIO normal: configure el pin como salida push-pull o de drenaje abierto según sea necesario, y no habilite todos los módulos de función de multiplexación correspondientes al pin.

3) Como entrada analógica normal: Configure el pin como modo de entrada analógica y deshabilite todos los módulos de función de multiplexación correspondientes al pin.

4) Como entrada a un periférico incorporado: configure el pin como entrada flotante, entrada pull-up débil o entrada pull-down débil según sea necesario, y habilite un módulo de función de multiplexación correspondiente al alfiler .

5) Como salida de un periférico incorporado: configure el pin como una salida push-pull multiplexada o una salida de drenaje abierto multiplexada según sea necesario, y habilite todas las salidas multiplexadas correspondientes a la función de uso del pin. módulos.

Tenga en cuenta que si el mismo pin corresponde a varios módulos mux, solo uno de los módulos estará habilitado y los demás módulos permanecerán no habilitados.

Por ejemplo, para usar la funcionalidad USART3 en los pines 47 y 48 del STM32F1 03VBT6, debe configurar el pin 47 como una salida push-pull multiplexada o de drenaje abierto multiplexada y configurar el pin 48 está configurado. como modo de entrada, habilitando USART3 y dejando inactivo I2C2.

Si desea utilizar el pin 47 de STM32F103VBT6 como TIM2_CH3, debe reasignar TIM2 y luego configurar el pin correspondiente de manera funcional multiplexada.

============================================ =============================================

I. Configuración del modo GPIO

1. Modo de entrada/salida (consulte el manual stm32)

2.Modo de salida GPIO, la diferencia entre varias velocidades:

(1).Velocidad del pin GPIO: GPIO_Speed_2MHz (10MHz, 50MHz);

También conocida como velocidad de respuesta del circuito controlador de salida: (El chip organiza internamente múltiples circuitos controladores de salida de velocidad de respuesta diferentes para lograr módulo de control óptimo de ruido y consumo de energía reducido).

Puede entenderse como: el ancho de banda del circuito excitador de salida: la frecuencia máxima a la que el circuito excitador puede transmitir una señal sin distorsión.

(Si la frecuencia de la señal excede la velocidad de respuesta del circuito de conducción, la señal puede distorsionarse. ¿Coeficiente de distorsión?)

Si la frecuencia de la señal es de 10 MHz y el ancho de banda configura es 2MHz, entonces la onda cuadrada de 10MHz puede convertirse en una onda sinusoidal. Esto es como la velocidad de diseño de una carretera. El automóvil puede conducir suavemente por debajo de la velocidad de diseño, pero si excede la velocidad de diseño, el automóvil se sacudirá o incluso volcará.

La clave es: hacer coincidir la velocidad del pin GPIO con la aplicación. Cuanto mayor sea la configuración de velocidad, mayor será el ruido y mayor será el consumo de energía.

Las unidades con altas velocidades de ancho de banda consumen mucha energía y hacen mucho ruido, mientras que las unidades con bajo ancho de banda consumen poca energía y hacen mucho ruido. El uso de un controlador adecuado puede reducir el consumo de energía y el ruido.

Por ejemplo: un circuito de controlador con una frecuencia alta también tendrá mucho ruido. Cuando no necesite una frecuencia de salida alta, elija un controlador de baja frecuencia. Circuito, que es muy útil para mejorar el rendimiento EMI del sistema. Por supuesto, si desea emitir una señal de frecuencia más alta pero elige un módulo controlador de frecuencia más baja, es probable que obtenga una señal de salida distorsionada. La clave es que la velocidad del pin del GPIO debe coincidir con la aplicación (¿se recomienda que sea más de 10 veces?

Por ejemplo:

① Puerto serie USART, si es el máximo). La velocidad en baudios es de solo 115,2 k, entonces es suficiente usar una velocidad de 2 M, lo que puede ahorrar consumo de energía y ruido.

② Interfaz I2C, si usas una velocidad de baudios de 400k, si quieres dejar más margen, puedes elegir una velocidad de pin GPIO de 10M.

③ Interfaz SPI, si usa una velocidad de baudios de 18 M o 9 M, debe seleccionar una velocidad de pin GPIO de 50 M.

(2).La velocidad de disparo GPIO se refiere a la velocidad a la que los valores 0 y 1 del registro de entrada/salida se reflejan en los niveles alto y bajo del pin externo (APB2). El manual indica que la velocidad máxima del flip-flop GPIO es de hasta 18MHz.

@El tiempo de disparo observado con un osciloscopio a través de una prueba de programa simple: es el tiempo integral, incluido el tiempo para obtener la instrucción, el tiempo para ejecutar la instrucción y el tiempo para transmitir la señal a el registro después de ejecutar la instrucción (posiblemente después de muchos enlaces, como AHB, APB, arbitraje de bus, etc.) y el tiempo que tarda la señal final en transmitirse desde el registro al pin.

Por ejemplo, si hay una resistencia pull-up, cuanto mayor sea su resistencia, mayor será el retardo RC, es decir, cuanto más lenta sea la transición del nivel lógico, mayor será el consumo de energía.

(3).Velocidad de salida GPIO: Está relacionada con el programa (el tiempo que tarda en emitir una señal está escrito en el programa).

2. Cuando el puerto GPIO se configura como entrada, el circuito de control de salida se desconecta del puerto, por lo que la configuración de la velocidad de salida no tiene sentido.

3. Durante y después del reinicio, la función de multiplexación no está habilitada y los puertos de E/S se configuran en modo de entrada flotante.

4. Todos los puertos tienen función de interrupción externa.

Para utilizar la línea de interrupción externa, el puerto debe configurarse en modo de entrada.

5. El puerto GPIO está configurado con una función de bloqueo. Cuando se configura un puerto GPIO, la combinación de configuración se puede bloquear mediante programación hasta el próximo reinicio y desbloqueo del chip.

Aplicaciones generales:

Analog_Input_AIN: aplica entrada analógica ADC o ahorra energía en situaciones de bajo consumo.

Entrada flotante_IN_FLOATING - Identificación de CLAVE posible, RX1

Salida de drenaje abierto_Out_OD - aplicada al bus I2C (si no hay una resistencia pull-up externa conectada, drenaje abierto STM32 La salida puede; solo salida 0)

Aplicación general:

Aplicación general:

Entrada analógica_AIN: aplica entrada analógica ADC o, en situaciones de bajo consumo de energía, ahorra energía. (Si no hay una resistencia pull-up externa conectada, la salida de drenaje abierto STM32 solo puede generar 0)

II. Multiplexación y reasignación de pines

1. Multiplexación: pines de en periféricos Pines y puertos de E/S**** (diferentes funciones corresponden a los mismos pines)

Todos los pines externos de los periféricos integrados STM32 están multiplexados con pines GPIO estándar. Otros módulos aún no están habilitados.

2. Función de reasignación: la salida del pin de la función de multiplexación se puede reasignar desde diferentes pines de E/S, es decir, la salida del pin de la función de multiplexación se puede cambiar a otra mediante la programación Pin.

Ventaja directa: si es necesario, los diseñadores de placas de PCB no tienen que envolver ciertas señales en la placa de circuito en un círculo grande para completar la conexión. Esto no solo facilita el diseño de PCB, sino que también puede reducir la interferencia de la señal. interferencia cruzada.

Por ejemplo, USART1: 0: Sin nueva imagen (TX/PA9, RX/PA10); 1: Nueva imagen (TX/PB6, RX/PB7).

(Ver la introducción del registro AFIO_MAPR) [0, 1 es el valor de bit de un registro]

Tenga en cuenta que los siguientes pines de función multiplexados tienen funciones de reasignación:

Ejemplo: Para STM32F103VBT6, el pin 47 es PB10, y sus funciones alternativas son I2C2_SCL y USART3_TX, lo que significa que su función predeterminada después del encendido es PB10, SCL de I2C2 y TX de USART3 son sus funciones alternativas además, después de TIM2; se reasigna, TIM2_CH3 también se convierte en la función alternativa de este pin.

(1) Para utilizar la función USART3 en los pines 47 y 48 de STM32F103VBT6, el pin 47 debe configurarse como una salida push-pull multiplexada o una salida de drenaje abierto multiplexada, y el pin 48 es configurado como modo de entrada, habilitando USART3 y dejando I2C2 inactivo.

(2) Para usar el pin 47 de STM32F103VBT6 como TIM2_CH3, debe reasignar TIM2 y luego configurar el pin correspondiente de manera multiplexada.

============================================ ========================================

Cambia rápidamente las entradas y salida