Forum: Mikrocontroller und Digitale Elektronik UART über Virtuellen COM-Port vom ST-Link 2.1


von RH (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,

über den VCP eines ST-Link 2.1 möchte ich Debugging Strings an die 
Konsole am Rechner schicken. Das Funktioniert prinzipiell auch, jedoch 
spielt die Übertragung immer wieder verrückt und in der Konsole werden 
wild Zeichen angezeigt, die nicht angezeigt werden sollten (Siehe 
angehängtes Bild).

Der Mikrocontroller sendet zu Testzwecken momentan jede Sekunde "HA" 
raus.

Wie gesagt funktioniert das auch allerdings kommt es immer wieder zu 
falschen Zeichen. Diese werden auch wesentlich schneller als es der 
1Sek-Takt ja eigentlich zulassen sollte übermittelt.
Weitere Eckdaten:
Baud: 115200
Datenbits: 8
Stopbits: 1
Parity: Keine

Zum Übertragen der Bytes verwende ich:
HAL_UART_Transmit(&huart1, "HA", 2, 1);

Das TX Kabel vom µC zum ST-Link ist relativ lang (~30cm) könnte das 
eventuell zu Übertragunsgfehlern führen? Ich habe allerdings auch schon 
kleinere Baudraten ausprobiert.

Gruß

von pegel (Gast)


Lesenswert?

Ist es ein Nucleo Board?
Wird SWO benutzt?
Ist TX mit etwas anderem verdrahtet?

von Stefan F. (Gast)


Lesenswert?

RH schrieb:
> in der Konsole werden
> wild Zeichen angezeigt, die nicht angezeigt werden sollten

Kenn ich. Ich glaube das ist ein Bug im Hterm. Andere Terminalprogramme 
sind /zumindest bei mir) nicht betroffen.

von RH (Gast)


Lesenswert?

pegel schrieb:
> Ist es ein Nucleo Board?
> Wird SWO benutzt?
> Ist TX mit etwas anderem verdrahtet?

Nein, es ist ein STM32G071G8 auf einer eigenen Platine. Der STM32G071G8 
unterstützt SWO nicht. Der ST-Link v2.1 stammt von irgendeinen NUCLEO 
Board (welches weiß ich nicht mehr, da er abgetrennt ist). Über CN3 sind 
RX und TX vom Mikrocontroller an den ST-Link angeschlossen. Mittlerweile 
hat er sich wieder gefangen und er schreibt und ließt korrekt. Der Bug 
tritt sehr sporadisch auf.

Stefan ⛄ F. schrieb:
> RH schrieb:
>> in der Konsole werden
>> wild Zeichen angezeigt, die nicht angezeigt werden sollten
>
> Kenn ich. Ich glaube das ist ein Bug im Hterm. Andere Terminalprogramme
> sind /zumindest bei mir) nicht betroffen.

Ber TeraTerm und bei einem weiterem Terminalprogramm hatte ich ähnliche 
allerdings immer leicht andere "Artefakte". Eventuell liegt das Problem 
eher auf der Seite von Windows?

Entschuldigt bitte das späte Antworten und erneutes Aufgreifen des 
Themas. Leider war ich die letzten Tage verhindert.


Eine andere Frage bezüglich des ST-Links: Über den ST-Link konnte ich 
meinen Mikrocontroller auch ganz normal ohne den VCOM debuggen und 
flashen (alles über die STM32CubeIDE). Alle über den ST-Link 
programmierten Chips lassen sich jetzt aber nicht mehr mit meinem J-Link 
flashen. Wisst ihr, ob der ST-Link irgendwas in der Richtung sperrt und 
wie man das rückgangig machen kann? Über ST-Link Utility mit dem ST-Link 
lässt sich der Controller problemlos flashen.

Gruß :)

von jo mei (Gast)


Lesenswert?

RH schrieb:
> ein STM32G071G8 auf einer eigenen Platine

Ich fürchte - nach deinen recht wilden Symptomen zu urteilen - wir
müssten mal einen Blick auf deinen Schaltplan und den Aufbau
werfen. Für meinen Teil vermute ich kleine bis mittlere Defizite
in deiner Schaltung die zu komischen Effekten führen. Als erstes
fiel mir ein dass durch den Nucleo-ST-Link eventuell keine
adäquate Masseverbindung für die serielle Verbindung existiert.

Ist natürlich erst mal Spekulation meinerseits ....

von RH (Gast)


Lesenswert?

RH schrieb:
> Eine andere Frage bezüglich des ST-Links: Über den ST-Link konnte ich
> meinen Mikrocontroller auch ganz normal ohne den VCOM debuggen und
> flashen (alles über die STM32CubeIDE). Alle über den ST-Link
> programmierten Chips lassen sich jetzt aber nicht mehr mit meinem J-Link
> flashen. Wisst ihr, ob der ST-Link irgendwas in der Richtung sperrt und
> wie man das rückgangig machen kann? Über ST-Link Utility mit dem ST-Link
> lässt sich der Controller problemlos flashen.

Die Frage hat sich soeben erledigt. Ich habe bei der ST-Link Utility die 
Möglichkeit entdeckt einen "full chip erase" durchzuführen. Danach lässt 
sich der Controller auch wieder über J-Link flashen. Anscheinend wird da 
also irgendetwas gesperrt. Falls jemand mehr darüber weiß, bin ich aber 
auch über Information dankbar!

jo mei schrieb:
> RH schrieb:
>> ein STM32G071G8 auf einer eigenen Platine
>
> Ich fürchte - nach deinen recht wilden Symptomen zu urteilen - wir
> müssten mal einen Blick auf deinen Schaltplan und den Aufbau
> werfen. Für meinen Teil vermute ich kleine bis mittlere Defizite
> in deiner Schaltung die zu komischen Effekten führen. Als erstes
> fiel mir ein dass durch den Nucleo-ST-Link eventuell keine
> adäquate Masseverbindung für die serielle Verbindung existiert.
>
> Ist natürlich erst mal Spekulation meinerseits ....

Die Verbindung ist natürlich alles andere als Optimal und momentan 
ziemlich provisorisch, da Debugging über VCOM eigentlich erstmal nicht 
vorgesehen war. RX- und TX gehen momentan wie erwähnt über 30cm Kabel an 
die ST-Link Platine. Dazu kommt, dass der STM32 ohne externen Oscillator 
betrieben wird. Alles bestimmt nicht gerade vorteilhaft bei einem 
asynchronen Übertragunsgeweg...

von RH (Gast)


Lesenswert?

jo mei schrieb:
> Ich fürchte - nach deinen recht wilden Symptomen zu urteilen - wir
> müssten mal einen Blick auf deinen Schaltplan und den Aufbau
> werfen.

Liefer ich sobald möglich :)

von jo mei (Gast)


Lesenswert?

RH schrieb:
> Dazu kommt, dass der STM32 ohne externen Oscillator
> betrieben wird.

Ich habe mir jetzt nicht die Stabilität des internen Oszillators
im Datenblatt vorgenommen, aber ich sage mal so aus dem hohlen
Bauch heraus dass das für eine saubere Kommunikation nicht
vernünftig und zuverlässig funktionieren kann (ich würde mir das
für meine Schaltungen jedenfalls nie antun wollen). Die
Ungenauigkeit und der (Temperatur-) Drift wird immer wieder
Probleme bereiten.

So sind wir auch wieder bei einem alten leidigen Thema: wenn man
nicht das gesamte Umfeld kennt ist es schwer eine vernünftige
Ferndiagnose oder Hilfestellung zu geben.

In deinem Fall wage ich jetzt die Vorhersage dass deine Fähig-
keiten und Tätigkeiten eher auf der Softwareseite liegen und
die Hardware bei dir einfach "zu funktionieren hat", Hauptsache
die Drähte sind verbunden.

von W.S. (Gast)


Lesenswert?

RH schrieb:
> Ber TeraTerm und bei einem weiterem Terminalprogramm hatte ich ähnliche
> allerdings immer leicht andere "Artefakte". Eventuell liegt das Problem
> eher auf der Seite von Windows?

Eher nicht. setze mal deine UART Einstellung auf 2 Stopbits. Danach 
sollte es 100% ordentlich funktionieren. Ich habe es bei einigen 
USB/Serial Adaptern schon gehabt, daß man da gelegentlich die 
Synchronisation verliert, wenn nur mit nur einem Stopbit gesendet wird.

RH schrieb:
> Danach lässt
> sich der Controller auch wieder über J-Link flashen.

Die Software von Segger bietet Entsperren und Bulkerase an, damit 
funktioniert das alles auch ohne einen STLink.

W.S.

von Walter T. (nicolas)


Lesenswert?

W.S. schrieb:
> Die Software von Segger bietet Entsperren und Bulkerase an

Wie heißt denn diese Software? Funktioniert die auch mit dem EDU? 
Irgendwie bin ich noch nicht fündig geworden, ob es auch für das EDU ein 
ähnliches Werkzeug wie das ST-Link-Utility gibt.

von RH (Gast)


Lesenswert?

W.S. schrieb:
> Eher nicht. setze mal deine UART Einstellung auf 2 Stopbits. Danach
> sollte es 100% ordentlich funktionieren. Ich habe es bei einigen
> USB/Serial Adaptern schon gehabt, daß man da gelegentlich die
> Synchronisation verliert, wenn nur mit nur einem Stopbit gesendet wird.

Werde ich machen. Momentan funktioniert die Kommunikation wieder 
einwandfrei.

W.S. schrieb:
> Die Software von Segger bietet Entsperren und Bulkerase an, damit
> funktioniert das alles auch ohne einen STLink.

Der Name der Software würde mich auch interessieren. J-Flash Lite bietet 
diese Funktion nicht.

jo mei schrieb:
> In deinem Fall wage ich jetzt die Vorhersage dass deine Fähig-
> keiten und Tätigkeiten eher auf der Softwareseite liegen und
> die Hardware bei dir einfach "zu funktionieren hat", Hauptsache
> die Drähte sind verbunden.

Wie bereits erwähnt ist das ganze recht provisorisch. Mit deiner 
Vermutung hast du recht. Ich bin kein Elektroingenieur und daher bedarf 
es in einigen Hardware-Angelegenheiten Nachhilfe.

von Fragezeichen (Gast)


Lesenswert?

RH schrieb:
> Die Frage hat sich soeben erledigt. Ich habe bei der ST-Link Utility die
> Möglichkeit entdeckt einen "full chip erase" durchzuführen. Danach lässt
> sich der Controller auch wieder über J-Link flashen. Anscheinend wird da
> also irgendetwas gesperrt. Falls jemand mehr darüber weiß, bin ich aber
> auch über Information dankbar!

Hast Du evtl. das Debuginterface nicht aktiviert? Bei der Codeerstellung 
mit MX ist dieses standardmäßi nicht aktiv. Das führt dazu das man nur 
einmal programmieren kann und danach nicht mehr.

von Stefan F. (Gast)


Lesenswert?

RH schrieb:
> Eventuell liegt das Problem eher auf der Seite von Windows?

Das passiert auch unter Linux.

Theoretisch können sich UART Empfänger nach Übertragungsstörungen besser 
fangen, wenn man 2 Stopp-Bits sendet. Vielleicht hilft das, habe ich am 
ST-Link noch nicht probiert.

von Stefan F. (Gast)


Lesenswert?

RH schrieb:
> Alle über den ST-Link
> programmierten Chips lassen sich jetzt aber nicht mehr mit meinem J-Link
> flashen. Wisst ihr, ob der ST-Link irgendwas in der Richtung sperrt und
> wie man das rückgangig machen kann?

Der ST-Link selbst nicht, aber dein Programm vielleicht.

Standardmäßig (seitens der Hardware) sind bei allen STM32 Chip sowohl 
SWD als auch JTAG aktiviert. Der Code, den Cube MX generiert, 
deaktiviert aber beides standardmäßig. Wenn du in Cube MX einstellst, 
dass du SWD verwenden willst, deaktiviert er nur JTAG.

Dazu gibt es relevante Optionen zum Verbindungsaufbau zwischen dem 
Adapter und dem µC. Die Optionen werden je nach Programm unterschiedlich 
genannt:

Hardware Reset: Die Verbindung wird unmittelbar nach dem Reset Impuls 
aufgebaut. Hier ist es wichtig, dass dein Programm die SWD/JTAG 
Schnittstelle nicht sofort beim Start deaktiviert. Ein delay(1000) am 
Anfang kann hilfreich sein.

Connect on Reset: Die Verbindung wird während des Reset aufgebaut. Da 
das Programm dann noch nicht läuft, sind SWD und JTAG zu diesem 
Zeitpunkt immer aktiv.

Wenn du einen dicken Kondensator am Reset Pin hast, kann dieser störend 
wirken. Ich meine mich zu erinnern, dass irgendwo maximal 100nF 
empfohlen wurden. Andererseits brauche ich aber oft deutlich größere 
Kondensatoren, weil das Netzteil in den ersten hundert ms noch instabil 
arbeitet.

Software Reset: Dazu darf die SWD/JTAG Schnittstelle nicht deaktiviert 
sein. Der Adapter sendet ein Soft-Reset Signal über diese Schnittstelle.

Ohne Reset: Auch hier darf die Schnittstelle nicht deaktiviert sein. Wo 
genau der Unterschied zu "Software Reset" ist, habe ich nicht 
herausfinden können.

Es gibt noch eine andere Möglichkeit, zu verhindern dass dein Programm 
startet und die Schnittstelle deaktiviert: Den Boot0 Pin auf High 
setzen, um den internen Bootloader zu aktivieren. Denn der lässt auch 
SWD/JTAG aktiv.

Das alles erklärt dein Problem nicht, aber es hilft dir hoffentlich, der 
eigentlichen Ursache auf die Schliche zu kommen.

von Stefan F. (Gast)


Lesenswert?

jo mei schrieb:
> Ich habe mir jetzt nicht die Stabilität des internen Oszillators
> im Datenblatt vorgenommen, aber ich sage mal so aus dem hohlen
> Bauch heraus dass das für eine saubere Kommunikation nicht
> vernünftig und zuverlässig funktionieren kann (ich würde mir das
> für meine Schaltungen jedenfalls nie antun wollen). Die
> Ungenauigkeit und der (Temperatur-) Drift wird immer wieder
> Probleme bereiten.

Zumindest für STM32L0, F1 und F3 kann ich dies bestätigen. Es ist ein 
Glücksspiel. Es klappt aber erheblich besser als bei den alten AVR 
Controllern.

Wenn bei mir Hterm (trotz Quarz) plötzlich nur noch Müll ausgibt, starte 
ich Hterm neu und es geht meistens sofort wieder.

von jo mei (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Wenn bei mir Hterm (trotz Quarz) plötzlich nur noch Müll ausgibt, starte
> ich Hterm neu und es geht meistens sofort wieder.

Wenn bei mir Hterm (trotz Quarz und sonstigen stabilen Parametern)
plötzlich nur noch Müll ausgeben würde wäre das für mich das ein
Grund das Programm wegzuwerfen oder zumindest nie mehr zu benutzen.
Es gibt genügend andere (und bessere) Programme.

von Stefan F. (Gast)


Lesenswert?

jo mei schrieb:
> wäre das für mich das ein Grund das Programm
> wegzuwerfen oder zumindest nie mehr zu benutzen.

Leider hat Hterm einige nützliche Merkmale, die kein anderes 
Terminalprogramm hat.

Aber ja: Meistens benutze auch ich ein anderes (cutecom oder einfach nur 
cat).

von jo mei (Gast)


Lesenswert?

RH schrieb:
> Momentan funktioniert die Kommunikation wieder einwandfrei.

Dann  kann ja dein Thread geschlossen werden und wir brauchen
dir nicht weiter helfen, und alle können frohen Mutes nach
Hause gehen.

Nicht wahr?

von dummschwaetzer (Gast)


Lesenswert?

>HAL_UART_Transmit(&huart1, "HA", 2, 1);
mach mal dein timeout auf 2

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.