Envio de tramas por UART de forma incorrecta

Estoy comunicando un ESP32 y un STM32 con UART, estoy programando al ESP32 con Arduino IDE y parece estar todo bien pero tengo un problema al envia, en mi proyecto basicamente recibo mensajes por Bluetooth y ese mismo mensaje lo envio por el UART2 a un STM32 y el STM32 lo recibe con DMA, el problema es que a veces el ESP32 me envia la trama correcta, por ejemplo me envia 'HOLA' , pero a veces envia '\0HOLA' y no logro entender porque, pienso que es el ESP32 el que tiene el problema ya que como les digo a veces lo envia correctamente y a veces no, y usado 3 distintos terminales bluetooth y el comportamiento es el mismo, les dejo la parte del codigo del ESP32 que configura el UART y envia los datos.

Buffer de recepcion y envio

char mensajeSTM32[10];

Configuracion del Bluetooth y UART2

  MySerial.begin(115200, SERIAL_8N1, 16, 17);        //Configuracion UART2
  GenioOneBT.begin(device_name);  //Inicializo el puerto BT 
  MySerial.setTimeout(10);     //Si pasa mas de 10ms paro la recepcion
  memset(mensajeSTM32, 0, 10);   //Limpio el buffer de recepcion

Codigo que envia datos

if (GenioOneBT.available())     //Si recibo datos por bluetooth
  {
    GenioOneBT.readBytesUntil('\0', mensajeSTM32, 10); //Recepciono los datos
    MySerial.write(mensajeSTM32, 10);  //Envio por UART2 lo que recivi
    memset(mensajeSTM32, 0, 10);  //Vuelvo a limpiar el buffer
  }

He trasladado su tema de una categoría de idioma inglés del foro a la categoría International > Español @walterpazheng2.

En adelante por favor usar la categoría apropiada a la lengua en que queráis publicar. Esto es importante para el uso responsable del foro, y esta explicado aquí la guía "How to get the best out of this forum".
Este guía contiene mucha información útil. Por favor leer.

De antemano, muchas gracias por cooperar.

Más allá de tu ejemplo con "HOLA"...

¿No será que en alguna oportunidad se envían más de 10 caracteres por bluetooth?

Si por alguna razón se enviaran 11 caracteres (incluido '\0'), cuando readStringUntil() recibiese el 10mo. caracter retornaría lo que ha leído y el caracter 11mo. se quedaría en el buffer.
Al realizarse la próxima lectura, el primer caracter sería el '\0' que "quedó" del envío anterior.

Ten en cuenta que readStringUntil() termina cuando recibe el caracter buscado (en tu caso '\0'), cuando leyó la cantidad de caracteres indicados (en tu caso 10) o cuando se cumple el timeout.