Hallo. Ich habe Probleme mit RS485 und meinem STM32F103RC. Am STM hängt ein LTC2870 (siehe Anhang) den ich über die Usart3 und die nötigen Pins beschalte. Rs232 Betrieb und Rs422 Betrieb (manchmal auch als Rs485-Full-Duplex bezeichnet) habe ich getestet (Rs232 direkt an PC, Rs422 an Usb-Konverter) und diese funktionieren auch super. Zu guter Letzt möchte ich nun auch den Rs485-Modus in betrieb nehmen. Am Computer hängt ein DA-70157 Usb-Rs485 Konverter von Digitus. Was ist nun genau mein Problem: Ich kann Daten vom STM über den LTC und den DA an den Computer senden, bekomme allerdings keine Reaktion (Interrupt) auf Nachrichten vom Computer über den DA an den LTC an dem STM. Beschaltung der Pins am LTC im Rs485 betrieb: FEN->GND, 485/n232->High, nRXEN->GND, DXEN->High, TE485->High, H/nF->High, LB->GND. Im Vergleich die Schaltung im funktionierenden Rs422 Betrieb: FEN->GND, 485/n232->High, nRXEN->GND, DXEN->High, TE485->High, H/nF->Low, LB->GND - also genauso bis auf H/nF->Low. Meine Fragen: - Kann mir jemand sagen ob die Beschaltung des LTC2870 für den Rs485 Betrieb korrekt ist (Laut Datenblatt alles wie bei Rs422 bis auf H/nF, so verstehe ich es zumindest)? - Hat jemand die Funktionalität des DA-70157 testen können und kann mir versichern, dass es nicht am Konverter liegt? Oder verlangt der DA-70157 beim Senden das setzen von DTR oder RTS Signalen? Ich hoffe ihr könnt mir weiterhelfen. Ich möchte noch einmal betonen, dass das senden+empfangen über den LTC2870 im Rs422 und Rs232 korrekt funktionieren, also stellt sich für mich die Frage ob er am Board korrekt angeschlossen nicht.
Ich darf an dieser Stelle für die Hilfe danken und entwarnen: alles funktioniert, man muss nur darauf achten: im CR1 des Usart nur beim Senden das TX-Mode-EN bit gesetzt zu haben, sonst immer deaktiviert und umgekehrt für das RX-Mode-EN bit. Einziges Problem was ich jetzt noch habe, is das im Empfangsterminal (PC-Seite) jede Übertragung vom STM mit einem <0>=0x0 Terminiert, weil der Sendemodus deaktiviert wird. Falls ich dafür noch eine Lösung finden sollte poste ich die hier auch noch, falls jemand von euch dafür eine Idee hat, würde ich mich freuen. Dazu kurz Erklärung: Vor beginn des Sendens des ersten Bytes deaktiviere ich Rx-Mode-Bit (USART1->CR1 -= 0x04 und aktiviere das Tx-Mode-Bit (USART1->CR1 += 0x08), außerdem setze ich nRXEN->High. Nach dem Senden des letzten Bytes eines Strings aktiviere ich Rx-Mode-Bit und deaktiviere ich Tx-Mode-Bit und setze nRXEN->Low.
Habe bisher keine Lösung für das Phantom-Byte: 0x0 gefunden. Sicher gestellt ist, dass nRXEN->Low erst im Transmission Complete Interrupt gesetzt wird, damit halte ich mich meiner Meinung nach an die Anforderungen von Rs485. Aktivierte Terminierung im LTC2870 (TE-Pin High/Low) spielt keine Rolle, die 0x0 taucht immer beim setzten von nRXEN auf Low auf. Ich nehme das an dieser Stelle einfach so hin. Falls jemand noch eine Idee hat, was ich probieren kann, wäre ich sehr dankbar. Es gibt hier im Forum ja schon einige die eine Rs485-Kommunikation realisiert haben.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.