Problema con el búfer en serie FRDM-kl25z

1

Estoy enviando datos a través de Serial a un FRDM-kl25z a través de una declaración printf en otro uC;

    for (int i = 0; i <320; i++)
    {
        left--;
        right++;
        sprintf(left_arr, "%d", left);
        sprintf(right_arr, "%d", right);
        frdm.printf("%s,%s \n\r", left_arr, right_arr);
    }

Y recibo los datos con este código en una interrupción en serie, llamada rx_data;

void rx_data()
{
    pc.printf("rx interrupted!\n\r");
    string current = ""; 
    while (rpi.readable())
    {
        current += rpi.getc();
    }

    PC.printf("%s", current);

}

Estoy definiendo rpi como abajo;

Serial rpi(PTC4, PTC3);  // tx, rx

Solo obtiene el primer carácter, por lo que el primer byte, de la transmisión en serie. También he probado con un contador y el puerto solo se puede leer para una iteración de 1 bucle.

He probado el código con otros uC, el LPC1768, y funciona bien.

Creo que es culpa del puerto serie del FRDM, ¿solo tiene un búfer de 1 byte o algo así?

¡Gracias!

    
pregunta Mark Corrigan

2 respuestas

4

Parece que se llama a su interrupción al comienzo de una transacción en serie. Suponiendo que estaría intentando leer un búfer con solo una parte de los datos. Por lo tanto, saldría de tu ciclo de bucles antes de tiempo porque la segunda vez no habría datos válidos.

Además, una plataforma mbed debe tener un tamaño de búfer mayor que uno.

Supongo que se llama a la interrupción anterior cuando comienzan a aparecer los datos. Por lo tanto, para resolver el problema, debe esperar hasta el final de la transmisión antes de recopilar esos datos. Puede haber una interrupción específicamente para eso.

    
respondido por el AndrewOnFire
1

Después de todo eso resultó que fui engañado por un pinout falso para la placa FRDM. Los pines PTC3 / 4 se indican como un puerto serie. Este;

enlace

Este pinout, el correcto, muestra que estos son solo gpio estándar (¡interesante que tenían un búfer de 1 byte!).

enlace

Ahora estoy definiendo el puerto como;

Serial rpi(PTE22, PTE23);  // tx, rx

que ahora le permite funcionar normalmente.

    
respondido por el Mark Corrigan

Lea otras preguntas en las etiquetas