Al importar el Netlist a Pcbnew, todos los componentes aparecen apilados. El proceso de separarlos y organizarlos no es estético, es electromagnético y termodinámico. Debemos dividir la placa de circuito en "Zonas o Dominios" estrictamente aislados.
Al mover el MCU y enfrentarlo a los conectores, te darás cuenta de algo terrible: el Airwire (Día 81) que va del Pin PA5 hacia el Relé se cruza en "X" con el Airwire del Pin PB12 que va al LED. Si ruteas eso en cobre en una placa de 2 capas, chocarán.
La técnica industrial maestra es el Pin Swapping (Intercambio de Pines). En lugar de hacer una pista de cobre larguísima que dé la vuelta a toda la placa, el Arquitecto de Hardware vuelve al esquemático (Eeschema), cambia la etiqueta del LED de PB12 a PA6, actualiza el Netlist, y mágicamente los Airwires se desenredan, permitiendo pistas rectas y cortas. Luego, se le informa al ingeniero de Firmware que actualice el código.
Ejercicio 1: Tu labor como diseñador Bare-Metal requiere sincronización perfecta. El ingeniero de Layout acaba de desenredar el "Rat's Nest" rotando el MCU y haciendo Pin Swapping. Actualiza las macros del Súper Bucle utilizando la abstracción correcta (Driver de Hardware) para asimilar los cambios físicos del PCB sin romper la Máquina de Estados.
#include <stdint.h>
// ============================================================================
// ARCHIVO: bsp_pines.h (Actualización por Layout del PCB Rev B)
// ============================================================================
/*
* REPORTE DE CAMBIOS DEL INGENIERO DE LAYOUT (KiCad Pcbnew):
* Para evitar que las pistas de potencia del MOSFET de la válvula crucen
* por debajo del oscilador de cristal (Y1) e induzcan ruido, se realizó
* un Pin Swapping de los actuadores hacia el lado derecho del STM32.
*
* CAMBIOS:
* - Válvula Principal: De PB5 -> PC8
* - Torreta de Alarma: De PC13 -> PC9
*/
// --- ANTES DEL LAYOUT (Comentado por historial) ---
// #define PORT_VALVULA GPIOB
// #define PIN_VALVULA 5
// #define PORT_TORRETA GPIOC
// #define PIN_TORRETA 13
// --- DESPUÉS DEL LAYOUT OPTIMIZADO (Actual) ---
#define PORT_VALVULA GPIOC
#define PIN_VALVULA 8
#define PORT_TORRETA GPIOC
#define PIN_TORRETA 9
// ----------------------------------------------------------------------------
// DRIVER BARE-METAL EN C
// ----------------------------------------------------------------------------
// Al usar macros para enmascarar los registros físicos, el Súper Bucle
// nunca se entera de que los pines físicos cambiaron.
#define ABRIR_VALVULA() (PORT_VALVULA->BSRR = (1 << PIN_VALVULA))
#define CERRAR_VALVULA() (PORT_VALVULA->BSRR = (1 << (PIN_VALVULA + 16)))
#define ALARMA_ON() (PORT_TORRETA->BSRR = (1 << PIN_TORRETA))
#define ALARMA_OFF() (PORT_TORRETA->BSRR = (1 << (PIN_TORRETA + 16)))
// ... En el main.c, llamar a ABRIR_VALVULA() funcionará sin importar el hardware.
Objetivo del día: Aislamiento de Ruido Magnético por Zonificación (Floorplanning).
La precisión de tu Despachador depende del ADC (Día 74) leyendo microvoltios del puente PT100. Si colocas el componente L1 (el inductor del Buck Converter) cerca del ADC, el campo magnético pulsante (EMI) inducirá voltajes parásitos en las pistas de cobre de los sensores, alterando la lectura de temperatura de 20.0°C a 20.5°C erráticamente. Eso significa que cobrarás mal el gas.
Al hacer un Placement riguroso en KiCad, hemos desterrado a toda la sección de Potencia a la esquina inferior izquierda del PCB. El procesador STM32 reina en el centro, y la zona Analógica (PT100, OpAmp) se ubica en el extremo derecho, en una "isla" aislada física y eléctricamente. Además, has aprendido que el diseño Bare-Metal en C no es rígido: a través de las abstracciones del bsp_pines.h, el software cede ante las necesidades topológicas del hardware para crear una Placa de Circuito limpia, corta y eficiente.
1. Mirando el diagrama de Floorplanning, ¿por qué es crítico que las pistas que van del cristal del Reloj (Y1) al STM32 sean lo más cortas posibles?
Respuesta: El cristal genera una onda cuadrada constante de muy alta frecuencia (ej. 8 MHz, 16 MHz). Si las pistas de cobre (cables) de ese cristal son largas, se convierten literalmente en antenas transmisoras de radio. Empezarán a irradiar ruido a los sensores cercanos y tu diseño fallará las pruebas de Emisiones Radiadas (Certificación CE / FCC) porque tu Despachador de Gas se comportará como una estación de radio pirata.
2. Cuando un ingeniero de Hardware te pide hacer un "Pin Swap" en C para facilitar su ruteo de cobre, ¿deberías usar variables globales para configurar los pines o Macros de Preprocesador (#define)?
Respuesta: Estrictamente Macros (#define). En sistemas embebidos Bare-Metal, configurar pines de registros de bajo nivel usando variables (ej. int pin_valvula = 8; PORT->BSRR = (1 << pin_valvula);) gasta memoria RAM valiosa y le toma a la CPU múltiples ciclos de reloj leer la memoria y calcular el desplazamiento (Shift) en tiempo de ejecución. Las Macros se resuelven en el proceso de compilación, resultando en instrucciones de máquina ensamblador absolutas de un solo ciclo (O(1)), garantizando máxima velocidad sin usar memoria RAM dinámica.