PIC32 recibe/transmite datos incorrectos en el puerto serie

Me he referido a http://microchipdeveloper.com/harmony:example-usart-dynamic-wf32 para configurar el UART y enviar/recibir datos entre la PC (Putty) y mi PIC32MZ.

El programa de demostración en el enlace recibe los datos, le agrega uno y lo transmite de nuevo a PuTTY.

    case APP_STATE_RX:                          // USART receive state
    {   
        // if byte received in USART instance pointed to by myUSARTHandle (USART1 in this case)
        if (!DRV_USART_ReceiverBufferIsEmpty(myUSARTHandle))
        {
           appData.rx_byte = DRV_USART_ReadByte(myUSARTHandle); // read received byte
           appData.tx_byte = appData.rx_byte + 1;  // modifying received byte confirms it was received
           appData.state = APP_STATE_TX;           // change state to TX
        }
        break;
    }

    case APP_STATE_TX:                          // USART transmit state
    {
        // make sure the transmit buffer is not full before trying to write byte 
        if(!(DRV_USART_TRANSFER_STATUS_TRANSMIT_FULL & DRV_USART_TransferStatus(myUSARTHandle)) )
        {
            DRV_USART_WriteByte(myUSARTHandle, appData.tx_byte);  // send modified byte
            appData.state = APP_STATE_RX;       // change state to RX and wait for next received byte
        }
    } 

Sin embargo, cada vez que ingreso (transmito) cualquier dato de Putty a PIC, el PIC lo lee como "ý";0xff .

El código PIC suma 1 a 0xff y devuelve NULL;0x0 .

Variables de código PIC32 después de intentar transmitir datos desde el puerto serie

La pantalla Puty siempre está en blanco.

¿Cómo puedo transmitir/recibir datos adecuados entre mi PIC y la PC?

Configuración de UART Configuración de masilla

¡Gracias de antemano!

Editar: - Verifiqué dos veces la configuración del reloj para UART, etc., sin embargo, cada vez que envío algo desde Puty (caracteres o números), todo lo que recibo en el búfer UART_Rx es "ý"; 0xff .

Yo daría un paso atrás y verificaría que las tasas de bits sean buenas simplemente enviando un carácter ASCII legible como 'R' de regreso a la PC en lugar de incrementarlo. El problema con 0xff y 0x00 es que son valores comunes después de que se inicia el código C y podrían ocultar la naturaleza del problema.
Hola Isdi, gracias por tu comentario. En realidad, intenté enviar la letra 'A', 'R', pero produce el mismo resultado. Incluso envié 0x55 y 0xAA alternativamente, sin embargo, cada vez que encuentro 0xff y NULL. Putty permanece en blanco como siempre.
Lamento tener dificultades para analizar su declaración. ¿Quiere decir que incluso si intenta enviar una 'A' codificada desde el PIC (en respuesta a que usted le envió un carácter al PIC), la pantalla Puty no muestra una 'A', sino que no muestra nada o algo personaje "basura"? Recuerde que algunos caracteres ASCII no son realmente imprimibles. También su appData.tx_byte se define como un byte, ¿correcto? Noté que mencionó el envío de datos de 32 bits, los datos binarios no serán "legibles".
Este es un síntoma común del uso de diferentes velocidades en baudios u otras configuraciones en cada extremo.
"pero en cambio no muestra nada o algún personaje "basura"?" No, no muestra ningún carácter basura. No muestra nada. "También su appData.tx_byte se define como un byte, ¿correcto? Noté que mencionó el envío de datos de 32 bits, los datos binarios no serán "legibles"." Dividiré mis datos de 4 bytes en 1 byte y luego los transmitiré uno por uno. Pero esa es la parte posterior. En este momento, tengo problemas para enviar solo datos de 1 byte (char).
@ pjc50, he agregado mis pantallas de configuración de UART y Putty en mi publicación.
Intenté enviar el carácter 'A' de PIC a PuTTY. Sin embargo, la pantalla Putty permanece en blanco. Puedo ver actividad en la línea PIC Tx en el alcance, pero no hay datos en PuTTY.
Comenzaría aún más atrás, alternando un poco a una velocidad conocida para verificar que el reloj del sistema esté funcionando a la velocidad que cree que es.
Hola, @Scott Seidman, muchas gracias. Me había perdido la configuración del reloj "POSCMOD". Lo configuré y ahora puedo ver los datos en masilla según sea necesario.
Por favor, publique una respuesta para que pueda marcarla como aceptada. ¡Muchas gracias una vez más!

Respuestas (1)

Para todas las preguntas relacionadas con el tiempo, recomiendo comenzar con algo muy simple que confirme todas las configuraciones del reloj del sistema. Hacer parpadear un LED a una velocidad conocida es una forma de hacerlo.

La configuración del reloj puede ser complicada, y el paso 1 es asegurarse de que lo hizo bien. Incluso si tiene la configuración de su reloj arruinada, los PIC tienden a encontrar un modo para comenzar. Comienzo casi todos los proyectos asegurándome de tener el reloj correcto.