Build et flash firmware — Matek H743-WING V3¶
Cross-compilation d'ArduPlane / ArduRover pour la cible Matek H743-WING V3 depuis macOS, et flash via USB-C.
Prérequis :
setup-macos.mdterminé, toolchainarm-none-eabi-gccinstallée.
1. Build ArduPlane pour H743-WING¶
Le binaire est généré dans :
build/MatekH743-bdshot/bin/arduplane.apj # 1.3 MB, JSON+zlib, à flasher
build/MatekH743-bdshot/bin/arduplane # 2.8 MB, ELF brut ARM
Durée build à froid sur M1 Pro : ~2m40s (validé 2026-05-10). Builds incrémentaux <30 s grâce à ccache.
MatekH743-bdshotest la variante avec bidirectional DShot activé (télémétrie ESC inverse). Pour le Swordfish on n'a pas d'ESC DShot, mais cette config marche aussi en PWM standard. Si tu préfères la variante stricte :--board MatekH743.⚠️ Ne jamais lancer deux
wafen parallèle sur le même repo, même sur des boards différents — la config est globale au repo, pas au build dir, et un secondwaf configureécrase le premier en cours. Toujours séquentiel : configure → build → configure → build.
Build pour le rover (Phase 3) :
./waf configure --board MatekH743-bdshot
./waf rover
# binaire : build/MatekH743-bdshot/bin/ardurover.apj
waf configuredoit être ré-appelé seulement quand on change de board. Pour itérer sur le code,./waf planesuffit.
2. Flash via QGroundControl¶
C'est la voie la plus simple sur macOS. Le H743-WING est en mode bootloader DFU dès le branchement USB-C tant qu'aucun firmware ArduPilot n'a démarré (bouton boot maintenu, ou court-circuit pads BOOT).
Procédure¶
- Brancher le H743-WING en USB-C au Mac (en mode bootloader la première fois).
- QGC → Vehicle Setup → Firmware.
- Custom firmware file → sélectionner
build/MatekH743-bdshot/bin/arduplane.apj. - QGC flashe et reboot la carte.
- La carte apparaît ensuite comme port série
/dev/tty.usbmodem*avec MAVLink à 115200 bauds.
Pour vérifier que macOS voit la carte :
ls /dev/tty.usbmodem*
3. Flash en CLI (alternative)¶
Pour les itérations rapides sans QGC, utiliser uploader.py fourni par ArduPilot :
Le script détecte automatiquement le port série du bootloader. Si plusieurs cartes branchées, préciser :
4. Workflow paramètres¶
Les paramètres ArduPilot (PIDs, mixages, modes) sont séparés du firmware. Workflow recommandé :
~/Project/bascanada/fleet-params/
├── swordfish-baseline.parm # config V-tail, calibrations IMU initiales
├── swordfish-tuned.parm # après AUTOTUNE
└── rover-baseline.parm
Sauvegarder depuis la carte¶
Dans MAVProxy connecté au véhicule (via USB ou via télémétrie ELRS) :
Charger sur une nouvelle carte¶
Versionner les
.parmdans git. C'est ton vrai état véhicule. Le firmware est reproductible depuis le SHA git d'ArduPilot ; les paramètres, non.
5. Récupération si la carte est briquée¶
Si un mauvais flash empêche la carte de booter :
- Maintenir le bouton BOOT du H743 pressé.
- Brancher l'USB.
- La carte est en DFU pur (visible via
ls /dev/cu.usbmodem*). - Re-flasher via QGC ou
uploader.py.
Pour un cas vraiment dégénéré (pas de DFU), il faut un STLink V2 (~25 $) et OpenOCD :
6. Modifier le code firmware¶
Pour ajouter une fonctionnalité custom (ex: un nouveau mode de vol, un handler MAVLink personnalisé) :
ardupilot/
├── ArduPlane/ # code spécifique Plane
│ ├── mode_*.cpp # un fichier par mode de vol
│ └── Plane.cpp # boucle principale
├── libraries/ # shared libs (AP_AHRS, AP_GPS, etc.)
└── modules/ # submodules git
Cycle de dev :
# éditer ArduPlane/mode_loiter.cpp
./waf plane # recompile (incrémental, ~30s)
# flasher la nouvelle .apj
Pour tester sans flasher, toujours d'abord en SITL (voir sitl.md).
Références¶
- ArduPilot build instructions — https://ardupilot.org/dev/docs/building-the-code.html
- Matek H743-WING V3 — https://www.mateksys.com/?portfolio=h743-wing
- Liste des boards supportés —
Tools/scripts/build_options.py