Forum: Mikrocontroller und Digitale Elektronik STM32 UART Merkwuerdiges Verhalten


von Jonas (STM32) (Gast)


Lesenswert?

Hallo Zusammen,

ich habe folgendes merkwuerdiges Verhalten eines STM32F107.
Ich habe ein kleines Programm, welches per UART ein Zeichen empfängt und 
entsprechend etwas veranlassen soll.
Sobald ich ein Zeichen sende, lasse ich eine LED toggeln.

Falls ich den STM32 mit einem Netzteil am Schreibtisch betreibe 
funktioniert es wie es soll: Ein Zeichen LED an beim zweiten Zeichen LED 
aus.

Schliesse ich jedoch den STM32 am meinem Auto an, dann geht die LED an 
und wieder aus und das bei nur einem Zeichen.

Wie kann das sein?
1
  while (1)
2
  {
3
4
  
5
    if(HAL_UART_Receive(&huart1,&usart_rx_data0, 1, 100) == HAL_OK)
6
    {
7
      HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_3);
8
      usart_rx_buffer[usart_rx_idx++] = usart_rx_data0; //usart_rx_data[0];
9
      if(usart_rx_idx > 1)
10
      {
11
        // \r\n  -- CR + LF 
12
        if (usart_rx_buffer[usart_rx_idx-2]==0x0d && usart_rx_data0==0x0a)
13
        {          
14
          for (i=0;i<usart_rx_idx;i++)
15
            uart_daten[i]=usart_rx_buffer[i];
16
      
17
          len = usart_rx_idx - 2;
18
          usart_rx_idx = 0; 
19
          CommandComplete(uart_daten[0], (uint8_t *)&uart_daten[1], len-1); 
20
        }
21
      }      
22
    }      
23
  }

von Örnithologe (Gast)


Lesenswert?

Da fehlt eben das entsprechende KB-Zeichen.

von Dirk (Gast)


Lesenswert?

Bei einem Fiat z.B. ein typisches Verhalten.

von Jonas (STM32) (Gast)


Lesenswert?

Für die Stromversorgung benutze ich einen automotiv ldo tle42754 mit der 
nötigen Beschatung. Müsste das nicht ausreichen?

Grüße
Jonas

von Nuhr (Gast)


Lesenswert?

Örnithologe schrieb:
> Da fehlt eben das entsprechende KB-Zeichen.

Dirk schrieb:
> Bei einem Fiat z.B. ein typisches Verhalten.

Wenn man nichts vernünftiges beitragen kann, warum muß dann immer so ein 
furz hingeschissen werden?
Da gibt es nur eins von Nuhr!
https://www.youtube.com/watch?v=5KT2BJzAwbU

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Jonas (STM32) schrieb:
> Für die Stromversorgung benutze ich einen automotiv ldo tle42754 mit der
> nötigen Beschatung. Müsste das nicht ausreichen?

Wer sendet denn im Auto das Zeichen an dem STM32? Und wie wird dieser 
Sender gespeist? Da fehlen noch so ein paar Infos. Interessant wäre auch 
die Verkabelung der Teile.
Deine Routine setzt auch voraus, das der Sender immmer 0x0d, 0x0a als 
Zeilenabschluss sendet, was z.B. eine Linux/UNIX/Apple Kiste nicht tut.

von Aa B. (aaab)


Lesenswert?

Jonas (STM32) schrieb:
> Hallo Zusammen,
>
> ich habe folgendes merkwuerdiges Verhalten eines STM32F107.
> Ich habe ein kleines Programm, welches per UART ein Zeichen empfängt und
> entsprechend etwas veranlassen soll.
> Sobald ich ein Zeichen sende, lasse ich eine LED toggeln.

> Schliesse ich jedoch den STM32 am meinem Auto an, dann geht die LED an
> und wieder aus und das bei nur einem Zeichen.
>
HI Jonas,

Mit was hast Du dein STM board verbunden wenn Du in dein Auto bist, 
also, wo empfängst Du die Bytes her? Über laptop->COM POrt oder?

von Jonas (STM32) (Gast)


Lesenswert?

Hallo,

ihr habt natuerlich recht, das war bisschen wenig Information.

Am STM32 ist ein BLE CC2540 dran, dieser empfaengt via Handy die 
Zeichen.
Am STM32 haengt noch ein CAN Transreceiver, welches ich nicht 
initialisiere und dessen Standby Pin aktiv ist.

Das Phaenomen tritt schon auf bevor ich zum Zeilenabschluss komme, 
weshalb ich vermute, dass es nicht mit verschiedenen (Betriebs)Systemen 
zu tun hat.

Am Fahrzeug ist der CAN-BUS angeschlossen, wie ich schon schrieb, ist 
der Transreceiver deaktiviert.

Um quasi die Fahrzeug Umgebung auch am Schreibtisch zu erhalten, sende 
mit Hilfe eines anderen Gerätes permanent CAN Nachrichten an den STM32.


Gruesse
Jonas

von pegel (Gast)


Lesenswert?

Ist vielleicht an diesem Standort noch eine andere BT Quelle im Spiel 
die eine Verbindung sucht?

von Gerd E. (robberknight)


Lesenswert?

Jonas (STM32) schrieb:
> Schliesse ich jedoch den STM32 am meinem Auto an, dann geht die LED an
> und wieder aus und das bei nur einem Zeichen.
>
> Wie kann das sein?

Vermutlich ein EMV-Problem.

Entweder empfängt Dein µC ein zusätzliches "Geister"-Zeichen oder aber 
er macht einen Reset bei dem die LED auch ausgeht.

Lass den mal beim Reset eine spezifische Blinkfolge ausgeben, dann 
kannst Du den sofort erkennen.

Jonas (STM32) schrieb:
> Für die Stromversorgung benutze ich einen automotiv ldo tle42754 mit der
> nötigen Beschatung. Müsste das nicht ausreichen?

Das Thema EMV ist nicht mit der Auswahl eines Spannungsreglers gelöst...

von Jonas (STM32) (Gast)


Lesenswert?

Hallo,

ich habe das ganze mal bei laufendem und bei stehendem Motor getestet 
und dabei eine andere LED beim Reset eine Blinkfolge ausgeben lassen.

Der STM32 resetet nicht; bei jedem Zeichen welches ich sende kommen beim 
STM32 immer zwei Zeichen an.

Schliesse ich es jedoch im Labor an, kommt auch genau ein Zeichen an.

Wenn es ein EMV Problem waere, muesste ich dann nicht das gleiche 
Phaenomen auch im Labor beobachten? Wie kann ich sicher sein, dass ein 
EMV Problem ist und wie kann ich der Sache Herr werden (neues Design )?


LG
Jonas

von W.S. (Gast)


Lesenswert?

Matthias S. schrieb:
> Deine Routine setzt auch voraus, das der Sender immmer 0x0d, 0x0a als
> Zeilenabschluss sendet, was z.B. eine Linux/UNIX/Apple Kiste nicht tut.

Das ist Quatsch, denn gesendet wird auch bei Linux genau DAS, was das 
sendende Programm gesendet haben will. Wenn du dein Terminalprogramm so 
einrichten kannst, daß es nen Recordseparator ($18) anstelle des 
Zeilenumbruchs sendet, dann kriegst du auch 0x18 empfangen. Genau so 
geht's mit CRLF - auch dann, wenn irgend ein OS als Zeilenwechsel nur 
auf 0A und ein anderes nur auf 0D achtet.

W.S.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

W.S. schrieb:
> Genau so
> geht's mit CRLF - auch dann, wenn irgend ein OS als Zeilenwechsel nur
> auf 0A und ein anderes nur auf 0D achtet.

Vllt. liest du nochmal den Beitrag. Die STM32 Routine wartet zwingend 
auf 0x0D,0x0A und das ist nicht bei jedem Terminal immer der Fall. Man 
muss es ggf. extra einstellen.

von W.S. (Gast)


Lesenswert?

Matthias S. schrieb:
> Man
> muss es ggf. extra einstellen.

EBEN.

Sag ich doch die ganze Zeit!

Aber mal davon abgesehen, ist die Denke des TO schon ein bissel simpel: 
"Sobald ich ein Zeichen sende, lasse ich eine LED toggeln." Von der 
Möglichkeit, ein richtiges Kommando zu senden und auszuwerten, wie z.B.
LED 1 crlf
oder
LED 0 crlf

scheint er noch nichts vernommen zu haben. Manchmal bin ich schon ein 
bissel erstaunt über die hier allgegenwärtige Diskrepanz in allen 
Dingen. Kindergarten, aber mit dem Anspruch, höchste Ingenieurskunst 
betreiben zu wollen.

W.S.

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.