Programando microcontrolador ARM: 6 - Estructura física GPIO y conectar LED para el blink (stm32f103c8)

Esta vez vamos a ver que posibilidades nos dan los pines GPIO y vamos a ver como conectar el LED de los tutoriales anteriores.

Empezando por el principio, vamos a estudiar como están construidos internamente los pines GPIO, centrándonos en el output.
Una salida nos proporciona tres diferentes modos:
  • Push-pull
  • Open-drain
  • Desconectado



Como nos interesa el modo de Output nos vamos a centrar en esa parte exclusivamente

Push-pull


Si por software ponemos en HIGH (1) el output, obtendremos el siguiente esquema.

El N-MOS no conduce y el P-MOS si conduce.

Esto quiere decir que a la salida de nuestro pin vamos a encontrar la tensión VDD que equivaldría a un 1.



Si por sofware ponemos en LOW (0) el output, obtendremos el siguiente esquema.

El N-MOS ahora si conduce y por otro lado el P-MOS no conduce.

Esto quiere decir que a la salida de nuestro pin vamos a encontrar la tensión VSS, que equivale a un 0 lógico, que corresponde a la masa del micro, 0V.

Open-drain

Cuando usamos el modo Open-drain el transistor superior (P-MOS), se desactiva y ya no interviene el circuito, independientemente de la entrada.

En este caso, al poner nuestra salida en LOW, o a 0.

Podemos ver que igual que en el caso anterior, el transistor N-MOS conduce y por lo tanto nuestro pin queda conectado a VSS, que equivale al un 0 lógico o a 0V



Este es el caso mas especial. Cuando nosotros ponemos en HIGH o a 1 lógico, el transistor N-MOS ahora no conduce.

Esto provoca que nuestro pin quede desconectado y se dice que queda una linea de alta impedancia.

Es útil cuando queremos, por algún motivo, desconectar completamente la parte del circuito unida a nuestro pin de salida. De esta manera el pin ni el circuito interno del GPIO intervienen en esa porción de circuito.

De todos estos el que nos conviene usar ahora mismo, para hacer parpadear nuestro LED es el push-pull. Este modo suele ser el mas general y el más usado.

Por lo tanto por software pondremos el modo push-pull y pondremos el output en 0 o 1 en función de si deseamos en encender o apagar el LED.

De nuevo, nuestro mejor aliado es el datasheet del microcontrolador que nos ofrece el fabricante. 

En esta tabla el fabricante nos indica la tensión de salida en los pines. En mi caso mi VDD es 2.95V,  medido con un multimetro. Por tanto estoy en la zona subrayada. Por lo tanto mi pin de salida tendrá 2.95 - 1.3 = 1.65V a la salida de un pin GPIO.

Este dato es muy importante porque va a determinar como necesitamos realizar las conexiones de nuestros GPIO.


Pin tenemos dos opciones.

La primera (primer recuadro) conectar el LED directamente al pin en HIGH, el cual nos va a proporcionar 1.6V. Como ver, en este caso no es suficiente para encender nuestro LED ya que solo van a circular aproximadamente 180uA.

La segunda (segundo recuadro) tenemos la opción de conectar nuestro pin directamente a una fuente de tensión externa o al VDD. De este modo, cuando nuestro pin este en LOW, estará conectado a tierra y por lo tanto cerrara el circuito, de esta manera circularan 15mA por nuestro LED, mas que suficiente para encenderlo

Por lo tanto vamos a usar la segunda forma para encender nuestro LED.

Cuando nuestro pin esté en LOW y por tanto conectado a tierra, cerrara el circuito y el LEDlucirá. Por otro lado cuando esté el pin en HIGH, el LED se conectará inversamente polarizado y no lucirá, el propio LED interrumpe el circuito y no luce.

El pin que viene integrado en nuestra placa (Blue Pill) está conectado como el segundo caso.

Resumiendo:
LOW  -> LED ON
HIGH -> LED OFF

Por tanto, cuando nosotros por código ponemos, GPIOC -> BSRR |= GPIO_BSRR_BR13;, estamos poniendo nuestro pin en LOW y por tanto encendiendo el LED.

Por otro lado cuando ponemos GPIOC -> BSRR |= GPIO_BSRR_BS13;, estamos poniendo nuestro pin en HIGH y por tanto apagando el LED.


Estos datos nos va a ser muy útiles para poder configurar nuestros pines GPIO en un futuro.

Comentarios

Entradas populares de este blog

ARDUINO desde cero: 5 - Comunicación Serial

Evolucionando talado de columna: 1 - Guía laser, planificación y diseño