Forum: Mikrocontroller und Digitale Elektronik STM32 UART andere Daten empfangen wie gesendet


von Maurice H. (maurice_h418)


Lesenswert?

Hallo zusammen,

ich habe das Problem, dass wenn ich Daten vom µC sende, andere Daten am 
PC empfange.
Ich benutze HAL_UART_Transmit Funktion. Die Parameter am Seriellen 
Monitor und auf dem µC sind die gleichen.

Senden:    54, 3A, 30, 32, 35, 2e, 39, 37
Empfangen: D5, EC, B6, 56, 36, 6B, 91, 00

Wenn ich einen Logic-Analyser benutze sehe ich auch, dass die richtigen 
Daten gesendet werden. Benutze ich jetzt aber einen seriellen Adapter, 
sehe ich andere Daten.

Hat von euch einer eine Idee, woran das liegen könnte bzw. was ich 
falsch mache?

Gruß Maurice

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Maurice H. schrieb:
> Benutze ich jetzt aber einen seriellen Adapter,
> sehe ich andere Daten.
>
> Hat von euch einer eine Idee, woran das liegen könnte bzw. was ich
> falsch mache?

Vielleicht passt dein Serieller Adapter nicht zu deinen Datensignale, 
die vom µC kommen (Invertierung, Pegeldefinition).

Was für einen Adapter verwendest du?
Wie sehen die Signale auf dem LA aus?

von Sebastian S. (amateur)


Lesenswert?

Daten invertiert?
Irgendein Teiler verkehrt?
Falsche Baudrate eingestellt?
Anzahl an Datenbits oder Parität falsch?
Zu sparsam mit den Stoppbits? Sicherheitshalber eins mehr.
Falsche Spannung/Pegel?

Ist das Bit-/Bytemuster reproduzierbar?

: Bearbeitet durch User
von Georg (Gast)


Lesenswert?

Maurice H. schrieb:
> sehe ich auch, dass die richtigen
> Daten gesendet werden. Benutze ich jetzt aber einen seriellen Adapter,
> sehe ich andere Daten.

Auf der gleichen Leitung? Dann siehst du etwas falsch. Die Daten am Ende 
einer seriellen Leitung sind die gleichen wie am Anfang, also geht es um 
die Interpretation und/oder Synchronisation.

Maurice H. schrieb:
> Die Parameter am Seriellen
> Monitor und auf dem µC sind die gleichen

Das ist wohl nicht so.

Georg

von Maurice H. (maurice_h418)


Angehängte Dateien:

Lesenswert?

Ja, daten sind reproduzierbar. Es kommt immer das selbe.
Datenbits sind 8 und Parität verwende ich nicht.
Stoppbits habe ich gerade erhöht. Daten ändern sich ein bisschen, aber 
ist nichts sinnvolles.

Ich sende gerade als ASCII: '1,2,3,4,5,6,7,8'.
Im Logic-Analyser passen die Daten.
Im Seriellen Monitor kommt aber als hex: 67,B3,76,56,36,16,F6,00

Das sind meine Parameter auf dem µC
1
  huart1.Instance = USART1;
2
  huart1.Init.BaudRate = 19200;
3
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
4
  huart1.Init.StopBits = UART_STOPBITS_1;
5
  huart1.Init.Parity = UART_PARITY_NONE;
6
  huart1.Init.Mode = UART_MODE_TX_RX;
7
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
8
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;

von Thilo L. (bc107)


Lesenswert?

Wie wär's mit Kurzschließen von RX und TX am STM, um zumindest eine 
Fehlinterpretation innerhalb deines Programmes auszuschließen?

von Markus M. (adrock)


Lesenswert?

Welche Pegel verwendest Du denn für High und Low? 3.3V oder 5V? Ist der 
serielle Adapter entsprechend konfiguriert?

von NichtWichtig (Gast)


Lesenswert?

timing?

Stimmt die Baudrate auf beiden Seiten?

Das ein PC das falsche Timing hat ist eher ungewöhnlich, beim 
selbstgestrickten µC aber schnell passiert.

Aber Du hast ja einen LA und solltest dort die Bit/Bytezeit exakt messen 
können.

Ich nutze diverse BluePills auch per Serial zum PC und es paßt mit 
CubeMX/HAL perfekt, auch bei knapp 1MBaud.

von Nick M. (Gast)


Lesenswert?

Maurice H. schrieb:
> Benutze ich jetzt aber einen seriellen Adapter,
> sehe ich andere Daten.

Was ist das für ein Adapter?
Laut LA verwendest du wohl RS232 TTL, also ohne "richtige" Pegel. Denn 
der Ruhepegel von RS232 ist -12V. Also, ist dein Adapter einer der 
+/-12V erwartet oder auch TTL?

von Maurice H. (maurice_h418)


Lesenswert?

Ich glaube Nick hat die richtige Antwort.
Ich versuche mit dem µC also TTL Level, an eine RS-232 Schnittstelle zu 
senden. Da passen natürlich die Pegel nicht.
Ich werde mit einen Pegelwandler besorgen und das ausprobieren.

Vielen dank an alle.

von Nick M. (Gast)


Lesenswert?

Maurice H. schrieb:
> Ich werde mit einen Pegelwandler besorgen und das ausprobieren.

Es gibt von FTDI welche, die 3V3 oder 5V "TTL" erwarten (das ist nämlich 
invertiert) und auf USB die passenden Signale ausgeben. Kosten so 15 € 
rum. Kauf dir nur FTDI oder auch MOXA, mit denen gibt es keine Probleme.
Von allen Anderen würde ich deutlich Abstand halten, auch wenn sie noch 
so billig sind.

von W.S. (Gast)


Lesenswert?

Maurice H. schrieb:
> Hat von euch einer eine Idee, woran das liegen könnte bzw. was ich
> falsch mache?

Ja, da habe ich eine Idee: Du solltest lieber mit 2 Stopbits senden, das 
verschafft deiner Transmission soviel Reserve, daß der Empfänger den 
Byteanfang zuverlässig erkennen kann. Die Folge ist natürlich, daß du 
auch vom PC aus mit 2 Stopbits senden mußt, sonst erstickt dein µC in dn 
Daten.

Ich habe diesen Synchronisationsverlust selber schon öfters mit den 
verschiedendsten USB-Serial Konvertern erlebt. Mit 2 Stopbits war der 
Spuk zuende und alles ging glatt wie gewünscht.

Maurice H. schrieb:
> Ich benutze HAL_UART_Transmit Funktion.

Die kenne ich nicht, aber eines sei gesagt: beide Richtungen sollten 
gepuffert werden und per Interrupt bedient sein.

W.S.

von Maurice H. (maurice_h418)


Lesenswert?

W.S. schrieb:
> Ja, da habe ich eine Idee: Du solltest lieber mit 2 Stopbits senden, das
> verschafft deiner Transmission soviel Reserve, daß der Empfänger den
> Byteanfang zuverlässig erkennen kann. Die Folge ist natürlich, daß du
> auch vom PC aus mit 2 Stopbits senden mußt, sonst erstickt dein µC in dn
> Daten.

Danke für den Tipp. Werde ich dementsprechend noch anpassen.

>Die kenne ich nicht, aber eines sei gesagt: beide Richtungen sollten
>gepuffert werden und per Interrupt bedient sein

Ja, habe ich schon umgeschrieben. Danke

Nick M. schrieb:
> Es gibt von FTDI welche, die 3V3 oder 5V "TTL" erwarten

Ich muss die Daten an eine SPS mit serieller Schnittstelle senden, daher 
brauche ich einen Pegelwandler. Ich werde mir aber den Tipp merken.

von Nick M. (Gast)


Lesenswert?

Maurice H. schrieb:
> Ich muss die Daten an eine SPS mit serieller Schnittstelle senden, daher
> brauche ich einen Pegelwandler.

Ah, dann gehört auf deine Platine ein MAX232 (MAX3232) oder ähnliches.

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
Noch kein Account? Hier anmelden.