Forum: Mikrocontroller und Digitale Elektronik ST Link V2 zu STM32F103


von Leopold N. (leo_n)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

bin neu auf dem Gebiet STM32, habe mir jetzt ein paar STM32F103C8T6 
gekauft und möchte mir jetzt ein DEV-Board ätzen. Zum Programmieren und 
Debuggen habe ich mir einen ST-Link V2 angeschafft, welcher laut Amazon 
SWIM, SWD und JTAG beherrscht.

https://www.amazon.de/gp/product/B077Z1T3LP/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1

Um den µC nun zu programmieren, brauche ich eine Schnittstelle:
Ursprünglich wollte ich JTAG hernehmen, habe aber Probleme mit der 
genauen Verkabelung zum µC. Genauer: Der Pin 1 und 9, T_JRST und 
SWIM-RST (siehe Bild im Anhang)
Wohin müssen die verbunden werden, weil ich habe am µC ja den normalen 
RESET-Pin und den JTAG RESET Pin. Welcher gehört nun wozu?

Kann man die SWD Schnittstelle auch zum Programmieren des 
Flash-Speichers hernehmen? Dann könnte ich mir die ganzen Pins vom JTAG 
sparen und hätte auch gleich noch die Debug Schnittstelle zusammen mit 
der Programmierschnittstelle auf einem Stecker (außerdem soll SWD ja 
schneller sein, hab ich gehört).

Ich habe jetzt viel gegoogelt, aber leider dazu bis jetzt keine Antwort 
gefunden.


Vielen Dank im Voraus
Leopold Nützel

von Benedikt S. (Gast)


Lesenswert?

Leopold N. schrieb:
> Kann man die SWD Schnittstelle auch zum Programmieren des
> Flash-Speichers hernehmen?

Ja so funktionieren die Nucelo-Bords nimm die doch als Inspiration.

von Leopold N. (leo_n)


Lesenswert?

Benedikt S. schrieb:
> Leopold N. schrieb:
>> Kann man die SWD Schnittstelle auch zum Programmieren des
>> Flash-Speichers hernehmen?
>
> Ja so funktionieren die Nucelo-Bords nimm die doch als Inspiration.

Hab ich schon zum Teil, aber das Selbst-Layouten und Selbst-Ätzen lass 
ich mir nicht nehmen :)

Dass heißt also, ich brauche gar kein JTAG, sondern mir reicht folgende 
Verbindung?

Pin    ST Link V2     -->    Pin    STM32F103C8T6

2      3.3V                  24     Vcc
4      T_SWCLK               37     SWCLK
6      T_SWDIO               34     SWDIO
7      GND                   23     GND


Benötige ich noch eine RESET-Leitung?

Grüße
Leopold Nützel

von Sebastian R. (sebastian_r569)


Lesenswert?

Jep, SWD macht mehr Spaß und es sind eben nur 2 Leitungen + GND

Wenn du in CubeMX arbeitest, musst du nur dran denken, SWD bei den 
Pin-Funktionen zu aktivieren, ansonsten kannst du den Controller erstmal 
nur einmal über SWD programmieren und dann sind die Pins nach dem Start 
nur GPIOs und SWD geht nicht, bis du über Boot0/1 den Controller im 
Bootloader-Modus hälst. Dann geht auch SWD wieder.

von Leopold N. (leo_n)


Lesenswert?

Sebastian R. schrieb:
> Jep, SWD macht mehr Spaß und es sind eben nur 2 Leitungen + GND

Also muss ich Vcc nicht verbinden?
Und auch keine RESET-Leitung?

Und nein, ich arbeite nicht mit CubeMx.

Kann ich den µC auch beim ersten Mal Inbetriebnahme über SWD 
programmieren?
Oder muss ich vorher über JTAG irgendwelche Fuses, etc. setzen?
Ich habe BOOT0 jetzt auf GND gelegt und BOOT1 offengelassen, da ich 
immer nur den Flashspeicher nutze und nicht über UART programmieren 
muss.

Muss ich sonst noch iwas beachten?

Grüße

von Axel S. (a-za-z0-9)


Lesenswert?

Leopold N. schrieb:
> Sebastian R. schrieb:
>> Jep, SWD macht mehr Spaß und es sind eben nur 2 Leitungen + GND
>
> Also muss ich Vcc nicht verbinden?

Doch, solltest du. Zumindest wenn das ein originaler ST-Link ist dann 
will er Vcc vom Target sehen, damit er überhaupt was macht. Und er 
stellt die Pegel seiner Treiberstufen darauf ein.

China-Clone liefern stattdessen eine Spannung am entsprechenden 
Anschluß und können so dazu verwendet werden, das Target aus dem USB zu 
versorgen. Da an deinem ST-Link nicht "Vcc" sondern "3V3" und "5V" 
steht, vermute ich mal, daß da jeweils die 5V vom USB bzw. 3.3V von 
einem Regler im ST-Link draufliegen.

> Und auch keine RESET-Leitung?

T_JRST ist optional. Wenn du dir die SWD-Schnittstelle wegkonfiguriert 
hast, kann der ST-Link ein "connect under reset" machen. Im Normalfall 
braucht man das nicht. Oder man hält Reset manuell auf L, wenn man den 
ST-Link connecten läßt.

> Kann ich den µC auch beim ersten Mal Inbetriebnahme über SWD
> programmieren?

Ja. SWD ist standardmäßig aktiviert.

> Ich habe BOOT0 jetzt auf GND gelegt und BOOT1 offengelassen, da ich
> immer nur den Flashspeicher nutze und nicht über UART programmieren
> muss.

Für eine Devel-Platine würde ich beide BOOTx Pins auf Jumper legen. Der 
UART-Bootloader ist eigentlich recht praktisch.

> Muss ich sonst noch iwas beachten?

Was im Datenblatt zur Minimalbeschaltung steht. Insbesondere Abblock-C.

von A.. P. (arnonym)


Lesenswert?

Leopold N. schrieb:
> Und auch keine RESET-Leitung?

Reset solltest du verbinden, da du sonst beim Programmieren den 
Controller immer manuell resetten musst. Je nach deiner 
Frustrationstoleranz und dem verwendetem Flash-Tool kann das sehr 
schnell sehr nervig werden. Denk nur mal daran, wie nervig das sein 
kann, wenn du jedes Mal händisch den Controller resetten musst, wenn 
erst geflasht wird, danach noch ein Flash Check durchgeführt wird und 
danach evtl. noch was anderes.

Spar woanders, aber verpass deiner Platine diese zusätzliche Leiterbahn 
;)

von Harry L. (mysth)


Lesenswert?

A.. P. schrieb:
> da du sonst beim Programmieren den
> Controller immer manuell resetten musst.

Muß man nicht!

von Sebastian R. (sebastian_r569)


Angehängte Dateien:

Lesenswert?

Harry L. schrieb:
> A.. P. schrieb:
>> da du sonst beim Programmieren den
>> Controller immer manuell resetten musst.
>
> Muß man nicht!

Muss man definitiv nicht. Man muss dann in den Debugger-Einstellungen 
nur den Soft-Reset einstellen.

von Karl (Gast)


Lesenswert?

Leopold N. schrieb:
> Und nein, ich arbeite nicht mit CubeMx

Naja, man kann sich das Leben auch unnötig schwer machen. Wenn man gern 
leidet...

von Axel S. (a-za-z0-9)


Lesenswert?

Karl schrieb:
> Leopold N. schrieb:
>> Und nein, ich arbeite nicht mit CubeMx
>
> Naja, man kann sich das Leben auch unnötig schwer machen.
> Wenn man gern leidet...

Komisch. Genau das gleiche denke ich, wenn ich Leute sehe, die das Cube 
HAL oder SPL verwenden.

Können wir uns darauf einigen, daß das eine Geschmacksfrage ist? Und daß 
man über Geschmack nicht streitet?

von Stefan F. (Gast)


Lesenswert?

Lies Dir das ma durch, da habe ich auch etwas zur optionalen Reset 
Leitung geschrieben: 
http://stefanfrings.de/stm32/index.html#proginterfaces

von Leopold N. (leo_n)


Angehängte Dateien:

Lesenswert?

Hallo,

also das ist jetzt der Schaltplan...
Passt der so?

Grüße

von Leopold N. (leo_n)


Angehängte Dateien:

Lesenswert?

Hm,

hier nochmal als .sch-Datei, man kann auf dem Bild glaub ich nicht sehr 
viel erkennen.

Grüße

von Stefan F. (Gast)


Lesenswert?

Hänge mal ein leserliches Bild an. Du musst beim Exportieren eine höhere 
Auflösung angeben. Ich exportiere immer als SVG, weil das die beste 
Qualität hat.

von Leopold N. (leo_n)


Angehängte Dateien:

Lesenswert?

Hier nochmal als Bild direkt aus Eagle exportiert.

Grüße

von W.S. (Gast)


Lesenswert?

Leopold N. schrieb:
> Dass heißt also, ich brauche gar kein JTAG, sondern mir reicht folgende
> Verbindung?
>
> Pin    ST Link V2     -->    Pin    STM32F103C8T6
>
> 2      3.3V                  24     Vcc
> 4      T_SWCLK               37     SWCLK
> 6      T_SWDIO               34     SWDIO
> 7      GND                   23     GND
>
> Benötige ich noch eine RESET-Leitung?

Mit dem "Benötigen" ist das so eine Sache... Mein Rat wäre, daß du dir 
einen Steckverbinder aussuchst, den du erstens kriegen kannst, der 
zweitens nicht allzuviel Platz auf deinem Board belegt und der drittens 
folgende Signale führt.
3.3V, SWCLK, SWDIO, GND wie du bereits schriebest,
dazu Reset, BOOT, TxD und RxD vom ersten UART.

Auf diese Weise kannst du dn Chip nämlich sowohl per SWD als auch per 
Bootlader programmieren und du hast obendrein auch noch einen seriellen 
Port zum PC hin, der sich in so manchen Situationen als sehr hilfreich 
erweisen wird.

Nochwas: an den Reset-Eingang gehört ein Hochzieh-Widerstand nach 3.3V 
und ein Kondensator gegen GND. Auch ein Hochzieher an RxD. Verlasse dich 
bei sowas NIE bloß auf eventuelle chipinterne Hochzieh-Stromquellen.

Siehe auch:
https://www.mikrocontroller.net/attachment/316790/STM32F103C8T6.ZIP

W.S.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Sebastian R. schrieb:
> Muss man definitiv nicht. Man muss dann in den Debugger-Einstellungen
> nur den Soft-Reset einstellen.

W.S. schrieb:
> Mit dem "Benötigen" ist das so eine Sache...

Sobald man die "WFI"-Anweisung entdeckt, welche den Prozessor in den 
Schlafmodus versetzt (Äquivalent zu "SLEEP" bei AVR), braucht man das 
richtige "NRESET". Ohne diesen Pin kann man den Controller sonst nicht 
mehr aufwecken. Hat man eine Firmware geflasht, welche sofort "WFI" 
aufruft und freiwillig nicht mehr aufwacht, und man NRESET nicht 
betätigen kann, ist der Controller praktisch "gebrickt". Ein 
Reset-Taster hilft zwar auch, aber den muss man dann immer im richtigen 
Moment betätigen (nervig). Man kann auch JTRST und NRESET verbinden und 
auf den Reset-Pin des Steckers führen.

BOOT hingegen würde ich mir sparen. Das braucht man so selten, da kann 
man auch eine Lötbrücke nehmen.

von Johannes S. (Gast)


Lesenswert?

Niklas G. schrieb:
> BOOT hingegen würde ich mir sparen. Das braucht man so selten, da kann
> man auch eine Lötbrücke nehmen.

gerade BOOT braucht man wenn man sich den Controller 'gebrickt' hat.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Johannes S. schrieb:
> gerade BOOT braucht man wenn man sich den Controller 'gebrickt' hat.

Das kann man dann umlöten. Über NRESET den Controller ent-bricken ist 
viel komfortabler als über BOOT; man muss nichtmal eine extra Anwendung 
starten. Die ST-Link-Software macht das durch "Connect under Reset" 
automatisch, sodass man sich dessen nichtmal bewusst sein muss. Als der 
ST-Link das noch nicht konnte, war das ein echtes Argument für den 
J-Link... Hat man nur BOOT verbunden, muss man immer die entsprechende 
PC-Anwendung starten (ist die eigentlich immer noch so buggy, gibt's da 
mittlerweile was für Linux?), neue Software flashen und schauen ob die 
geht. Richtig Debuggen kann man eine "WFI"-nutzende Anwendung so nicht.

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.