multi-uart.ino
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());
}
}