Template pronto per progetti sulla scheda WeAct STM32F411CEU6 Black Pill, generato con STM32CubeMX e buildato con CMake + GCC ARM Embedded.
| Parametro | Valore |
|---|---|
| MCU | STM32F411CEUx (Cortex-M4F) |
| Flash | 512 KB |
| SRAM | 128 KB |
| HSE | 25 MHz |
| SYSCLK | 100 MHz (PLL) |
Periferiche preconfigurate:
- PC13 → Output (LED integrato sulla Black Pill)
- PA0 → Input con pull-up (tasto utente)
- PA13/PA14 → SWD (debug/flash)
- GCC ARM Embedded Toolchain (
arm-none-eabi-gccnel PATH) - CMake ≥ 3.22
- Ninja
- STM32CubeMX (opzionale, per modificare le periferiche)
# Configurazione Debug
cmake --preset Debug
# Build Debug
cmake --build --preset Debug
# Configurazione Release
cmake --preset Release
# Build Release
cmake --build --preset ReleaseIl file .elf si troverà in build/Debug/Template-F411.elf o build/Release/Template-F411.elf.
st-flash write build/Debug/Template-F411.elf 0x08000000openocd -f interface/stlink.cfg -f target/stm32f4x.cfg -c "program build/Debug/Template-F411.elf verify reset exit"Aprire STM32CubeProgrammer, collegarsi via ST-Link, caricare il file .elf o .hex e programmare.
├── CMakeLists.txt # CMake principale
├── CMakePresets.json # Presets Debug/Release
├── Template-F411.ioc # File STM32CubeMX
├── STM32F411XX_FLASH.ld # Linker script
├── startup_stm32f411xe.s # Startup file GCC
├── cmake/
│ ├── gcc-arm-none-eabi.cmake # Toolchain GCC
│ ├── starm-clang.cmake # Toolchain Clang (alternativo)
│ └── stm32cubemx/
│ └── CMakeLists.txt # CMake generato da CubeMX
├── Core/
│ ├── Inc/ # Header (main.h, gpio.h, stm32f4xx_it.h, ecc.)
│ └── Src/ # Sorgenti (main.c, gpio.c, stm32f4xx_it.c, ecc.)
└── Drivers/
├── CMSIS/ # CMSIS Core + Device headers
└── STM32F4xx_HAL_Driver/ # Driver HAL
Questo template è progettato per essere rigenerato da CubeMX ogni volta che si aggiungono o modificano periferiche:
- Aprire
Template-F411.ioccon STM32CubeMX - Configurare pin, clock e periferiche desiderate
- Generare il codice (
Project → Generate CodeoCtrl+S) - CubeMX aggiornerà i file in
Core/eDrivers/preservando il codice scritto tra i blocchi/* USER CODE BEGIN *///* USER CODE END */ - Il tuo codice personalizzato va scritto esclusivamente nei blocchi
USER CODEper non essere sovrascritto
Per aggiungere nuovi file .c al progetto, modificare il file cmake/stm32cubemx/CMakeLists.txt:
# In MX_Application_Src, aggiungere il percorso del nuovo file:
set(MX_Application_Src
${CMAKE_CURRENT_SOURCE_DIR}/../../Core/Src/main.c
${CMAKE_CURRENT_SOURCE_DIR}/../../Core/Src/mio_file.c # ← nuovo file
...
)In alternativa, aggiungere nuovi file nel CMakeLists.txt principale nella sezione target_sources().
- Il codice tra
/* USER CODE BEGIN ... */e/* USER CODE END ... */non viene sovrascritto da CubeMX - Tutto il codice personale va scritto in quei blocchi
- Il
main.cpreconfigurato accende il LED su PC13 — usalo come punto di partenza - Per debug, usare
printfcon SWO o un debugger (ST-Link + GDB)