🛠 STM32CubeF4 et HAL : blink + UART printf générés pour la Nucleo-F401RE
Objetivos
Deja la abstracción de Arduino por una sesión y crea un proyecto STM32Cube HAL para la Nucleo-F401RE. STM32CubeF4 es el paquete de firmware oficial de ST — CMSIS + controladores HAL/LL + BSP de la placa + middleware + proyectos de ejemplo listos para usar — y incluye explícitamente proyectos para la STM32F401RE-Nucleo. La generación de código se realiza en STM32CubeMX; la programación se realiza a través del ST-LINK integrado con STM32CubeProgrammer.
Hardware
- 1× Nucleo-F401RE + cable micro-USB
- PC con STM32CubeMX y STM32CubeIDE (o una cadena de herramientas con Makefile); > SIN VERIFICAR: el soporte de STM32CubeIDE se infiere de la cadena de herramientas Cube, pero no se confirmó en una página obtenida.
Pasos
git clone --recursive https://github.com/STMicroelectronics/STM32CubeF4
- Clona el paquete recursivamente — es un agregado de submódulos:
- En CubeMX, selecciona la placa Nucleo-F401RE, habilita USART2 (PA2/PA3, el VCP del ST-LINK) en modo Asíncrono.
- Genera el código, luego integra el bucle de parpadeo + printf que se muestra a continuación en
main.c. - Compila y programa a través de ST-LINK; abre el puerto COM del ST-LINK a 115200.
Código
/* main.c — Nucleo-F401RE, STM32Cube HAL: LD2 blink on PA5 + USART2 (ST-LINK VCP) */
#include "stm32f4xx_hal.h"
extern UART_HandleTypeDef huart2; // generated by CubeMX (PA2/PA3 -> ST-LINK VCP)
static GPIO_InitTypeDef gpio = {0};
int main(void)
{
HAL_Init; /* SysTick @1 ms, NVIC defaults */
SystemClock_Config; /* generated: HSI/PLL -> 84 MHz SYSCLK */
__HAL_RCC_GPIOA_CLK_ENABLE;
gpio.Pin = GPIO_PIN_5; /* LD2 (green user LED) = PA5 */
gpio.Mode = GPIO_MODE_OUTPUT_PP;
gpio.Pull = GPIO_NOPULL;
gpio.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &gpio);
char msg[48]; uint32_t n = 0;
while (1) {
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
HAL_Delay(250);
int len = snprintf(msg, sizeof msg,
"hello from Nucleo-F401RE #%lu\r\n", (unsigned long)++n);
HAL_UART_Transmit(&huart2, (uint8_t *)msg, len, HAL_MAX_DELAY);
HAL_Delay(750);
}
}
Resultado esperado
LD2 parpadea a 2 Hz y el puerto COM del ST-LINK imprime un saludo numerado una vez por segundo. La función generada SystemClock_Config ejecuta el F401 a su SYSCLK predeterminado de 84 MHz derivado del HSI a través del PLL. A partir de aquí, el árbol Projects/STM32F401RE-Nucleo en el repositorio es tu recetario: ejemplos de GPIO, ADC, USART, USB y SDIO mantenidos por ST.
Errores comunes
git clonesin--recursive: faltan la mitad de los controladores y nada compila.- Buscar STemWin, TouchGFX o STM32_Audio en GitHub: el middleware con licencia solo está disponible mediante aceptación de términos, desde st.com con una cuenta.
- Las descargas automatizadas de st.com fallan (404 o conexiones interrumpidas) — obtén UM1760, RM0368 y las hojas de datos desde un navegador.
- Olvidar
HAL_Init: no hay SysTick, por lo que cadaHAL_Delayse ejecuta indefinidamente.
Otros tutoriales para esta placa
- Prise en main de la Nucleo-F401RE : ST-LINK, LED LD2 et alimentation
- Premier Blink Arduino sur la Nucleo-F401RE avec le core STM32duino
- Console série sur le ST-LINK VCP : printf, ADC 12 bits et piège du USB
- ADC 12 bits et PWM sur la Nucleo-F401RE : oversampling, millivolts et LED en fondu
- Zephyr RTOS sur la Nucleo-F401RE : west build, devicetree et west flash
- Bare-metal sur le STM32F401 : clignoter LD2 en écrivant les registres GPIO