mejor hacer el control de flujo por soft, en cada trama envias uno o 2 caracteres (ACK) y ese será quien determine el permiso para enviar la siguiente trama, me explico
el RX estará escuchando, el TX envia la trama (y se queda esperando por el ACK del receptor), cuando el RX confirme la completa recepción de la trama, entonces enviará el ACK al TX y así TX enviará la siguiente trama.
para garantizar la data transmitida, se podría implementar un detector de errores, podrias usar un checksum, que sería una data adicional añadida a la trama, que luego sería calculada en el RX para verificar que la información que llegó, es correcta.
y faltaría finalmente programar la cancelación de la comunicación (en caso que RX no exista y que TX no se quede indefinidamente esperando el ACK), se podría añadir un temporizador, que al finalizar dicho tiempo cancela la transmisión de TX.
mas o menos así lo haría yo