multi-uart.ino
La signature des grosses cartes STM32 : plusieurs UART matériels simultanés. Ce pont à trois ports (console USB-C, GPS sur Serial1, module sur Serial2) illustre le multiplexage sans bibliothèque supplémentaire.
Matériel requis
Une Arduino Portenta H7 (module ST STM32H747 double cœur Cortex-M7 @ 480 MHz + M4 @ 240 MHz, 8 Mo SDRAM, connecteur haut-density), alimentée par USB-C ou 5 V. Un GPS série ou un module USB-série pour tester.
Câblage
TX/RX croisés vers chaque module (TX carte → RX module), masses communes, niveaux 3,3 V. Confirmer les paires sur le schéma de la carrier board.
Fonctionnement
Chaque Serial est un périphérique indépendant ; la boucle pompe les tampons non bloquants d'un port à l'autre. À 480 MHz, trois ponts simultanés sont imperceptibles.
Exécution
Arduino IDE avec le core « Arduino Mbed OS Portenta Boards » : choisir « Portenta H7 » (cœur M7), le port USB-C puis Téléverser. Le sélecteur M7/M4 du mode DFU permet de charger aussi le cœur M4.
Variantes
Ajouter un buffer circulaire par port (RingBuffer Mbed), ou router vers le cœur M4 pour prétraiter les trames.
multi-uart.ino
// Trois UART materiels en parallele : USB-C, GPS, module.
// Serial = CDC USB-C
// Serial1 = TX D8 / RX D9
// Serial2 = TX D7 / RX D8 selon carrier (verifier le schema)
void setup() {
Serial.begin(9600); // console USB-C
Serial1.begin(9600); // vers GPS/module 1
Serial2.begin(115200); // vers module 2
Serial.println("3 UART actifs");
}
void loop() {
// Pont GPS -> console : ce qui arrive sur Serial1 est reprint.
while (Serial1.available()) {
char c = Serial1.read();
Serial.write(c);
Serial2.write(c); // et repete vers le module 2
}
// Ce que tape le module 2 revient sur la console.
while (Serial2.available()) {
Serial.write(Serial2.read());
}
}