multi-uart.ino

Arduino Portenta H7 · Archivo : multi-uart.ino · Lenguaje : Arduino · Uso : Dialoguer sur trois ports série matériels à la fois

La firma de las placas STM32 grandes: varios UART hardware simultáneos. Este puente de tres puertos (consola USB-C, GPS en Serial1, módulo en Serial2) ilustra el multiplexado sin librería adicional.

Hardware

Un Arduino Portenta H7 (módulo ST STM32H747 doble núcleo Cortex-M7 @ 480 MHz + M4 @ 240 MHz, 8 MB SDRAM, conector high-density), alimentado por USB-C o 5 V. Un GPS serie o un módulo USB-serie para probar.

Cableado

TX/RX cruzados hacia cada módulo (TX placa → RX módulo), masas comunes, niveles de 3,3 V. Confirma los pares en el esquema de la carrier board.

Funcionamiento

Cada Serial es un periférico independiente; el bucle bombea búferes no bloqueantes de un puerto a otro. A 480 MHz, tres puentes simultáneos son imperceptibles.

Ejecución

Arduino IDE con el core « Arduino Mbed OS Portenta Boards »: elige « Portenta H7 » (núcleo M7), el puerto USB-C y Subir. El selector M7/M4 del modo DFU permite cargar también el núcleo M4.

Variantes

Añadir un búfer circular por puerto (RingBuffer Mbed), o enrutar al núcleo M4 para preprocesar las tramas.

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

← Volver a la ficha