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
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?
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
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
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; |
Wie wär's mit Kurzschließen von RX und TX am STM, um zumindest eine Fehlinterpretation innerhalb deines Programmes auszuschließen?
Welche Pegel verwendest Du denn für High und Low? 3.3V oder 5V? Ist der serielle Adapter entsprechend konfiguriert?
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.
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?
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.
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.