Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2
1 Entradas y salidas digitales (GPIO)
Introducción
La figura 1 representa la idea de “entrada” y de “salida”, donde se toma siempre
como referencia al microcontrolador.
3
Puertos y pines
Las señales digitales de un microcontrolador cualquiera se organizan en puertos,
que son agrupaciones de 8, 16 o 32 pines en función del modelo de microcontrolador. En
la familia STM32, las agrupaciones son de 16 pines que se corresponden internamente a
una palabra binaria de 16 bits. En la figura 2 se puede observar un ejemplo; los puertos
se numeran con letras (A, B, C, D, ...) y los pines con un número entre 0 y el número de
líneas/bits del puerto. Sin embargo, esta notación es particular de STM y cada fabricante
puede utilizar una notación distinta. Por ejemplo, un ARM Cortex-M de la marca NXP
utilizan puertos de 32 bits y la notación es distinta.
Resulta importante mencionar aquí, que no debe confundirse el pin del puerto (línea) con
el pin del encapsulado (pata del chip). Por ejemplo, como se observa en la Figura 2, en el
Puerto B, el Pin 3 (Línea 3) corresponde al Pin 89 (Pata 89) del encapsulado.
Asignación de pines
El microcontrolador en la placa Nucleo es el STM32F446RET6 que viene en un
paquete de 64 pines LQFP64 (Low profile Quad Flat Pack). Las asignaciones de pines se
muestran en la Figura 3.
4
Figura 3: Puertos y pines en el STM32F446RET6
La placa Nucleo tiene dos conectores, cada uno de los cuales consta de dos
columnas de pines. El conector CN7 está a la izquierda en la Figura 4 y CN10 está a la
derecha (Figura 5).
CN7 y CN10 tienen 38 pines cada uno en dos columnas de 19 pines para un total
de 76 pines, de modo que todos los pines del paquete LQFP 64 se encuentran disponibles
junto con múltiples líneas de potencia, tierra y unos pocos pines sin conexión (NC).
5
Figura 5: Pines disponibles en la plataforma Nucleo64
Para los puertos de E/S, la Tabla 1 muestra los pines disponibles para la placa
Nucleo:
A continuación, veremos qué características nos ofrece cada una de las partes que
constituyen un puerto GPIO, pero antes, debemos entender con claridad algunos
conceptos fundamentales relacionados con la lógica digital.
6
Familias lógicas
Los diferentes tipos de dispositivos lógicos se clasifican en "familias", de las cuales,
las más importantes son la familia TTL y la familia CMOS. Estas familias son:
7
Niveles
La electrónica digital utiliza sistemas y circuitos en los que sólo existen dos
estados posibles. Estos estados se representan mediante dos niveles de tensión diferentes:
ALTO (HIGH) y BAJO (LOW). Si consideramos lógica directa, un alto es un uno y un
bajo es un cero. Las tensiones que se utilizan para representar los unos y ceros reciben el
nombre de niveles lógicos. Lo ideal sería que un nivel de tensión representara el nivel
ALTO y otro nivel de tensión representara el nivel BAJO.
La figura 6 ilustra el rango general de variación para los niveles bajo y alto en
distintas familias de circuitos digitales. Los valores que se muestran en la figura son:
Los valores de tensión de entrada comprendidos entre VIH y VIL no son aceptables
para un funcionamiento correcto. Una tensión dentro de este rango podría ser interpretada
tanto como nivel alto cuanto como nivel bajo en un determinado circuito. Por tanto, estos
valores no aceptables no deben emplearse nunca.
Resistencias de Pull-up/Pull-down
Las resistencias denominadas Pull up y Pull down, muy empleadas en circuitos
electrónicos digitales, no son ningún tipo de resistencia o componente electrónico
8
especial por su construcción, se trata de resistencias comunes que reciben este nombre
por su cometido dentro del circuito.
Las resistencias Pull-up/down son utilizadas en circuitos digitales para asegurar en
cualquier circunstancia un nivel lógico seguro y definido en una determinada entrada o
pin digital. Complementando lo visto anteriormente, podemos definir que, en electrónica
digital existen tres estados lógicos:
Alto (High): Representa la presencia de voltaje eléctrico, también llamado Uno
Lógico.
Bajo (Low): Representa la ausencia de voltaje eléctrico, también llamado Cero
Lógico.
Flotante (Floating): Estado de Alta Impedancia (Hi-Z). Desconectado del resto del
circuito electrónico.
El estado de Alta Impedancia se utiliza cuando deseamos inhibir determinadas
salidas digitales, por ejemplo, en Buses de Comunicación. Eléctricamente es igual que si
no estuviera conectado, por lo tanto, no interfiere el funcionamiento eléctrico del resto de
circuitos. No todos los circuitos digitales disponen en sus salidas de los tres estados, a las
salidas digitales dotadas de esta característica se les denomina tri-state.
Pero lo que en una salida digital puede ser útil, para una entrada digital es
inadmisible, ya que solo puede reconocer estados Altos y Bajos. Una entrada digital no
conectada, o en Alta Impedancia, recogerá todo el ruido eléctrico ambiental, lo que dará
lugar a errores debidos a que ese ruido será interpretado como bruscas modificaciones de
estados lógicos. Además, producirá sobreconsumos y oscilaciones eléctricas indeseadas.
Todo ello, producirá comportamientos no esperados que se manifestarán en forma de
averías aleatorias que, en ocasiones, pueden llegar a causar daños irreversibles en la
electrónica de la entrada digital.
Para resolver esta indeterminación solo deberemos conectar la entrada digital,
mediante una resistencia, a la tensión de alimentación (presencia de voltaje = estado
lógico Alto). A esta resistencia se le dará un valor suficientemente alto como para que
cuando debemos poner esa entrada en estado Bajo, pueda soportar la corriente eléctrica
que circule por ella, dada por la máxima capacidad de drenaje de la puerta de entrada del
pin.
Por lo tanto, una resistencia Pull-up no es otra cosa que una resistencia de valor
fijo, conectada entre la alimentación eléctrica y la entrada digital en la deseamos
asegurar un valor lógico Alto. Con ella, eliminamos cualquier posibilidad de
indeterminación en su estado eléctrico producida por las salidas digitales o mecánicas
(pulsadores, interruptores, etc.) a las que se conecta.
Las resistencias Pull-down tienen el mismo cometido que las Pull-up, pero en
lugar de asegurar el valor lógico Alto, aseguran el nivel lógico Bajo.
Como se puede deducir de las anteriores explicaciones, son prácticamente
obligatorias cuando se usan interruptores o pulsadores manuales conectados a entradas
digitales (ver Figura 7), pero también se utilizan cuando debemos conectar distintas
salidas tri-state a una entrada digital, o cuando un solo pin digital puede funcionar como
entrada y salida. En general, se utilizarán siempre que necesitemos garantizar un
determinado valor lógico de manera permanente o durante tránsitos rápidos de estados
lógicos donde además facilitan la descargar de las capacidades parásitas que aparecen en
el circuito
9
Figura 7: Esquema de conexión de resistencias de Pull-up y Pull-down
Cabe destacar que para evitar circuitería exterior, muchos circuitos integrados ya
disponen de resistencias Pull-up o Pull-down en su interior, y en el caso concreto de los
Microcontroladores, es muy habitual que la conexión o no de sus resistencias Pull-up o
Pull-down interiores sea configurable mediante programación.
Disparador de Schmitt
Las compuertas Schmitt Trigger son dispositivos que se utilizan para convertir
señales imperfectas, lentas o con ruido en señales digitales bien definidas, rápidas y sin
ruido. Realizan las mismas funciones lógicas de las compuertas comunes, pero poseen
ciertas características distintivas especiales.
Sus características las hacen muy útiles en numerosas aplicaciones donde se
presentan problemas con señales mal definidas, distorsionadas o ruidosas.
Las compuertas operan como compuertas comunes, pero se caracterizan por poseer
histéresis que las hace inmunes al ruido y les permite trabajar con señales digitales no
ideales. Una compuerta Schmitt-trigger entrega siempre una onda cuadrada a la salida,
sin importar la forma de onda de la señal de entrada. En la figura 8 se muestra el símbolo
y el comportamiento de una compuerta Schmitt Trigger frente a una señal con ruido.
10
4 Características principales de las GPIO.
11
Salida digital
La figura 10 representa la estructura del pin configurada como salida. La estructura
se puede gestionar de muchas maneras que se describen en el manual de referencia
correspondiente, por ejemplo, para el STM32F4x están disponibles en [STM32F4-
reference-manual]. Básicamente, el driver de salida se puede configurar en modo push-
pull u open-drain (“drenador abierto”). Ambas configuraciones nos dicen cómo se diseña
internamente el pin GPIO de uC.
12
Entrada digital
La figura 12 ilustra la estructura de un GPIO configurado en modo entrada. La
entrada se realiza mediante un buffer tipo Schmitt para filtrar las señales. Mediante las
resistencias de pull-up y pull-down se amplía el rango de posibilidades de conexión sin
necesidad de añadir más componentes externos. Además, se observan dos diodos de
protección que se encargan de proteger la lógica de entrada de sobre tensiones tanto
positivas como negativas.
Cuando el pin de E/S está programado como entrada es importante saber que:
El búfer de salida está deshabilitado
La entrada del disparador Schmitt está activada
Las resistencias de pull-up y pull-down se pueden activar o desactivar.
Los datos presentes en el pin se muestrean en el registro de datos de entrada
cada ciclo de clock del bus AHB1.
Entrada analógica
Aunque detallaremos esta sección cuando veamos el proceso de conversión
analógico-digital / digital-analógico, vale la pena aquí detallar que sucede con la
arquitectura de cada pin cuando se lo configura para trabajar como entrada o salida
analógica.
Cuando el puerto de E/S está programado como configuración analógica sabemos
que:
El búfer de salida estará deshabilitado
La entrada del disparador Schmitt está desactivada, proporcionando un
consumo cero para cada valor analógico del pin de E/S. La salida del
disparador Schmitt se fuerza a un valor constante (0).
Las resistencias débiles de pull-up y pull-down están deshabilitadas
El acceso de lectura al registro de datos de entrada obtiene el valor “0”
Los pines de E / S no serán tolerantes a 5 voltios.
13
Figura 13: Estructura interna de un pin configurado como analógico
5 Funciones alternativas
Multiplexor de pin de E/S y mapeo
Los pines de E/S del microcontrolador están conectados a periféricos/módulos
integrados a través de un multiplexor que permite que solo una función alternativa (AF)
de un periférico esté conectada a un pin de E/S a la vez. De esta manera, no puede haber
conflicto entre los periféricos que comparten el mismo pin de E/S. Cada pin de E/S tiene
un multiplexor con dieciséis entradas de función alternativas (AF0 a AF15) que se
pueden configurar a través de dos registros de 32 bits. Cada registro de 32 bits utiliza 4
bits para configurar un pin y elegir una de las 16 posibles opciones. Los 32 bits de ese
registro permiten configurar del pin del 0 al 7 y el otro registro permite configurar desde
el pin del 8 al 15.
Después de un reset todas las E/S están conectadas a la función alternativa
0 del sistema (AF0).
Las funciones alternativas de los periféricos se asignan de AF1 a AF13.
En el Cortex-M4 el FPU EVENTOUT se asigna a la AF15.
Esta estructura de configuración se muestra en la figura 14.
14
Además de esta arquitectura flexible de multiplexación de E/S, cada periférico tiene
funciones alternativas asignadas a diferentes pines de E/S para optimizar la cantidad de
periféricos disponibles en paquetes más pequeños.
Para saber qué funciones se multiplexan en cada pin GPIO, consultar a partir
de la página 46 del manual DocID027107 Rev 6.
Como se observa en la tabla 3, cada pin GPIO puede alimentar o absorber hasta
25mA. Sin embargo, se debe tener cuidado para que la corriente total que entra o sale del
chip por la suma de todos sus pines no exceda los 120mA. Exceder este valor puede
provocar un sobrecalentamiento del microcontrolador.
15
1. Garantizado por diseño.
2. Probado en producción.
Tabla 3: Valores de corriente para las E/S
7 Interrupciones externas
16
La figura 16 muestra un diagrama de External interrupt controller (EXTI) de los
microcontroladores STM32F4.
17
Figura 17: Multiplexor de los Px0 asociados a la interrupción EXTI_0
18
El problema es que los contactos dentro del interruptor no hacen contacto limpio,
sino que en realidad son ligeramente "rebotar". El rebote es bastante lento, por lo que
puede recrear la traza y el problema con bastante facilidad.
19
¿Qué función cumple el diodo? Bueno, la resistencia R2 se requiere como una ruta
de descarga para el condensador, sin ella, C1 se cortocircuitará cuando el interruptor esté
cerrado. Sin el diodo, D1, tanto R1 como R2 formarían la ruta de carga del capacitor
cuando el interruptor esté abierto. La combinación de R1 y R2 aumentaría el tiempo de
carga del condensador, ralentizando el circuito. Entonces, ¿no puedes simplemente hacer
R1 más pequeño? Prácticamente, no, porque cuando el interruptor está cerrado, R1 está
conectado a través de los rieles de suministro, por lo que un valor de resistencia
demasiado pequeño daría lugar a una corriente desperdiciada muy grande.
Calculo de los valores de resistencias
El truco consiste en seleccionar valores que aseguren que la tensión del capacitor
se mantenga por encima de Vth, el umbral en el que la puerta cambia, hasta que el
interruptor deja de rebotar. Es sorprendente la cantidad de personas abandonadas en los
bares frente al mar que escogen una constante de tiempo casi aleatoria. "Los muchachos
y yo, nosotros pensamos que se suman como 50 ms".
“Shortchanging a real analysis starts even a clean-cut engineer down the slippery
slope to the wastrel vagabond’s life.”
8.2.1 Enfoque 1
El primer enfoque usa un contador para medir el tiempo durante el cual la señal de
conmutación ha estado baja. Si la señal ha estado baja continuamente durante un tiempo
determinado, entonces se considera presionada y estable.
3 On a sample event:
4 if switch signal is high then
5 Reset the counter varaible to zero
6 Set internal switch state to released
7 else
8 Increment the counter variable to a maximum of 10
9 end if
10 if counter=10 then
11 Set internal switch state to pressed
12 end if
20
8.2.2 Enfoque 2
El segundo enfoque es similar al primero, pero utiliza un registro de desplazamiento
en lugar de un contador. El algoritmo asume un valor de registro de 8 bits sin signo, como
el que se encuentra en los microcontroladores de 8 bits.
3 On a sample event:
4 Shift the variable towards the most significant bit
5 Set the least significant bit to the current switch value
6 if shift register val=0 then
7 Set internal switch state to pressed
8 else
9 Set internal switch state to released
10 end if
9 Bibliografía
21