STM32 startet nach Programmierung erst wenn alle Kabel abgezogen wurden

OP #5097746
Lesenswert?

Hallo,

ich hatte bereits in einem anderen Thema angekündigt, dass meine 
Mikrocontroller rumzicken. Jetzt ist es so schlimm, dass eine Lösung her 
muss.

Die Kondensatorengrößen sind aus dem Datenblatt entnommen. Auf der STM32 
Seite hier im Wiki steht noch ein 100nF Kondensator nach Ground. Mit 
oder ohne macht keinen Unterschied. Ansonsten siehe angehängtes Bild.

Programmiert wird mit CubeMX und SW4STM32 als Eclipse Plugin. Wenn ich 
ein altes Programm nehme tritt der Fehler genauso auf.

Beim Flashen habe ich höchstens jedes 50. Mal einen Verbindungsfehler. 
Würde sagen das funktioniert. Die Kabel sollten mit 10cm auch kurz genug 
sein. Zum Programmieren wird die SWD Schnittstelle von einem STM32F072 
Discovery Board verwendet. GND, SWDIO,SWDCLK und NRST sind verbunden.

Am Anfang lief noch alles so wie es soll: Nach dem Flaschen startet der 
Mikrocontroller neu und führt sein Pprogramm aus.

Ca. 20-50 Flashs später musste ich die Stromversorgung kappen und wieder 
anstecken. Erst dann ist er losgelaufen.

Nach ca. 100 Flashs musste ich erst das UART Kabel abstecken, dann die 
Stromversorgung reseten. Das UART Kabel ist an einem myAVR MK3 
Programmieradapter angeschlossen. Hängt aber am gleichen PC, also keine 
potentialdifferenz.

Nun startet er nur noch sporadisch. Oder wenn ich ihn aus der Schaltung 
rausnehme, nur die Plus und Minusanschlüsse verbinde, kurz einschalte 
und danach wieder in die Schaltung einsetze.

Betrifft mehrere STM32F042F6P6 und STM32F051C8T6.


Woran kann das liegen? Elektrische Aufladung durch den PVC Fußboden? 
Flash Zyklen habe ich bestimmt noch nicht erreicht. Mehrere Tage 
ausschalten oder trennen bringt auch keinen Effekt ... bin ratlos
Angehängte Dateien:
OP #5097777
Lesenswert?

Testpin?

Hauptboard ist ein Breadboard.

Der F051 hat am I2C1 einen Temperatur/Feuchtesensor (HTU21D) und am I2C2 
den gleichen Sonsor nochmal und einen I2C IO Expander. An einem Pin noch 
eine blinkende LED mit 1K Vorwiderstand, damit ich sehen kann ob er 
schon wieder nicht startet. Noch eine UART, damit ich die 
Temperaturwerte auf der Konsole mitlesen kann.

Für den F042 habe ich ein anderes Breadboard. ADC geht an einen PIR 
Sensor (kein Modul). Mit ein paar Widerständen und Kondensatoren. Spielt 
aber keine Rolle, da es auch ohne Sensor auftritt. 2 LEDs ebenfalls mit 
Vorwiderstand und Uart. Ein weiterer ADC Kanal und der I2C sind 
aktiviert, aber nicht in Benutzung und nicht verbunden.

Auf dem Bild würde man nur Kabel sehen und es tritt auch auf, wenn man 
die Schaltung downgraded auf 1LED oder das Programm neu erstellt und 
drauf flasht.
#5097825
Lesenswert?

Heinz M. schrieb:
> Die Kondensatorengrößen sind aus dem Datenblatt entnommen. Auf der STM32
> Seite hier im Wiki steht noch ein 100nF Kondensator nach Ground. Mit
> oder ohne macht keinen Unterschied. Ansonsten siehe angehängtes Bild.

Aber leider nicht der Fakt das sie dicht am Package dran sein müssten. 
Die langen Leiterbahnen machen die Kondensatoren praktisch unwirksam.

Außerdem würde ich mal prüfen ob sich da nicht Kurzschlüsse abzeichenen. 
Lötstopplack ist AFAIK nicht als dauerhafte Isolierung gedacht.
Gast #5097874
Lesenswert?

die Beschaltung des Reset Pins ist inexistent.
100k Pullup und 100nF Kondensator gegen Ground an Reset sollte helfen. 
Garniert mit einem Taster als Schliesser gegen Ground runden das Ganze 
sehr fein ab.
Angehängte Dateien:
Gast #5097900
Lesenswert?

Du hast so einen Murks als Devboard und wunderst dich das es nicht geht? 
Da braucht man sich nicht mehr wundern. Wie bei den Amis, haben Häuse 
aus Karton und jammern dann rum wenn die erste Windböe alles mitnimmt.
Kauf dir halt einfach nen Discovery/Nucleo Board, maximalkosten 20€
Gast #5097981
Lesenswert?

Wieso kauft sich der TE keinen Maple Mini für 2eur inkl Versand?

Muss den anderen Recht geben... Sieht schon sehr murksig aus.

Aber zum eigebtlichen Problem... Manchmal kommt es vor, dass mein 
stm32f429 auf einem Custom Boarf nicht geflasht werden möchte. Wurde 
auch schlechter, bilde ich mir ein... Aber mit einrm Druck auf einen 
Resettaster ging es danach immer - auch wenn Strom abstecken nichts 
gebracht hat.

Mein Vorschlag: reset taster anflantschen :)
#5097982
Lesenswert?

Gibt es eine programmierbare Brown out Schwelle?Wenn ja stell die mal 
probeweise niedriger. Der Kerko wird auf die Entfernung zum uC kaum 
etwas bringen. Die Resetbeschaltung würde ich schon etwas niederohmiger 
als 100kOhm machen. 10kOhm ist meist die Herstellerempfehlung.
Gast #5098330
Lesenswert?

Ich würde einmal - Programmtechnisch - zu Adam und seiner Freundin Eva 
zurückgehen. Also das "Hello World" Äquivalent reinhauen und gucken, ob 
das geht. Am besten mit dem furchtbaren delay () in der Schleife.

Da kann man nur unter großen Schwierigkeiten etwas falschmachen.

Erst wenn das dann geht würde ich weitersehen...
OP #5098819
Lesenswert?

@Christopher Johnson: Hatte ich vergessen zu schreiben. Ja der Debugger 
macht Probleme. Er sagt sowas wie "Verbindung unterbrochen". Und die 
kommt auch nicht wieder. Manchmal macht das Debuggen keine Probleme, 
aber das normale laufen, so wie jetzt gerade.

Was mir noch aufgefallen ist: Der µC hat rund den 10 fachen 
Stromverbrauch, wenn er nicht richtig startet.

@Jim Meba & Walter S.: Wie soll ich die Kondensatoren näher ran 
bekommen?

@BlaBla: Kein Kurzschluss und Durchgang.

@des lesen mächtig: Hinzugefügt. Kein Effekt. Sowohl 100K, als auch 10K. 
Meine gelesen zu haben, dass der STM32 bereits einen internen 40K PullUp 
hat. Am Anfang ist der µC von selbst losgelaufen. Mit Taster könnte ich 
leben, aber das Problem liegt denke ich woanders. Zumindest der 
Kondensator am NRST kann ja nicht schaden.

@ui:
1. Ich will nicht nur rumspielen, ich möchte auch Projekte 
verwirklichen. Und momentan steht eins an, wo ich 25 Mikrocontroller 
brauche. Das wird mit Entwicklungsboards sehr teuer. Irgendwie muss man 
ja vorher mal testen bevor man Leiterplatten ätzt oder in Auftrag gibt.
2. Mir ist kein STM32F042 Disco Board bekannt. CubeMX auch nicht.
3. Im Eingangspost steht, dass ich die SWD Schnittstelle eines Disco zur 
Programmierung verwende. Bevor man sich über andere auslässt, sollte man 
wenigstens den Eingangspost gelesen haben.

@Frank: Versorgungspannung habe ich auch vermutet. Alle selbstgelöteten 
µC gehen sowohl mit 1000µF Kondensator(VCC-GND) und einer LED genauso 
sporadisch, wie wenn ich eine hauchdünne Versorgungsleitung 100x durch 
eine Stromzange wickle und hinten noch weitere ICs anschließe.

Reset Beschaltung wurde entsprechend nachgerüstet. Kein Effekt.

Bootpin hat der STm32F042F6 nicht.

@Mampf Unterwegs: Für den F051 wäre es eine Alternative, aber nicht für 
den F042, weil der CAN Controller fehlt. Außerdem gibt es weniger 
fertige Boards, als µC. Wenn man es selbst löten kann hat man einfach 
mehr Auswahl.

@Thomas O.: Ja gibt es:
https://stm32f4-discovery.net/2015/08/hal-library-22-bor-for-stm32fxxx/
In CubeMX selbst habe ich nichts gefunden und die 4 Source Dokumente im 
Programme habe ich durchsucht und nichts gefunden.

Durch den Hinweis habe ich etwas anderes Probiert. Die Disco Boards 
liefern nur 2,98V. Ich habe die Stromversorgung von den "3,3V" des Disco 
Boards auf "5,0V" umgeklemmt und einen AZ1117CH-3.3TRG1 vor den 
Mikrocontroller gesetzt. Er startet jetzt wieder ca. jedes 2. Mal. Also 
wesentlich besser. Leider lässt er sich so nicht programmieren. "Open 
OCD nicht gefunden". Umstecken, flashen, zurückstecken geht zwar, ist 
aber keine Lösung. Kann ich vielleicht mit einem Pegelwandler die SWD 
Kabel "entkoppeln"?

Jetzt wäre es noch interessant, warum es mit der Zeit abgenommen hat.

Sauber ist es trotzdem noch nicht. Wenn ich den Reset Taster drücke, 
dann geht er nicht mehr an. Erst wenn ich das USB Kabel ziehe (zumindest 
zu 50%). Der µC auf dem Discovery wird durch den Reset auch resetet. Der 
läuft einfach wieder los, wenn ich den Taster loslasse....warum habe ich 
nicht einfach den Resettaster vom Disco genommen...mmh

Ziehe ich die Stromversorgung vom Linearregler, geht der µC auf dem 
Disco auch mit aus. Also scheint irgendwas über die SWD Kabel 
verschleppt zu werden. Weil mehr Kabel sind nicht dran.

@Mampf unterwegs & Amateur: Habe das Programm komplett neu erstellt. 
Minimale Pinbelegung und den einzigen Code, den ich eingetragen habe:
1
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
2
HAL_Delay(100);
Macht keinen Unterschied.

@Markus M. Wie gesagt hat der F042F6 keinen Boot Pin.

Gleich kommen noch die Fotos vom Experimentierbrett.
Angehängte Dateien:
Gast #5099070
Lesenswert?

nur so als hinweis:

steckboards haben zwischen den verschiedenen kontaktreihen eine 
vergleichbar hohe kapazität. dies führt zu starken übersprechen zwischen 
benachbarten leitungen.

evtl liegt hier der hund begraben für das nicht richtig funktionieren 
des programmierens.
#5099135
Lesenswert?

#5099142
Lesenswert?

Heinz M. schrieb:
> DSC6297: Näher kann ich die Kondensatoren nun wirklich nicht an den
> Linearregler bringen.

Du sollst die C nicht näher an die Linearregler bringen, sondern näher 
an den µC. Schau dir mal die Designrules zum Thema C von ST an. Auch 
deine "Verkabelung" von den C sehe ich als Kurios an. Am unteren Ende 
ist doch die Masse nur per Kabel angeschlossen, wohin geht die Masse 
dann?!

EDIT:

Hier mal eine ToDo and Not-ToDo Erklärung für die richtige Verbindung 
von C an einen µC.

http://www.lothar-miller.de/s9y/categories/14-Entkopplung
Angehängte Dateien:
#5099164
Lesenswert?

Heinz M. schrieb:
> Was mir noch aufgefallen ist: Der µC hat rund den 10 fachen
> Stromverbrauch, wenn er nicht richtig startet.

Das "riecht" nach Latch-Up: 
https://de.wikipedia.org/wiki/Latch-Up-Effekt

Dafür reichen auch sehr kurze Spannungsspitzen, die bei dem fliegenden 
Aufbau  durch die Induktivitäten der Masse- und Versorgungsleitungen 
entstehen könnten.
Das es immer schlechter geworden ist könnte ich mir damit erklären, dass 
bei jedem Latch-Up Vorgang der µC etwas mehr geschädigt wurde.
Gast #5099204
Lesenswert?

Heinz M. schrieb:
> 1. Ich will nicht nur rumspielen, ich möchte auch Projekte
> verwirklichen. Und momentan steht eins an, wo ich 25 Mikrocontroller
> brauche. Das wird mit Entwicklungsboards sehr teuer. Irgendwie muss man
> ja vorher mal testen bevor man Leiterplatten ätzt oder in Auftrag gibt.

Naja wenn man so schaut was du für Probleme hast würde ich das mal 
hinten anstellen. Wie man sieht hast du offensichtlich nicht so viel 
Ahnung (sonst würdest du die Abblockkondensatoren nicht auf die andere 
Seite der Platine setzen), dann wird das mit dem Projekt sicher nix.
Mein Tipp: Kauf dir beim Chinesen 25 billige Nachbaubboards. Damit 
fährst du wesentlich besser, es scheitert ja bereits an den Grundlagen.

Nicht das ich es dir nicht vergönne das es klappt, aber: Die Zeit die du 
jetzt da reinsteckst, dass du selbstgemachte Probleme löst (die mit 
vernünftiger HW nicht passieren) kannst du auch in Geld umwandeln und in 
vernünftige Platinen investieren.
OP #5100013
Lesenswert?

@Mampf Unterwegs & Nico W.: Im Link und auch im Datenblatt steht, dass 
der PB8 der Boot Pin ist. Diesem kann ich alles möglich zuweisen, aber 
kein Boot (Siehe Anhang). Da dieser GPIO auch andere Funktionen annehmen 
kann(Datenblatt), bedeutet dies im Umkehrschluss, dass ST eine 
alternative Konfigurationsmöglichkeit vorsieht. Oder sehe ich das 
falsch?

Über den F051 brauchen wir nicht zu sprechen. Ist klar und werde ich in 
Zukunft beschalten.

@Rene K.: Das mit dem Linearregler kam falsch rüber. Dieser hat seine 
eigenen Kondensatoren. Die Kondensatorenbeine sind direkt an die 
Linearreglerbeine gelötet. Deswegen sieht man den Linearregler nicht auf 
dem Foto. Da geht es wirklich nicht näher.

Beim F042 Board handelt es sich um eine normale SMD DIP Adapterplatine 
von Roth. Der Hersteller weiß natürlich nicht vorher welcher IC wo 
wieviele Kondensatoren braucht. Die 2,54mm Pins waren daher für mich das 
einzig mögliche lötbare. An die 0,65mm des µC schaffe ich es nicht die 
Kondensatoren anzulöten.

Der F042P6 hat auf der einen Seite VDD und GND und auf der anderen Seite 
nur VDDA. Damit der Kondensator wirkt braucht er eine Masse. Also habe 
ich die quer rüber gezogen. Aber nicht an den Pin, weil dieser PA0 ist 
und nicht GND.

@Dietrich L.: Seit dem ich den LDO einsetze funtkioniert es wieder 
besser. Also teilgeschädigt, reversibele Schädigung oder doch nur 
temporäre Störung durch die Beschaltung.

@ui: Die Abblockkondensatoren sitzen nicht auf der falschen Seite. Siehe 
Bild im Anhang.

Das sind meine ersten SMD Lötversuche gewesen. Vor den STMs habe ich nur 
5 SOIC8 1,27mm gelötet. Sonst gar nichts an SMDs. Jeder der SMD Chips 
"funktioniert" zumindest löttechnisch. Da ich jetzt weiß, dass ich TSSOP 
und LQFP gelötet bekomme, kann ich mich an die Platinenentwicklung 
machen. Hätte ich mich erst um die Platinen gekümmert, um dann 
feststellen zu müssen, dass ich es gar nicht löten kann. Das wäre 
vertane Zeit gewesen. Wenn ich es so hinbekomme, dass es mit den 
Adapterplatinen läuft wäre es schön. Wenn nicht, weiß ich wenigstens 
vorher was ich bei den Platinen machen muss.
Angehängte Dateien:
OP #5100040
Lesenswert?

Hab jetzt den PB8 (boot) mit 10K gegen GND angeschlossen. Und was soll 
ich sagen... genau so wie es sein soll:
- µC läuft nach Reset los.
- Nach dem Flaschen läuft der µC direkt los.

Vielen vielen Dank für die Hilfe.

Mir stellen sich jetzt nur noch 2 Fragen.
1. Wie soll man den PB8 als GPIO nutzen, wenn dieser auf GND gesetzt 
sein muss? Zeitverzögerter Transistor?

2. Wenn der µC über den Linearregler läuft kann ich ihn nicht flashen. 
Trotz PB8 gegen GND. Wie kann ich das in der späteren Schaltung 
realisieren?
Persönliche Seite #5100052
Lesenswert?

Heinz M. schrieb:
> Diesem kann ich alles möglich zuweisen, aber
> kein Boot (Siehe Anhang). Da dieser GPIO auch andere Funktionen annehmen
> kann(Datenblatt), bedeutet dies im Umkehrschluss, dass ST eine
> alternative Konfigurationsmöglichkeit vorsieht. Oder sehe ich das
> falsch?

Du würdest idealerweise einen Pulldown-Widerstand mit 4,7-10k an den Pin 
hängen und ihn dann Softwaremäßig nur als Ausgang verwenden.

Dann hast du keine Probleme damit.
Gast #5100390
Lesenswert?

> Wie soll man den PB8 als GPIO nutzen, wenn dieser auf GND gesetzt
> sein muss? Zeitverzögerter Transistor?

Er muss ja nur beim Start auf Low liegen. Danach kannst du ihn als ganz 
normalen I/O Pin nutzen.

> Wenn der µC über den Linearregler läuft kann ich ihn nicht flashen.

Und womit versorgst du ihn beim flashen?
Eventuell stimmt die Ausgangsspannung deines Linerarreglers nicht mit 
der Signalspannung deines Programmieradapters überein.
OP #5103852
Lesenswert?

Also ist PB8 optimal für die Status LED oder einen Taster.


Das Discovery Board liefert ~3,0V, weil hinter dem 3,3V Regler noch eine 
Diode sitzt.

Mein Linearregler liefert so wie er soll 3,3V.

Auf dem SWD Header des Discovery gibt es noch ein VDD. Im User Manual 
UM1472 steht, dass man die ZIelspannung hier anlegen muss. In den ganzen 
Internetanleitungen die ich gelesen habe stand, dass man VDD ignorieren 
soll...
#5104095
Lesenswert?

Heinz M. schrieb:
> Auf dem SWD Header des Discovery gibt es noch ein VDD. Im User Manual
> UM1472 steht, dass man die ZIelspannung hier anlegen muss. In den ganzen
> Internetanleitungen die ich gelesen habe stand, dass man VDD ignorieren
> soll...

Das VDD auf dem Disco-Board ist in Wirklichkeit kein VDD, sondern 
VDD_ref, d.h. hierüber misst der ST-Link die Spannung des Targets. 
Versorgen kann man das Target demnach darüber nicht, da es ja nur eine 
Messleitung ist, also Analogeingang für den ST-Link.
Persönliche Seite #5104165
Lesenswert?

Heinz M. schrieb:
> Auf dem SWD Header des Discovery gibt es noch ein VDD. Im User Manual
> UM1472 steht, dass man die ZIelspannung hier anlegen muss. In den ganzen
> Internetanleitungen die ich gelesen habe stand, dass man VDD ignorieren
> soll...

Hab ich bisher auch nicht verwendet ... Bei meinen Layouts route ich den 
nicht mal auf den Pin-Header und funktioniert trotzdem einwandfrei :)
OP #5105013
Lesenswert?

@Mampf F.: Benutzt du Discovery Boards zum Programmieren? Wenn ja, 
nimmst du die Versorgungsspannung vom Discovery zum Programmieren oder 
eine externe Spannungsversorgung für den zu programmierenden µC?

Mir bleibt ja noch die Option offen einen Jumper einzubauen, womit ich 
die Versorgungsspannung zum Programmieren vom Discovery hole.

@Christopher: Ja, das ist falsch beschriftet im Manual. Nur löst das 
mein Problem oder kann ich mir damit das Discovery Board zerschießen, 
wenn ich da die 3,3V anlege?
#5105017
Lesenswert?

Heinz M. schrieb:
> Nur löst das mein Problem oder kann ich mir damit das Discovery Board
> zerschießen, wenn ich da die 3,3V anlege?

Also zerschießen solltest du da nichts, wenn du an VDD_ref 3,3V anlegst. 
Dafür ist der ja schließlich da. Ob es dein Problem löst weiß ich nicht. 
Eigentlich müsste es auch so gehen, wie Mampf ja schon geschrieben hat. 
Probier es halt einfach aus.

Edit: Wenn das was du an Vdd_ref anlegst deutlich größer als Vdd vom 
ST-Link ist, dann kannst du den natürlich schon kaputt machen. Ist ja 
ein simpler Analogeingang.
Persönliche Seite #5105230
Lesenswert?

Heinz M. schrieb:
> @Mampf F.: Benutzt du Discovery Boards zum Programmieren? Wenn ja,
> nimmst du die Versorgungsspannung vom Discovery zum Programmieren oder
> eine externe Spannungsversorgung für den zu programmierenden µC?

Nein, ich hab so einen 2EUR STLINKV2 USB-Adapter aus der Bucht :)

Zum Programmieren benutze ich immer direkt die Versorgungsspannung, mit 
der das Board später dann auch betrieben wird.

Ich schließe nur den VDD nicht am Programmer an, quasi.
#5106089
Lesenswert?

Nutzt du denn OpenOCD zum flashen oder irgendein anderes Programm?
Habe bei mir gerade sowohl mit einem Discovery mit ST-Link V2, als auch 
mit einem Nucleo mit ST-Link V2.1 einen F103 erfolgreich geflasht, ohne 
VDD_ref anliegen zu haben und mit getrennter Versorgungsspannung von 
ST-Link und Target.

Witzigerweise zeigt mir OpenOCD trotzdem eine Targetspannung an, selbst 
wenn ich VDD_ref explizit auf GND lege. Vermutlich ist es die Spannung 
vom ST-Link selbst bzw. vom Controller auf dem Nucleo bzw. Disco-Board. 
OpenOCD ist bei mir Version 0.10 und die Firmware von den beiden 
ST-Links habe ich erst vor zwei Wochen aktualisiert.

Bei den China Minidingern gibt es ja gar keinen VDD_ref Pin, d.h. hier 
kann der ST-Link wenn überhaupt nur messen, was er selber bekommt. Da 
macht das irgendwie Sinn, dass er was anzeigen kann ohne das explizit 
irgendwo etwas anliegt aber bei den Discovery- und Nucleo-Boards finde 
ich das schon ein bisschen komisch.
OP #5106970
Lesenswert?

Vielleicht im Programmieradapter. Wenn ich VCC trenne, dann läuft der µC 
weiter. Zieht sich wohl den Strom über SWD. Trenne ich GND auch noch, 
dann geht der µC auf dem Discoveryboard auch aus. Erst wenn ich 
zusätzlich den SWD Stecker ziehe, dann läuft der µC auf dem Discovery 
wieder.

Zumindest beim Discovery steht in keiner Anleitung (die ich gelesen 
habe) etwas zu Widerständen am SWD.
Persönliche Seite #5107467
Lesenswert?

Markus M. schrieb:
> ...sollten da welche sein? Ist mir neu, habe ich auch noch nie
> verbaut.

Ganz genau weiß ich es auch nicht ... Ich hatte letztens den SWD direkt 
neben der Induktivität eines Boost-Converters platziert und jedesmal 
wenn ich diesen anschaltete, brach meine Debug-Verbindung ab.

Ich hatte dann gegoogelt und einige Schaltpläne mit Pullup gefunden - 
hab ich dann nachgerüstet, dann klappte es.

Ist vmtl auch vom SWD-Adapter abhängig, das 2EUR-Dings aus China war da 
wohl sehr hochohmig an den Pins.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren