name: ucconfig description: | STM32G431KB Firmware-Konfiguration für das watasoge-Projekt. Verwaltet die Build-Infrastruktur: CMakeLists.txt, CMakePresets.json, Toolchain-File, Linker-Script, Startup-File, HAL-Konfiguration und den Drivers-Symlink. Verwende diesen Skill, wenn HAL-Module hinzugefügt/entfernt werden, neue Peripherie konfiguriert wird, oder sich an der Build-Konfiguration etwas ändern muss. Triggers: "HAL konfigurieren", "Peripherie hinzufügen", "CMake ändern", "Linker-Script", "HAL-Modul", "Build-Konfiguration", "ucconfig". allowed-tools: Read, Write, Edit, Glob, Grep, Bash
ucconfig — STM32G431KB Build-Konfiguration
Verwaltet die gesamte Build-Infrastruktur der STM32G431KB-Firmware im watasoge-Projekt.
Projektlayout
firmware/stm32g431kb/
├── CMakeLists.txt # Build-Definition
├── CMakePresets.json # Debug/Release Presets (Ninja)
├── cmake/
│ └── gcc-arm-none-eabi.cmake # Toolchain-File
├── STM32G431KBTX_FLASH.ld # Linker-Script
├── startup_stm32g431xx.s # Startup (Kopie aus STM32Cube Repo)
├── Core/
│ ├── Inc/
│ │ ├── main.h # Pin-Definitionen, Projekt-Header
│ │ ├── stm32g4xx_hal_conf.h # HAL-Modulauswahl
│ │ └── stm32g4xx_it.h # Interrupt-Prototypen
│ └── Src/
│ ├── main.c # Applikationslogik
│ ├── stm32g4xx_it.c # Interrupt-Handler
│ ├── stm32g4xx_hal_msp.c # MSP-Init (Clock-Enable für Peripherie)
│ ├── system_stm32g4xx.c # SystemInit, SystemCoreClockUpdate
│ ├── syscalls.c # Newlib Stubs
│ └── sysmem.c # _sbrk
└── Drivers/ # Symlink → <STM32Cube_FW_G4>/Drivers
Hardware
- MCU: STM32G431KB, Cortex-M4F, 170 MHz
- Board: NUCLEO-G431KB
- Flash: 128 KB, RAM: 32 KB (+ 10 KB CCMSRAM)
- Toolchain: arm-none-eabi-gcc 10.3 (Homebrew)
- HAL: STM32Cube_FW_G4_V1.6.1
Aktuelle Clock-Konfiguration
HSI 16 MHz → PLL (PLLM=4, PLLN=85, PLLR=2) → 170 MHz SYSCLK. Voltage Scale 1 Boost, Flash Latency 4 WS.
HAL-Modul hinzufügen
Wenn neue Peripherie benötigt wird (z.B. SAI, TIM, SPI), sind drei Dateien zu ändern:
1. Core/Inc/stm32g4xx_hal_conf.h — Modul aktivieren
#define HAL_SAI_MODULE_ENABLED
Und den entsprechenden Include-Block hinzufügen:
#ifdef HAL_SAI_MODULE_ENABLED
#include "stm32g4xx_hal_sai.h"
#endif
2. CMakeLists.txt — HAL-Treiber-Quelldateien eintragen
Im SOURCES-Block die benötigten HAL-Quelldateien ergänzen:
Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_sai.c
Drivers/STM32G4xx_HAL_Driver/Src/stm32g4xx_hal_sai_ex.c
3. Core/Src/stm32g4xx_hal_msp.c — MSP-Callbacks
Für Peripherie mit Clock- oder Pin-Konfiguration die HAL_<PERIPH>_MspInit() und
HAL_<PERIPH>_MspDeInit() Callbacks implementieren.
HAL-Treiber-Quelldateien finden
Die verfügbaren HAL-Quelldateien liegen unter:
Drivers/STM32G4xx_HAL_Driver/Src/
Dort existieren jeweils stm32g4xx_hal_<modul>.c und ggf. stm32g4xx_hal_<modul>_ex.c.
Aktuell kompilierte HAL-Treiber
hal.c,hal_rcc.c,hal_rcc_ex.chal_gpio.c,hal_cortex.chal_pwr.c,hal_pwr_ex.chal_flash.c,hal_flash_ex.c,hal_flash_ramfunc.chal_exti.c,hal_dma.c,hal_dma_ex.c
Linker-Script
STM32G431KBTX_FLASH.ld — Kopie aus STM32Cube Repository mit entfernten READONLY-Keywords
(GCC 10.3 unterstützt diese nicht). Bei Upgrade auf GCC 11+ können die READONLY-Keywords
wieder eingefügt werden.
Compiler-Flags
-mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard
-Wall -fdata-sections -ffunction-sections
Linker: --specs=nano.specs -Wl,--gc-sections -lc -lm -lnosys
Wichtige Hinweise
- Drivers-Symlink: Zeigt auf
<STM32Cube_FW_G4>/Drivers. Nicht löschen oder durch Kopie ersetzen. - syscalls.c: Enthält keine
_exit-Funktion — diese wird vonlibnosysbereitgestellt. Keine eigene_exithinzufügen, sonst gibt es Multiple-Definition-Fehler beim Linken. - startup_stm32g431xx.s: Unveränderte Kopie aus dem STM32Cube Repository. Bei HAL-Updates ggf. durch neuere Version ersetzen.
- Nach Konfigurationsänderungen immer einen Clean-Build durchführen:
rm -rf build/Debug && cmake --preset Debug && cmake --build build/Debug
Referenzen
- HAL-Quelldateien:
Drivers/STM32G4xx_HAL_Driver/Src/ - HAL-Header:
Drivers/STM32G4xx_HAL_Driver/Inc/ - CMSIS-Header:
Drivers/CMSIS/Device/ST/STM32G4xx/Include/