multi-uart.ino

Arduino Portenta H7 · Fichier : multi-uart.ino · Langage : Arduino · Usage : Dialoguer sur trois ports série matériels à la fois

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());
  }
}

← Retour à la fiche