PIC32 empfängt/sendet falsche Daten auf der seriellen Schnittstelle

Ich habe http://microchipdeveloper.com/harmony:example-usart-dynamic-wf32 verwiesen , um den UART zu konfigurieren und Daten zwischen PC (Putty) und meinem PIC32MZ zu senden/empfangen.

Das Demoprogramm im Link nimmt die Daten entgegen, fügt sie hinzu und sendet sie zurück an 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
        }
    } 

Immer wenn ich jedoch Daten von Putty an PIC eingebe (übertrage), liest der PIC sie als "ý";0xff .

Der PIC-Code fügt 1 zu 0xff hinzu und sendet NULL;0x0 zurück.

PIC32-Codevariablen nach dem Versuch, Daten von der seriellen Schnittstelle zu übertragen

Der Putty-Bildschirm ist immer leer.

Wie kann ich korrekte Daten zwischen meinem PIC und PC übertragen/empfangen?

UART-Einstellungen Putty-Einstellungen

Vielen Dank im Voraus!

Bearbeiten: - Ich habe die Uhreinstellungen für den UART usw. noch einmal überprüft, aber jedes Mal, wenn ich etwas von puty sende (Zeichen oder Zahlen), ist alles, was ich im UART_Rx-Puffer erhalte, "ý"; 0xff .

Ich würde einen Schritt zurücktreten und überprüfen, ob die Bitraten gut sind, indem ich einfach ein lesbares ASCII-Zeichen wie „R“ an den PC zurücksende, anstatt zu inkrementieren. Das Problem mit 0xff und 0x00 ist, dass es sich um gemeinsame Werte nach der Initialisierung des C-Codes handelt, die die Art des Problems verbergen könnten.
Hallo Idi, danke für deinen Kommentar. Eigentlich habe ich versucht, den Buchstaben 'A', 'R' zu senden, aber wenn er das gleiche Ergebnis liefert. Ich habe sogar abwechselnd 0x55 und 0xAA gesendet, aber jedes Mal, wenn ich auf 0xff und NULL stoße. Putty bleibt wie immer leer.
Es tut mir leid, dass ich Schwierigkeiten habe, Ihre Aussage zu analysieren. Wollen Sie sagen, dass selbst wenn Sie versuchen, ein hartcodiertes 'A' vom PIC zu senden (als Antwort darauf, dass Sie dem PIC ein Zeichen senden), der Putty-Bildschirm kein 'A' anzeigt, sondern nichts oder einiges "Müll"-Charakter? Denken Sie daran, dass einige ASCII-Zeichen nicht wirklich druckbar sind. Auch Ihre appData.tx_byte ist als Byte definiert, richtig? Mir ist aufgefallen, dass Sie das Senden von 32-Bit-Daten erwähnt haben. Binärdaten sind nicht "lesbar".
Dies ist ein häufiges Symptom bei der Verwendung unterschiedlicher Baudraten oder anderer Einstellungen an beiden Enden.
"Aber stattdessen zeigt es nichts oder irgendein "Müll"-Zeichen?" Nein, es zeigt keinerlei Junk-Charakter. Es zeigt nichts an. "Auch Ihre appData.tx_byte ist als Byte definiert, richtig? Ich habe bemerkt, dass Sie erwähnt haben, dass Sie 32-Bit-Daten übertragen, binäre Daten werden nicht "lesbar" sein." Ich werde meine 4-Byte-Daten in 1-Byte aufteilen und sie dann einzeln übertragen. Aber das ist der spätere Teil. Im Moment habe ich Probleme, nur 1 Byte Daten (char) zu senden.
@ pjc50, ich habe meine UART- und Putty-Einstellungsbildschirme in meinem Beitrag hinzugefügt.
Ich habe versucht, das Zeichen 'A' von PIC an Putty zu senden. Der Kitt-Bildschirm bleibt jedoch leer. Ich kann Aktivität auf der PIC-Tx-Leitung im Bereich sehen, aber keine Daten auf Putty.
Ich würde noch weiter hinten beginnen und mit einer bekannten Rate ein wenig umschalten, um zu überprüfen, ob die Systemuhr mit der von Ihnen angenommenen Rate läuft.
Hallo @Scott Seidman, vielen Dank. Ich hatte die Uhreinstellung "POSCMOD" verpasst. Habe es konfiguriert und jetzt kann ich die Daten wie gewünscht in Putty sehen.
Bitte posten Sie eine Antwort, damit ich sie als akzeptiert markieren kann. Tausend Dank noch einmal!

Antworten (1)

Bei allen Fragen zum Timing empfehle ich, mit etwas ganz Einfachem zu beginnen, das alle Systemuhrkonfigurationen bestätigt. Das Blinken einer LED mit einer bekannten Rate ist eine Möglichkeit, dies zu tun.

Das Einrichten der Uhr kann schwierig sein, und Schritt 1 besteht darin, sicherzustellen, dass Sie es richtig gemacht haben. Selbst wenn Sie Ihre Uhrkonfiguration ganz durcheinander bringen, neigen PICs dazu, einen Modus zu finden, in dem sie starten können. Ich beginne so ziemlich jedes Projekt, um sicherzustellen, dass ich die richtige Uhr habe.