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
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.
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
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.
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
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.
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 ;)
A.. P. schrieb: > da du sonst beim Programmieren den > Controller immer manuell resetten musst. Muß man nicht!
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.
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...
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?
Lies Dir das ma durch, da habe ich auch etwas zur optionalen Reset Leitung geschrieben: http://stefanfrings.de/stm32/index.html#proginterfaces
Hm, hier nochmal als .sch-Datei, man kann auf dem Bild glaub ich nicht sehr viel erkennen. Grüße
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.
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.