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).
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.
Un proyecto profesional no es un montón de archivos sueltos. Al crear nuestro proyecto Bare-Metal, dividiremos nuestra arquitectura de la siguiente manera:
.c). Aquí vivirá main.c y los drivers que tú mismo escribas (ej. adc.c)..h). Aquí incluiremos el estándar CMSIS (el mapa de memoria oficial de ST) y los prototipos de tus funciones (ej. adc.h)..ld): El archivo maestro que le dice al compilador GCC de qué tamaño exacto es la memoria Flash y la RAM en tu placa física (basado en lo que vimos en el Día 91).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;
}
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.