DÍA 092 DE 365

Fase 2: Fundamentos de Hardware y Electrónica

📖 Teoría a Estudiar

STM32CubeIDE y la Filosofía Bare-Metal

Para programar el cerebro de nuestro sistema, STMicroelectronics nos provee de STM32CubeIDE, un entorno basado en Eclipse. Internamente, utiliza el compilador estándar de la industria GCC ARM Embedded. Sin embargo, este IDE trae una trampa para los programadores de grado industrial: El Autogenerador CubeMX (HAL).

El Peligro del Autogenerador (HAL)

Si creas un proyecto "Normal", el IDE abrirá una interfaz gráfica donde haces clic en los pines. Al guardar, escupe miles de líneas de código y librerías masivas (Hardware Abstraction Layer - HAL) que configuran el reloj, los puertos y las interrupciones por ti. El problema es que este código es extremadamente ineficiente, lento y, lo más grave: te oculta cómo funciona el silicio.

Si ocurre una falla crítica de tiempos durante la inyección de gas, no sabrás si fue un bug en tu lógica o un desbordamiento oculto dentro de los miles de archivos de ST.

Por eso, nosotros crearemos un Empty Project (Proyecto Vacío). Solo utilizaremos el compilador y los archivos de cabecera CMSIS (Cortex Microcontroller Software Interface Standard), los cuales no son funciones, sino simples etiquetas de texto (macros) que le ponen nombres legibles a las direcciones físicas de la memoria del chip.

CADENA DE COMPILACIÓN (TOOLCHAIN) BARE-METAL Source Files main.c stm32f4xx.h startup_stm32.s GCC ARM Compiler + Linker stm32_flash.ld (Script) Binarios firmware.elf firmware.bin ST-LINK a la PCB

Estructura del Proyecto

Un proyecto profesional no es un montón de archivos sueltos. Al crear nuestro proyecto Bare-Metal, dividiremos nuestra arquitectura de la siguiente manera:

⚙️ Ejercicios Prácticos

Ejercicio 1: Crea un nuevo proyecto en STM32CubeIDE. Selecciona tu microcontrolador (STM32F401RE). En la ventana "Target Project Type", elige "Empty" (nunca STM32Cube). Luego, limpia el archivo main.c que se genera y déjalo con la estructura Bare-Metal absoluta.


/**
 * ******************************************************************************
 * @file           : main.c
 * @author         : Joel Mora Vela (Arquitecto de Firmware)
 * @project        : Despachador de Gas LP - Industrial
 * @brief          : Punto de entrada Bare-Metal
 * ******************************************************************************
 */

#include <stdint.h>

// En los próximos días incluiremos el header de CMSIS (#include "stm32f401xe.h")
// que contiene el mapa de memoria. Hoy probamos la compilación pura.

int main(void) {
    
    // --- FASE 1: INICIALIZACIÓN DE HARDWARE BARE-METAL ---
    // (AQUÍ configuraremos el Reloj del Sistema, Punteros SP y Periféricos)
    
    
    // --- FASE 2: EL SÚPER BUCLE INFALIBLE ---
    // El microcontrolador jamás debe salir de este bucle. 
    // Si main() retorna, el sistema colapsará.
    
    while (1) {
        
        // La máquina de estados principal correrá aquí.
        // - Leer sensores
        // - Controlar válvulas
        // - Transmitir RS485
        
    }
    
    // El compilador exige un retorno, aunque por hardware nunca lleguemos aquí
    return 0;
}
        

🚀 Avance del Proyecto Tesis: Despachador de Gas LP

Objetivo del día: Establecer el Ecosistema de Software Seguro (Empty Project).

Abre STM32CubeIDE. Ve a File -> New -> STM32 Project. Busca el STM32F401RETx (el chip que seleccionamos para nuestra placa en la Fase 2). Nombra tu proyecto "Despachador_Gas_v1". ¡Detente en la última pantalla! Selecciona Targeted Language: C y, fundamentalmente, Targeted Project Type: Empty.

Haz clic en "Finish". El IDE generará un entorno limpio, sin librerías HAL pesadas que estorben. Al presionar el ícono del martillo (Build), el compilador GCC ARM traducirá tu archivo main.c vacío en un archivo .elf. Si revisas la pestaña de consola, notarás que el tamaño de tu Firmware es de apenas unos pocos Bytes de memoria, dejando el 99.9% de la Flash libre para la lógica metrológica de tu Despachador. Tienes un lienzo industrial en blanco.

📝 Resumen del Día