Tutorial 6. Interrupciones Externas en Microcontrolador de la serie STM32F4.

Bienvenido al tutorial 6 de Ophyra  donde utilizaremos una de las muchas interrupciones que tiene este Microcontrolador, Interrupciones Externas. Cabe mencionar que al tener un ARM algunos de los Microcontroladores cuentan con un bloque llamado NVIC (leer el recurso técnico interrupciones en Microcontroladores de la serie STM32F407). El objetivo de este tutorial es utilizar el push button (conectado al pin C2) para cambiando el estado del Led RGB cuando se detecte un cambio de alto a bajo por este pin.

Configurar Hardware usando STM32CubeMX.

Creamos un nuevo proyecto dentro de STM32CubeMX dando un click sobre el menú “New Project” para seleccionar el Microcontrolador de Ophyra (STM32F407VG) como se observa en la imagen 1.

Imagen 1. Selección del Microcontrolador.

Una vez creado el proyecto indicamos que el pin C2 un GPIO_EXT12 como se muestra en la siguiente figura.

Imagen 2. Selección de GPIO.

Buscamos el pin E2 el cual esta mapeado al Led RGB. Este pin controla el color azul de este LED, accionamos sobre el para configurarlo como salida.

Imagen 3. GPIO como salida.

Pasaremos a la pestaña de configuración (Configuration) en donde proporcionaremos configuración complementaria para los recursos que hemos seleccionado, ver Imagen 4.

Imagen 4. Configuraciones de recursos

Configuraremos nuestro pin de salida como se hizo en el tutorial 1: Puertos de entrada/salida de propósito general (GPIO), ver imagen 5.

Imagen 5. Configuración del GPIO E2.

Para el GPIO C2 tenemos las siguientes configuraciones.

Imagen 6. Configuración del GPIO C2.

Dentro de la primera opción podemos seleccionar la forma en que deseamos que el Microcontrolador entrara a las interrupciones como flanco de subida, flanco de bajada o ambos. La diferencia entre una interrupción Externa y una interrupción por evento es básicamente que el evento puede ser generado por una bandera sobre algún recurso mientras que la interrupción externa es detectada por el GPIO seleccionado.

Para este tutorial soleccionamos la opción External Inteerrupt Mode with Falling edge trigger detection ya que nuestro push button esta conectado en forma de Pull-Up, es decir, el estado en el que se encuentra es algo al presionarlo cambia a bajo por lo que este cambio es el deseado a detectar.

Imagen 7. Configuración del GPIO C2.

Como ya hemos indicamos que únicamente utilizaremos GPIOs dentro de este tutorial no tenemos ninguna otra configuración en Control, Analog, Security, Connectivity o Multimedia pero como en los demás tutoriales, dentro de la capa de System tenemos un botón llamado NVIC (Nested Vectored Interrupt Controller) que es el que se encarga de monitorear todas las interrupciones del Microcontrolador. Accionando sobre el se muestra una ventana como la siguiente.

Imagen 8. Configuración del NVIC.

Dentro de esta ventana tenemos opciones ya habilitadas por el software STM32CubeMx que además, no pueden ser modificadas debido a que es configuración propia del Microcontrolador. Dentro de las interrupciones a seleccionar tenemos:

  • PVD interrupt through EXTI line 16: interrupciones a través de las linea 16
  • Flash global interrupt: Interrupciones por acceso en la escritura a la memoria Flash
  • RCC global interrupt: Interrupciones por cristal externo
  • EXTI line2 interrupt: Interrupciones de la linea 2
  • FPU global interrupt: Interrupciones del Microcontrolador.

Las interrupciones ocasionadas por la linea dos han sido agregadas automaticamente por STM32CubeMx ya que el GPIO ha sido seleccionado como EXT12, sino se selecciona este modo para cualquier GPIO esta opción no se mostrará al accionar sobre el botón NVIC. Es importante tener en cuenta que a pesar de que Ophyra cuanta con sus pines de expansión CN1 y CN2 no es posible conectar dos pines a la misma linea para generar interrupciones, es decir, si se han activado las interrupciones de la linea dos con el GPIO C2 ya no es posible utilizar específicamente ese pin para interrupciones externas como GPIO E2, A2, B2, C2, etc.

Accionamos sobre las interrupciones de la linea 2 como se muestra en la siguiente imagen.

Imagen 9. Activación de interrupciones externas.

Al final de esta ventana tenemos las opciones para poder poner la prioridad a dichas interrupciones. Esto se hace cuando tenemos multiples datos a enviar y recibir y se requiere que un dato sea procesado primero. Por el momento únicamente se activan dichas interrupciones.

Accionamos sobre el botón Ok de la ventana. Estamos listos para generar el proyecto al IDE de Atollic, para ello basta con accionar sobre el icono en forma de engrane que se encuentra debajo de la barra de menú e indicaremos el nombre del proyecto, su ubicación y el IDE que utilizaremos para generar nuestro código como se muestra en las imágenes 8 y 9.

Imagen 10. Generación de código.

Imagen 11. Configuración para generar proyecto.

Realizar programa en Atollic TrueSTUDIO.

Una vez que se ha compilado el proyecto y hemos abierto AtollicTrueSTUDIO nos dirigimos a la carpeta Src y al archivo main.c

Imagen 12. Archivo main.c

Accionando dos veces sobre el se muestra el código junto con la función main, que es la función o método principal a ejecutar por el Microcontrolador.

Imagen 13. Método Main.

Ya que la función MX_GPIO_Init(); que se encuentra dentro de esta función inicializa los GPIO que hemos seleccionado previamente, no tenemos que hacer algo más para trabajar con ellos lo que nos permite entrar directamente a la función de interrupciones para tomar una acción al ser llamada esta función.

Accionamos dos veces sobre el archivo stm32f4xx_it.c en donde podemos encontrar aproximadamente en la línea 189 las interrupciones externas.

Imagen 14. Interrupciones externas.

Cada vez que presionemos el pulsador que se encuentra en el GPIO C2 el Microcontrolador entrará a este método. Es aquí donde se coloca el cambio de estado en nuestro Led RGB.

Imagen 15. Cambio de estado sobre el LED RGB.

Ya hemos configurado e indicado la acción que haremos cada vez que entramos a la función de interrupción generada por el Timer 3. Por último resta compilar nuestro proyecto para que genere el archivo con la extensión HEX que será cargada a nuestra tarjeta Ophyra, para ello nos dirigimos al icono con un martillo o dentro del menú PROJECT → BUILD PROJECT, ver imagen 16.

Imagen 16. Compilación del proyecto

Cargar programa a nuestra tarjeta de Desarrollo Ophyra.

El último paso es programar tu tarjeta Ophyra. Si nunca lo has hecho, sigue esta GUÍA.

Conclusiones.

Hemos configurado y programado en Ophyra para el control de un GPIO, en este caso el GPIO E2 que se encuentra al LED RGB.

Te sugerimos hacer ejercicios como la conexión de una señal cuadrada hacia otro GPIO para incrementar un contador para el control de luz de un foco o el envío de datos por serial al presionar el pulsador C2.

Si tienes alguna consulta o duda sobre este tutorial o referente a cualquier otro tema de Ophyra, contactanos a nuestro Foro.

Menú