Forum: Mikrocontroller und Digitale Elektronik STM32 Programmieren und Debuggen


von Thomas (Gast)


Lesenswert?

Hallo,

ich möchte gerade mein ersten STM32-Projekt starten.
Ich bin dabei die Platine zu erstellen und habe Fragen zur 
Programmierung.
Sehe ich das richtig, dass ich wenn ich die Debugging-Funktionen nutzen 
möchte einen JTAG Adapter benötige? Mit diesem kann ich dann den µC auch 
programmieren? Wenn ich über USB programmieren will steht mir also die 
Debugging-Funktion nicht zur Verfügung?

Der Grund warum ich mir direkt eine eigene Platine mache ist, dass ich 
sehr sehr wenig Platz habe. Deshalb wäre mir auch sehr wichtig, dass der 
Programmieranschluss sehr klein ist. Ich habe allerdings gelesen, dass 
der JTAG-Anschluss 20polig ist. Gibt es auch platzsparende Alternativen? 
Könnt ihr mir einen günstigen Adapter empfehlen?

Danke bereits für eure Hilfe.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Thomas schrieb:
> Sehe ich das richtig, dass ich wenn ich die Debugging-Funktionen nutzen
> möchte einen JTAG Adapter benötige?

Ja.

> Mit diesem kann ich dann den µC auch
> programmieren?

Ja.

> Wenn ich über USB programmieren will steht mir also die
> Debugging-Funktion nicht zur Verfügung?

Ja, kein Debuggen, nur flashen.

>
> Der Grund warum ich mir direkt eine eigene Platine mache ist, dass ich
> sehr sehr wenig Platz habe. Deshalb wäre mir auch sehr wichtig, dass der
> Programmieranschluss sehr klein ist. Ich habe allerdings gelesen, dass
> der JTAG-Anschluss 20polig ist. Gibt es auch platzsparende Alternativen?
> Könnt ihr mir einen günstigen Adapter empfehlen?

Ja, siehe hier:
http://www.mikrocontroller.net/articles/JTAG#Der_10-polige_JTAG_Stecker_von_mmvisual

Ich mache in all meine Projekte den 10-Poligen Stecker rein so wie in 
dem Artikel beschrieben. Als Sparmaßnahme würde auch die linke Seite (5 
Pins) reichen.

Es müssten die 3 Signale
GND, SWDIO und SWCLK
zum Flashen und debuggen auch reichen, habe ich aber noch nie probiert.

> Danke bereits für eure Hilfe.

Bitte schön.

von W.S. (Gast)


Lesenswert?

Thomas schrieb:
> Gibt es auch platzsparende Alternativen?

Ja. Mach ihn einfach kleiner. TDI,TDO,TMS,CLK,GND sollte eigentlich 
reichen, TRST, RESET und VCC evtl. noch dazu.

Ansonsten denk mal dran, daß unter "Debuggen" weitaus mehr und häufig 
was anderes verstanden wird, als mal bloß ein Debuggerprogramm via JTAG 
oder SWD zu benutzen. Deshalb rate ich dir, zumindest einen UART auf 
einen dreipoligen Stecker zu führen (TxD,RxD,GND). Eine serielle 
Verbindung zum PC zu haben, ist oftmals deutlich besser als zu glauben, 
mit Einzelschritt per Debugger zum Ziel zu kommen.

W.S.

von Jim M. (turboj)


Lesenswert?

Markus Müller schrieb:
> Es müssten die 3 Signale
> GND, SWDIO und SWCLK
> zum Flashen und debuggen auch reichen, habe ich aber noch nie probiert.

Ich würde auch immer Reset mit verbinden - sonst sperrt man sich 
eventuell mit falschen Clock/PLL Einstellungen aus.

von Thomas (Gast)


Lesenswert?

Danke für eure Antworten.
Wenn ich den Text von W.S. zusammenfasse kommt also die selbe Empfehlung 
mit den 10 Pins heraus wie im oberen Post?
Was für einen Programmieradapter würdet ihr mir dann empfehlen? Diese 
sind dann ja wahrscheinlich aber mit 20-poligem Stecker?

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Bastle Dir doch ein Adapterkabel vom 20-Poligen JTAG Interface auf den 
10-Poligen Stecker.

Im Artikel gibt es auch eine Adapterplatine 10/20-Polig:
http://www.mikrocontroller.net/articles/JTAG#Die_Adapterplatine

Als JTAG empfehle ich den J-LINK von Segger:
http://www.segger.com/j-link-edu.html
- Der ist schnell
- Funktioniert unter Win/Linux/Mac
- Gute Softwaretools dabei
- Tauglich für CooCox, Eclipse und kommerzielle Tools

Ansonsten empfehle ich auch die Artikel:
STM32 für Einsteiger
STM32 CooCox Installation
mal durch zu lesen

: Bearbeitet durch User
von Thomas (Gast)


Lesenswert?

Danke. Werde mir vielleicht einfach ne kleine Adapterplatine machen.

Kann mir jemand einen kleinen 10poligen Steckverbinder empfehlen?
Die normalen Stecker im 2.54mm Raster sind einfach zu groß und auch im 
1.27mm Raster gefällt mir das nicht unbedingt.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Ist schwierig eine pauschale Empfehlung zu geben. Soll der Stecker von 
außen sichtbar sein oder ist der nur innerhalb eines Gerätes?

von Thomas (Gast)


Lesenswert?

Der Stecker soll am Rand einer Platine sitzen die erst einmal ohne 
Gehäuse bleibt. Ich habe noch vergessen zu schreiben dass der Stecker 
seitlich angebracht sein muss und nicht von oben gesteckt werden kann 
weil später eine weitere Platine direkt über der Hauptplatine sitzt

von W.S. (Gast)


Angehängte Dateien:

Lesenswert?

Thomas schrieb:
> Kann mir jemand einen kleinen 10poligen Steckverbinder empfehlen?

Nein.
10 polige Stecker und Buchsen sind eher selten und du brauchst auch 
WIRKLICH NICHT den ganzen Satz Signale. Besser du siehst dich nach einem 
8 poligen System um, ich nehme für sowas ganz gern die MICA/MICS 
Messerleisten. Das gibt auf der LP 2 Reihen a 4 Pads im 2.54er Raster. 
Als Alternative evtl. MicroMatch mit 12 Polen, da passt dann noch 
irgendwas anderes mit drauf.

Ich hänge dir mal den Universalanschluß der Betty (Lernbetty) dran. Da 
kannst du sehen, daß es für JTAG mit 8 Polen völlig ausreicht und wenn 
man RTCK und 3,3V wegläßt, reichen sogar 6 Pole.

W.S.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Er meinte diese Stecker-Belegung:
http://www.mikrocontroller.net/articles/JTAG#Der_10-polige_JTAG_Stecker_von_mmvisual
Die auch einen UART mit drauf hat.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Die sind recht klein, gibt es, glaube ich, auch gewinkelt und auch bei 
Reichelt.
http://de.farnell.com/wurth-elektronik/690367291076/buchse-2-54-1-27mm-smt-10kont/dp/1641845

Gewinkelt wäre nicht nötig, da der Stecker (incl. 
Flachbandkabel-Gegenstück) sehr flach sind. Kaufe mal ein Satz und 
schaue es Dir an.

: Bearbeitet durch User
von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Angehängte Dateien:

Lesenswert?

Anbei mal ein Bild als Vergleich, 10-Polig.
Der Flachbandkabel-Stecker hat mehr Pole, habe ich nicht in 10-Polig da. 
Der kleine für die Platine ist 10-Polig.

: Bearbeitet durch User
von Gerd E. (robberknight)


Lesenswert?

Markus Müller schrieb:
> Anbei mal ein Bild als Vergleich, 10-Polig.

Für die Cortex M macht doch heute SWD mehr Sinn als volles JTAG. Warum 
dann einen 10 poligen Stecker und keine 6-poligen? 6-polig und nicht 
5-polig damit auch noch SWO mit draufpasst. Damit braucht man dann 
eigentlich auch kein extra UART mehr zum debugging.

Gerade die 6-poligen SMD-Micromatch finde ich schön zum programmieren. 
Die hab ich schon früher immer bei den AVRs zum programmieren verwendet.

von K2R (Gast)


Lesenswert?

Egal, was man macht, sollte man sich trotz allem an die Konventionen der 
HW-Hersteller halten (meine Meinung).

Schau mal hier:
http://infocenter.arm.com/help/topic/com.arm.doc.faqs/attached/13634/cortex_debug_connectors.pdf

von Gerd E. (robberknight)


Lesenswert?

K2R schrieb:
> Egal, was man macht, sollte man sich trotz allem an die Konventionen der
> HW-Hersteller halten (meine Meinung).

Nur wenn der Hersteller seine Hausaufgaben gemacht hat und die 
Konvention wirklich durchdacht ist.

> 
http://infocenter.arm.com/help/topic/com.arm.doc.faqs/attached/13634/cortex_debug_connectors.pdf

Ja, genau den "Cortex Debug Connector" meine ich: NC/TDI und eines der 
GNDs sind für SWD auf jeden Fall überflüssig. Wenn man nicht diesen 
Samtec-Stecker, sondern einen hardwaremäßig verpolsicheren wie z.B. den 
bewährten Micromatch nimmt, braucht man den Key auch nicht.

Der GNDDetect ist eigentlich ne nette Idee, damit kann der Programmer 
erkennen ob ein Ziel dranhängt und dann entweder selber das 
Programmieren starten oder ne bessere Fehlermeldung ausgeben. Ich kenne 
nur leider keinen Programmer der das kann. Also auch nicht wirklich 
nutzbar.

Und schwuppdiewupp hat man da 4 unnötige Pins auf dem Connector. Dabei 
kommt es doch auf den Platzbedarf und die Kosten des Connectors an. Also 
unnötige Verschwendung seitens ARM. Daher wage ich diese Konvention in 
Frage zu stellen.

von Uwe Bonnes (Gast)


Lesenswert?

Warum muss es denn so klein sein? Zum Experimentieren sind die 2.54 mm 
Stecker ideal, da man da auch Wire Jumper reinstecken kann.

von Gerd E. (robberknight)


Lesenswert?

Uwe Bonnes schrieb:
> Warum muss es denn so klein sein?

Wenn ich mit dem Stecker weit vom µC weggehe, muss ich die Leiter quer 
durchs Board routen. Auf den Signallayern ist es eng, das mach ich nur 
wenn es sein muss.

Und in der Nähe des µC ist es auch eng, daher nen hübsch kleinen, aber 
dennoch praktischen Steckverbinder.

> Zum Experimentieren sind die 2.54 mm
> Stecker ideal, da man da auch Wire Jumper reinstecken kann.

Wenn Du überall den selben Stecker und Belegung hast, crimpst Du Dir 
einmal nen Adapterkabel z.B. Micromatch 6 auf Standard-Stiftleiste. Dann 
kommst du bequem ran.

von Thomas (Gast)


Lesenswert?

Vielen Dank für die tolle Hilfe.
Habe bis jetzt weder mit JTAG noch mit SWD gearbeitet und bin euch 
deshalb sehr dankbar.
Wenn ich alles richtig verstanden habe kann ich also mit folgenden 6 
Pins:
Reset
SWCLK
SWDIO
SWO
GND
3.3V
 zusammen mit einem Programmer wie dem STLink oder dem vorgeschlagenen 
Segger den STM32 programmieren und debuggen.
Einen 6poligen MicroMatch Stecker würde ich auch gut unterbringen 
können.

von Micha (Gast)


Lesenswert?

SWO brauchst du auch nicht unbedingt

von Gerd E. (robberknight)


Lesenswert?

Thomas schrieb:
> Wenn ich alles richtig verstanden habe kann ich also mit folgenden 6
> Pins:
> Reset
> SWCLK
> SWDIO
> SWO
> GND
> 3.3V
>  zusammen mit einem Programmer wie dem STLink oder dem vorgeschlagenen
> Segger den STM32 programmieren und debuggen.

richtig. Schau mal ins Usermanual von z.B. dem STM32F4DISCOVERY: dort 
werden genau diese 6 Pins rausgeführt - warum wohl. Im Gegensatz zu ARM 
hat ST also durchaus verstanden was sinnvoll ist.

> SWO brauchst du auch nicht unbedingt

Stimmt. Ich finde aber z.B. das printf-Debugging über die ITM ist ne 
echt nette Sache. Und dafür brauchst Du das SWO.

von Franz (Gast)


Lesenswert?

Also ich arbeite mit der SWD Schnittstelle mit 5 Pins:
Clock, Daten, Reset, GND und 3V3.
Funkt wunderbar!

von Uwe (Gast)


Lesenswert?


von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Ich habe es gerade mal mit dem Segger J-LINK getestet:

es braucht die 4 Pins:
SWCLK
SWDIO
GND
3.3V

ohne die 3,3V meint der J-LINK dass kein Device angeschlossen ist und 
kommuniziert nicht mit dem µC.

von Franz (Gast)


Lesenswert?

und ich glaube sogar wenn man den J-LINK ein wenig "modifiziert" kann 
man sich die 3V3 auch sparen, bleiben dann "nur" 3 Pins

von Ingo S. (ingo-s)


Lesenswert?

An dem STM F103 discovery stehen am SWD Stecker auch nur GND, SWCLK, 
SWDIO und 10k nach GND zur Verfügung. Die 3 Signale reichen also aus.

Das discovery mit dem STM32L151 hat am SWD Anschluss aber zusätzlich 
noch NRST und SWO mit anliegen.

Ob der NRST das starten des neuen Codes vor der Debug Session verhindert 
habe ich noch nicht ausprobiert. Beim Testen meiner EEPROM Simulation 
ist mir das ärgerlich aufgefallen, musste einen Start Taster am Anfang 
der main() einfügen, damit ich mit sauberen Bedingungen testen konnte.

Gruß Ingo

von Gerd E. (robberknight)


Lesenswert?

Markus Müller schrieb:
> Ich habe es gerade mal mit dem Segger J-LINK getestet:
>
> es braucht die 4 Pins:
> SWCLK
> SWDIO
> GND
> 3.3V

Was ist "es"? Programmieren oder Debuggen?

Gerade beim Debuggen gibt es schon hin und wieder Fehler, bei denen Du 
nen echten Reset brauchst um wieder rauszukommen.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Eclipse, GCC und Segger GDB Server und mehrmals Debuggen gestartet und 
es hat geklappt.
Die 3V3 hat der Segger J-LINK benötigt um den STM32 als angeschlossen zu 
erkennen.

: Bearbeitet durch User
von Gerd E. (robberknight)


Lesenswert?

Markus Müller schrieb:
> Eclipse, GCC und Segger GDB Server und mehrmals Debuggen gestartet und
> es hat geklappt.

Interessant. Kann man vielleicht doch noch mehr Pins sparen...

Du kennst doch wahrscheinlich den Fall, daß ein Programm ständig in 
einen Sleepmode geht während der Debugger läuft. Bei den STM32 muß man 
dafür vorher das DBGMCU_CR-Register anpassen damit der Debugger-Teil des 
Cores trotz sleep an bleibt. Wenn man das vergisst wird der Debugger 
getrennt. Soweit ich weiß braucht man dann den external Reset (oder 
Poweron-Reset) um wieder rauszukommen. Das wäre doch so ein Fall in dem 
man die Reset-Leitung noch braucht.

> Die 3V3 hat der Segger J-LINK benötigt um den STM32 als angeschlossen zu
> erkennen.

Die sind auch sinnvoll, wenn Du viele Boards programmieren willst. Dann 
musst Du dafür nur jeweils einen Stecker ranstecken.

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.