La unica forma de limpiar el buffer de recepcion es leyendo el registro, pero tu mayor problema es el delay y como estas manejando los datos.
Tenes dos formas si quieres seguir haciendo lo que estas haciendo, simplemente coloca 5 instrucciones que hagan un dummy read:
variable_sin_importancia = RCREG;
variable_sin_importancia = RCREG;
variable_sin_importancia = RCREG;
variable_sin_importancia = RCREG;
variable_sin_importancia = RCREG;
Eso limpiaria tu buffer. El principal problema ahora es... que pasa si recibis el comienzo de la otra palabra durante el delay.. ejemplo una "h". Lo podes solucionar de 2 formas, una es limpiando antesdel delay al buffer, pero volvemos al mismo tema de ahora, que existan 2 palabras durante el delay (y perder el sincronismo de los 5 caracteres, mas delante me explico con el ejemplo de "elloh"). Y la otra es usar interrupciones.
Para mi la unica y efectiva solucion es usar interrupciones. No se exactamente cuanto se puede setear la interrupcion, algunos se puede setear cuando se completa el buffer , otros a la mitad. otros apenas recibis un dato.
Si se puede hacer a buffer completo seria bueno desde el punto de vista ideal, pero eso significa que si envias solo una parte nunca entraria a la interrupcion, por ejemplo enviar "hell" y nada mas
Lo que me lleva a otra cosa. vos esperas que los datos entren en ese orden pero puede que llegue el punto que estes enviando esto: "elloh" donde la h es de la siguiente palabra.
Yo a mi criterio haria interrupcion por caracter. Con un caracter en especial para indicar comienzo y si es variable el mensaje ( es decir no siempre tiene 5 caracteres y tiene mas ) pondria otro caracter para indicar un final ( distinto al primero, o que el segundo caracter sea la cantidad de caracteres que van )
Ej:
0x1D H E L L O 0x1C (inicion y finall)
o
0xFF 0x05 H E L L O (inicio y contador)
o si siempre es de 5 caracteres, con uno solo basta
0xFF H E L L O
Esto te va a permitir que a pesar que estes en un delay, apenas reciba un dato entre a la interrupcion y comienze a llenar la variable cadena[] ya sea cadena1 o cadena2. Y te permite conocer claramente el largo/inicio de la transmision
Y en tu programa en ves de "leer" con el UART_Read_Text , simplemente preguntas por una flag(que indique ya se completo todo de la cadena1 o cadean2) o te quedas preguntando por si la cadena es esa. Cuando se llene va a cumplir o no la condicion de igualdad y va a seguir con el programa.