2.3 Aplicación final

Diseñe una aplicación que controle un contador de 3 bits (b2b1b0) según el esquema siguiente:

  • Pulsación corta: incrementa en una unidad el contador, pasando a 0 al llegar a 7

  • Pulsación larga: inicializa (pone a 0) el contador.

El valor actual del contador se mostrará en el led RGB, según la tabla siguiente:

Colores por contador

contador

color

0

apagado

1

blanco

2

magenta

3

cyan

4

amarillo

5

verde

6

azul

7

rojo

Para controlar el led RGB, utilice las funciones definidas en el módulo FM4_leds_sw disponible en el directorio bsp.

Ejercicio 2: Aplicación final
  1. Preparación del entorno.

  • Abre el proyecto lab2 en el entorno de desarrollo Keil.

  • Selecciona el target lab2.1.

  1. Código de la aplicación.

  • Completa el código lab2.1.c. Debe implementar la lógica para el contador de 3 bits (b2b1b0) según el esquema descrito.

  • Utiliza las funciones del módulo FM4_leds_sw para mostrar el valor del contador en el led RGB.

  • La figura siguiente ilustra la arquitectura software de la aplicación. En el bucle principal se ejecutan:

    • Las tareas de control del contador y de los LEDs, con un periodo de 1 ms.

    • La tarea de gestión del LED LED_ETH, que aplica el efecto breathing y se ejecutaen cada iteración del bucle.

    Esta programación temporal de las tareas permite ejecutar en paralelo las funciones de control del contador y la gestión del LED LED_ETH.

    fig2.1
    /**
      * @file lab2.1.c
      * @brief Práctica de gestión de pulsaciones y control de LEDs en FM4.
      * @details
      *   - Detecta pulsaciones cortas y largas en SW2.
      *   - Controla el LED RGB y el LED_ETH con efecto "breathing".
      *   - Utiliza periféricos GPIO y SysTick.
      * @author [Tu Nombre]
      * @date 2025/09/17
      */
    
      /**
      * @brief Programa principal.
      * @details
      *   - Inicializa periféricos (GPIO, SysTick, LEDs).
      *   - Ejecuta un bucle cíclico que:
      *       - Detecta pulsaciones en SW2.
      *       - Cambia el color del LED RGB según pulsaciones.
      *       - Aplica efecto "breathing" al LED_ETH.
      * @return No retorna (bucle infinito).
      */
      int main(void)
      {
          // Configuración de periféricos:
          //  - Config GPIO para utilizar leds y sw2
    
          //  -Config pin P7D/D8:
          //    Pin P7D/D8 como salida
          //    Pin P7D/D8 a 0
    
          //  -Config SysTick (1ms):
          SysTick_Init(SystemCoreClock / 1000U);
    
          // Ejecutivo cíclico
          while (1)
          {
              if (......) // Si SysTick ha desbordado
              {   // Aquí va el código que se ejecuta cada 1 ms
                  GPIO_ChannelToggle(P7D);                 // Actualiza P7D/D8
    
              }
              // Aquí va el código que se ejecuta en cada iteraciónº
              // Ejemplo: Parpadeo led ETH
              breath_led(LED_ETH);
          }
      }
    
  1. Verificación del funcionamiento.

  • Compila y programa el microcontrolador.

  • Depura el código, y verifica utilizando el debugger de Keil que la aplicación se comporta según lo especificado.

  1. Exploración personal:

  • Experimenta con diferentes secuencias de encendido para los LEDs.

  • Implementa el efecto breathing también en el LED RGB.

  • Modifica la máquina de estados (MEF) para incorporar nuevos patrones de interacción, como doble pulsación o combinaciones de pulsación corta y larga.

fig1