Organisation du Projet
Structure
projetDemo2026/
βββ CMakeLists.txt # Build configuration
βββ CMakePresets.json # Build presets
βββ Core/
β βββ Inc/ # Headers
β β βββ app_ui.h # UI API (LVGL)
β β βββ app_audio.h # Audio API (WAV)
β β βββ player.h # Physique/collision
β β βββ freertos_app.h # FreeRTOS config
β β βββ *_hal.h # HAL (adc, dac, gpio, i2c, etc)
β βββ Src/
β βββ main.c # Point d'entrΓ©e
β βββ app_ui.c # Rendu LVGL
β βββ app_audio.c # Lecteur WAV
β βββ player.c # Physique
β βββ freertos.c # FreeRTOS tasks
β βββ *_hal.c # HAL implementations
βββ Drivers/
β βββ CMSIS/ # ARM CMSIS
β βββ STM32F7xx_HAL_Driver/ # ST HAL
βββ Middlewares/Third_Party/
β βββ LVGL/ # Librairie graphique
β βββ FreeRTOS/ # RTOS
β βββ FatFs/ # Filesystem
βββ Fonts/ # Bitmap fonts
βββ cmake/ # CMake scripts
Modules ClΓ©s
Module Application (Core/Src/app_*.c)
app_ui.c β rΓ΄le et fonctions
- Rôle principal : interface entre la logique du jeu et LVGL. Gère la construction des écrans, l'affichage des images et sprites, et l'actualisation framebuffer.
- Fonctions clΓ©s :
- initialisation de l'UI et des layers (background / foreground)
- gestion du cache d'assets (chargement BMP, eviction LRU)
- mise Γ jour des positions de sprites et des labels (score, FPS)
- orchestration du cycle de rendu (invalidation, lv_timer_handler, swap buffers)
player.c β rΓ΄le et fonctions
- RΓ΄le principal : simulation physique et Γ©tats du joueur (position, vitesse, collisions, animations).
- Fonctions clΓ©s :
- initialisation et rΓ©initialisation du joueur
Player_Update(): appliquer gravitΓ©, lire entrΓ©e, dΓ©placer, dΓ©tecter collisions- gestion des Γ©tats d'animation (IDLE, WALK, JUMP)
- helpers collision AABB et rΓ©solution de pΓ©nΓ©tration
app_audio.c β rΓ΄le et fonctions
- RΓ΄le principal : pipeline de lecture audio WAV via FatFs β ring buffer β DAC + DMA.
- Fonctions clΓ©s :
- dΓ©couverte et ouverture de fichiers WAV sur la carte SD
- parsing header WAV et configuration du ring buffer
- dΓ©marrage/arrΓͺt du DAC + configuration DMA
AppAudio_Process(): remplissage pΓ©riodique du buffer, gestion volume et Γ©tat- hooks pour callbacks DMA / TIM (synchronisation audio)
Module MatΓ©riel (Core/Src/*_hal.c)
Chaque pΓ©riphΓ©rique a son module :
- gpio.c : Configuration GPIO pour contrΓ΄le
- ltdc.c : LTDC display controller (480x272 RGB565)
- dac.c : Digital-Analog Converter pour audio
- tim.c : Timers (TIM2 pour sync audio)
- dma.c : Direct Memory Access (transfers parallèles)
- i2c.c : I2C (Γ©cran tactile FT5336)
- spi.c : SPI (optionnel, SD card)
- fmc.c : Flexible Memory Controller (SDRAM)
FreeRTOS (Core/Src/freertos.c)
// CrΓ©ation des tΓ’ches
xTaskCreate(render_task, "render", 2048, NULL, 2, NULL);
xTaskCreate(game_logic_task, "game", 2048, NULL, 2, NULL);
xTaskCreate(audio_task, "audio", 1024, NULL, 1, NULL);
// Synchronisation
xSemaphore vsync_semaphore; // SignalΓ© au vsync
xMutex sdram_mutex; // Accès SDRAM thread-safe
π Flux de DonnΓ©es
SD Card (BMP + WAV)
β
FatFs
β
ββββββββ΄βββββββ
β β
Images Audio
β β
App UI App Audio
β β
LVGL β LTDC DAC
β β
Display Speaker
Layers Architecturaux
βββββββββββββββββββββββββββββββββββββββββββ
β Gameplay Layer β
β (player.c, collision, logic) β
βββββββββββββββββββββββββββββββββββββββββββ€
β Application Layer β
β (app_ui.c, app_audio.c, main.c) β
βββββββββββββββββββββββββββββββββββββββββββ€
β Middleware Layer β
β (LVGL, FreeRTOS, FatFs) β
βββββββββββββββββββββββββββββββββββββββββββ€
β HAL/Driver Layer β
β (Peripheral abstractions) β
βββββββββββββββββββββββββββββββββββββββββββ€
β Hardware Layer β
β (STM32F746 + peripherals) β
βββββββββββββββββββββββββββββββββββββββββββ
Prochaine lecture : LVGL et son utilisation