Saltar a contenido

Capítulo 20 — Sistemas Embebidos y Microcontroladores

Objetivos de aprendizaje

  • Programar microcontroladores bare-metal: GPIO, interrupciones, timers.
  • Manejar comunicación serial (UART, SPI, I²C), ADC/DAC y DMA.
  • Conocer los RTOS, el bajo consumo, el firmware seguro y RISC-V.

20.1–20.2 Fundamentos y entorno

Un microcontrolador (MCU) integra CPU, memoria (Flash + SRAM) y periféricos en un chip. Restricciones: poca RAM (KB), sin sistema operativo (a menudo), tiempo real. Herramientas: arm-none-eabi-gcc, OpenOCD, linker scripts, depuración por JTAG/SWD.

// Acceso a un registro mapeado en memoria (MMIO): volatile es OBLIGATORIO
#define GPIOA_ODR (*(volatile uint32_t *)0x48000014)
GPIOA_ODR |= (1u << 5);   // poner el pin 5 a alto

20.3–20.4 GPIO e interrupciones

// Manejador de interrupción (ISR): corto, sin bloqueos, sin malloc
void EXTI0_IRQHandler(void) {
    if (EXTI->PR & 1) {       // ¿pendiente?
        EXTI->PR = 1;         // limpiar el flag (escribir 1)
        bandera_evento = 1;   // señalar al bucle principal (volatile)
    }
}

Reglas de oro de las ISR

Una ISR debe ser breve, no llamar a funciones no reentrantes (printf, malloc), y comunicarse con el código principal mediante variables volatile o colas lock-free. Las variables compartidas con una ISR deben ser volatile (y atómicas si superan el tamaño de palabra).


20.5–20.8 Timers, serial, ADC/DAC y DMA

  • Timers/PWM: generar señales periódicas, controlar motores y brillo.
  • UART: serie asíncrona; SPI e I²C: buses para sensores y memorias.
  • ADC/DAC: convertir entre el mundo analógico y digital.
  • DMA: mover datos entre periféricos y memoria sin intervención de la CPU — esencial para audio, redes y muestreo continuo.

20.9 RTOS

Un sistema operativo de tiempo real (FreeRTOS, Zephyr) ofrece tareas, planificación por prioridades, mutexes y colas con garantías temporales (determinismo). Diferencia clave frente a Linux: el tiempo de respuesta está acotado.

// FreeRTOS: crear una tarea
xTaskCreate(tarea_led, "LED", 128, NULL, 1, NULL);
vTaskStartScheduler();

20.10–20.12 Bajo consumo, firmware seguro y RISC-V

  • Bajo consumo: modos sleep/stop, despertar por interrupción — crítico en IoT con batería.
  • Firmware seguro: secure boot, arranque verificado, actualizaciones OTA firmadas, flash cifrada.
  • RISC-V: ISA abierta y libre de royalties que está transformando el sector.

Conexión con la actualidad

C es, sin discusión, el rey indiscutible de los sistemas embebidos: miles de millones de microcontroladores (automoción, electrodomésticos, IoT, dispositivos médicos) ejecutan firmware en C. Tres corrientes definen 2024–2025:

  • RISC-V ha pasado de promesa a realidad industrial: fabricantes como SiFive, Espressif (ESP32-C) y un ecosistema chino enorme adoptan esta ISA abierta, y su toolchain en C/GCC es de primera clase.
  • Seguridad de firmware: regulaciones como la Cyber Resilience Act de la UE (2024) obligan a secure boot, actualizaciones firmadas y SBOM en dispositivos conectados, elevando el listón del C embebido.
  • La competencia de Rust: Rust embebido (embassy, embedded-hal) gana terreno por su seguridad de memoria, pero C sigue dominando por madurez de toolchains, soporte de silicio y base instalada. Saber C embebido sigue siendo imprescindible y muy demandado.

Ejercicios

Ejercicio 20.1 — Blink ★

Haz parpadear un LED en una placa real (STM32, ESP32, RP2040) o en el simulador Wokwi/QEMU. El «Hola, mundo» del embebido.

Ejercicio 20.2 — Botón con interrupción ★★

Enciende/apaga un LED desde una ISR de botón, con debounce.

Ejercicio 20.3 — Sensor por I²C ★★★

Lee un sensor de temperatura por I²C y envía las lecturas por UART.

Ejercicio 20.4 — Tarea en FreeRTOS ★★★★

Implementa dos tareas (parpadeo + lectura de sensor) comunicadas por una cola, con prioridades distintas.


Referencias

  • Making Embedded Systems (Elecia White), O'Reilly.
  • The Definitive Guide to ARM Cortex-M (Joseph Yiu).
  • FreeRTOS, Zephyr Project.
  • Wokwi — simulador de microcontroladores en el navegador.