Forum: Mikrocontroller und Digitale Elektronik STM32 Flash Schaltung über UART


von Patrick B. (patrick_b757)


Angehängte Dateien:

Lesenswert?

Hey ihr,

ich habe bisher nur mit dem ESP12 gearbeitet und möchte mir nun einmal 
dem STM32 genauer anschauen. Ich hoffe auf konstruktive Kritik und 
Anmerkungen!

*Ziel:* Flashen des STM32 über UART (TX/RX) wenn der Schalter SW1 
entsprechend gesetzt wird. Ausführung des Codes, wenn der Schalter SW1 
entsprechend gesetzt wird.
(inkl. Aufspielen des Arduino Bootloaders)

Bei dem Output möchte ich später eine 110kHz Frequenz via Code/Timer 
erstellen und ausgeben lassen - für den Initialtest aber nicht von 
Relevanz.

Die Frage kurz: Könnte der Schaltplan und das PCB so funktionieren?


Liebe Grüße und schon einmal vielen Dank!

P.S.: Ich habe schon viel versucht herauszufinden, allerdings findet man 
überwiegend immer nur "Blue Pill", "Blue Pill", "Blue Pill" und keine 
wirklichen Stand-Alone Schaltungen - oder ich war zu übermüdet ;)

----

Datenblatt: 
https://datasheet.lcsc.com/lcsc/1912111437_STMicroelectronics-STM32G030K8T6_C431631.pdf

LCSC Produktlink: 
https://www.lcsc.com/product-detail/Microcontroller-Units-MCUs-MPUs-SOCs_STMicroelectronics-STM32G030K8T6_C431631.html

: Bearbeitet durch User
von Monk (roehrmond)


Lesenswert?

Patrick B. schrieb:
> Könnte der Schaltplan und das PCB so funktionieren?

Wenn du beide Kontakte von SW1 einschaltest, macht er einen Kuzschluss 
von 3,3V nach GND. Nimm besser einen Wechselschalter, Jumper oder einen 
einfachen Kontakt + Pull-Down Widerstand. C2 ist überflüssig.

Ich würde ganz nahe an die Stromversorgungs Pins noch einen 100nF 
Kondensatoren hängen.

Füge noch einen Reset Taster (mit 100nF Kondensator und Pull-Up 
Widerstand) hinzu. Den brauchst du auf jeden Fall, wenn du mit einem 
chinesischen ST-Link v2 Stick arbeitest, weil der keine Reset Leitung 
hat.

: Bearbeitet durch User
von Werner P. (werner4096)


Lesenswert?

Ich würde da einiges anders machen ;-)

1. NRST mit Widerstand auf 3.3V und Taster auf GND
2. BOOT mit Widerstand auf 3.3V und Switch auf GND. Elko raus
3. Header UART: RX, TX und GND
4. Header SPI: 3.3V, MOSI, MISO, SCK, CS und GND
5. 100 nF an VDD und VSS. Nahe am STM

Grüße

Ups. Steve war schon schneller ;-)

: Bearbeitet durch User
von Monk (roehrmond)


Lesenswert?

Werner P. schrieb:
> Ups. Steve war schon schneller ;-)

Mag sein, aber ich finde deinen Hinweis zu den 3.3V/GND Anschlüssen der 
Stiftleisten  auch gut. Sowas vergisst man schnell im Eifer des 
Gefechts.

: Bearbeitet durch User
von Patrick B. (patrick_b757)


Angehängte Dateien:

Lesenswert?

!!BITTE NUR DAS BILD "NEW3" BEACHTEN!! (kann man Bilder hier auch 
irgendwie wieder entfernen?)

Steve van de Grens schrieb:
> Füge noch einen Reset Taster (mit 100nF Kondensator und Pull-Up
> Widerstand) hinzu. Den brauchst du auf jeden Fall, wenn du mit einem
> chinesischen ST-Link v2 Stick arbeitest, weil der keine Reset Leitung
> hat.

Erst einmal danke. Habe ich das so richtig verstanden was du meintest?

Aber sonst sieht es gut aus? :)


Das mit dem SPI nehme ich komplett raus, da ich den Teil denke ich gar 
nicht braucht für meinen Zweck :)

: Bearbeitet durch User
von Harry L. (mysth)


Lesenswert?

Da sind noch einige weitere Baustellen offen; angefangen mit den 
fehlenden 100nF an der Stromversorgung, dem fehlenden SWD-Anschluss usw.

Du solltest dir diese Appnote genau anschauen bevor du sowas anfängst!
https://www.st.com/resource/en/application_note/an5096-getting-started-with-stm32g0-series-hardware-development-stmicroelectronics.pdf

von Monk (roehrmond)


Lesenswert?

Patrick B. schrieb:
> Habe ich das so richtig verstanden was du meintest?

Nein. So geht das am Reset Pin:
1
          10kΩ        ______
2
3.3V o----[===]---+---o   o---+----| GND
3
                  |           |
4
                  |           |
5
                  +----||-----+ 100nF
6
                  |
7
                  o
8
                STM32 NRST

Der Widerstand zieht den Pin sicher auf HIGH. Der Taster zieht ihn auf 
Low, wenn betätigt. Der Kondensator verlängert den Reset Impuls ein 
bisschen, unterdrückt Kontakt-Prellen und Radiowellen, die sonst 
eventuell von den Leitungen empfangen werden.

Boot0 mit dem Jumper ist OK so.

Ich würde nicht auf den SWD Anschluss verzichten, den wirst du bald zum 
Debuggen brauchen. Dort geht es um ein anderes STM32 Modell, aber das 
Prinzip ist gleich: 
http://stefanfrings.de/stm32/stm32f3.html#proginterfaces

: Bearbeitet durch User
von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Warum faengst Du nicht mit einem passenden Nucleo Board an? Dann hast Du 
viel weniger offene Enden. Der Eigenentwurf ist dann erst einer der 
naechsten Schritte.

von Harry L. (mysth)


Lesenswert?

Steve van de Grens schrieb:
> Boot0 mit dem Jumper ist OK so.

Kann man so machen, ist aber alles Andere als elegant.
10k gegen Masse und ein einfacher Jumper oder Taster gegen Vcc ist der 
korrekte Weg. (siehe auch die oben verlinkte AppNote)

von Monk (roehrmond)


Lesenswert?

Harry L. schrieb:
> Kann man so machen, ist aber alles Andere als elegant.

Ich finde das gar nicht so unelegant, weil der Jumper so seinen festen 
Platz hat wo man dran schreiben kann "High/Low" oder "Prog/Run". Einen 
Jumper den man abziehen muss, liegt vielleicht irgendwo lose herum und 
geht verloren.

von Harry L. (mysth)


Lesenswert?

Steve van de Grens schrieb:
> liegt vielleicht irgendwo lose herum und
> geht verloren.

Nö!
den steckt man auf einen einzelnen Pin.
Oder man nutzt direkt einen Taster den man mit Boot0 beschriftet.
Oder man nutzt einen 3Pin-Header und lässt den 3. Pin unbeschaltet als 
"Parkplatz" für den Jumper.

: Bearbeitet durch User
von Bauform B. (bauformb)


Lesenswert?

Für die STM32G0 ist ein Debug-Stecker ganz besonders zu empfehlen. Ich 
bin bei STM32L4xx immer ohne ausgekommen, aber bei einem G0 habe ich den 
dringend gebraucht. Neben SWDIO, SWCLK und GND gehört da auch NRST und 
VDD dazu. Du wirst es wahrscheinlich brauchen. "Genormt" ist ein 
10-poliger mit RM1.27. Mit der richtigen Pinbelegung wäre das eine 
Fehlerquelle weniger.

Hier gibt's noch etwas zum Lesen:

https://developer.arm.com/documentation/ka001776/1-0/?lang=en

https://www.st.com/resource/en/datasheet/stm32g030c6.pdf

https://www.st.com/resource/en/application_note/cd00167594-stm32-microcontroller-system-memory-boot-mode-stmicroelectronics.pdf

https://www.st.com/resource/en/application_note/cd00264342-usart-protocol-used-in-the-stm32-bootloader-stmicroelectronics.pdf

https://www.st.com/resource/en/reference_manual/rm0454-stm32g0x0-advanced-armbased-32bit-mcus-stmicroelectronics.pdf

https://www.st.com/resource/en/errata_sheet/dm00625292-stm32g030x6x8-device-errata-stmicroelectronics.pdf

von Patrick B. (patrick_b757)


Angehängte Dateien:

Lesenswert?

Steve van de Grens schrieb:
> Nein. So geht das am Reset Pin:

So müsste es dann passen? (RESET2; hatte den falschen Wert bei C3 (ja 
der wird noch C2; hatte etwas probiert))

: Bearbeitet durch User
von Harry L. (mysth)


Lesenswert?

Patrick B. schrieb:
> So müsste es dann passen?

Nein!

Lies das!
https://www.st.com/resource/en/application_note/an5096-getting-started-with-stm32g0-series-hardware-development-stmicroelectronics.pdf

Bevor du das nicht verstanden hast, wird das nix mit deinem selbst 
entwickelten Board.

Kauf dir besser erst mal ein Nucleo-Board!

von Wastl (hartundweichware)


Lesenswert?

Harry L. schrieb:
> Lies das!

Ja, sollte man unbedingt tun! Ist sogar ein Schaltplan als
Referenz-Design drin. Unbedingt dran halten.

von Monk (roehrmond)


Lesenswert?

Harry L. schrieb:
> Oder...oder..oder

Wie schön, dass es für jeden Geschmack eine passende Lösung gibt.

von Andreas B. (abm)


Lesenswert?

Steve van de Grens schrieb:
> Patrick B. schrieb:
> Nein. So geht das am Reset Pin:          10kΩ        ______
> 3.3V o----[===]---+---o   o---+----| GND
>                   |           |
>                   |           |
>                   +----||-----+ 100nF
>                   |
>                   o
>                 STM32 NRST

Seufz, schon seltsam, dass das Rad immer wieder neu erfunden wird ... 
Der Widerstand ist höchst überflüssig, es ist nämlich schon einer 
eingebaut ;-)
Und die 100nF-Empfehlung basiert eben auch auch dem Wert des internen 
Pull-Ups. Wenn man schon einen Widerstand extra dranschraubt, sollte man 
auch 470nF nehmen, damit die Zeitkonstante wieder ungefährt passt.

Aber anscheinend lesen viele das Datenblatt nicht ... Übrigens ist z. B. 
beim Nucleo-G0B1RE eben auch keiner drauf, sondern genau die Empfehlung 
aus dem Datenblatt umgesetzt. Ich würde auch empfehlen, einfach mal im 
Schaltbild etwa vom MB1360 nachzusehen, bevor man zum x-ten Male meint, 
bei 0 anfangen zu müssen.

Ach ja, PA13 und PA14 (BOOT0) haben auch schon Pull-Up bzw. Down 
aktiviert nach Reset, also auch da recht überflüssig

: Bearbeitet durch User
von Thorsten S. (thosch)


Lesenswert?

Und wenn der Reset-Taster bei jeder Betätigung den 100n Kondensator 
kurzschließt, werden seine Kontakte nicht lange halten.
In Reihe mit dem Taster ist ein kleiner Widerstand erforderlich.
Etwa 33 Ω bis 100 Ω reichen aus, damit der Taster seine mechanische 
Lebensdauer erreicht.

: Bearbeitet durch User
von Monk (roehrmond)


Lesenswert?

Andreas B. schrieb:
> Der Widerstand ist höchst überflüssig, es ist nämlich schon einer
> eingebaut

Das ist mir bekannt.

Mir ist auch bekannt, dass man trotzdem einen externen Widerstand 
verwenden kann, weil der interne recht hochohmig ist. Dadurch werden 
versehentliche Resets durch elektromagnetische Felder vermieden.

> Wenn man schon einen Widerstand extra dranschraubt, sollte man
> auch 470nF nehmen, damit die Zeitkonstante wieder ungefähr passt.

Die minimale Dauer des Reset Impulses ist auch mit 100 nF eingehalten.

Thorsten S. schrieb:
> Und wenn der Reset-Taster bei jeder Betätigung den 100n Kondensator
> kurzschließt, werden seine Kontakte nicht lange halten.
> In Reihe mit dem Taster ist ein kleiner Widerstand erforderlich.

Durch ständige Wiederholung wird das nicht richtiger. Wenn du Lust hast, 
kannst du ja mal sämtliche Geräte in deinem Haushalt kontrollieren und 
alle umtauschen, die "falsch" konstruiert sind. Viel Glück.

: Bearbeitet durch User
von Monk (roehrmond)


Lesenswert?

Andreas B. schrieb:
> Ach ja, PA13 und PA14 (BOOT0) haben auch schon Pull-Up bzw. Down
> aktiviert nach Reset, also auch da recht überflüssig

Danke für den Hinweis.

Hab's gefunden:
"Upon reset, these pins are configured as SW debug alternate functions, 
and the internal pull-up on PA13 pin and the internal pull-down on PA14 
pin are activated."

Das ist neu, kenne ich von den F und L Serien anders.

von Bauform B. (bauformb)


Lesenswert?

Neu ist relativ, auch der F103 hatte schon Pull-Up/-Down an den 
Debug-Pins. Nur steht das nicht bei allen Typen auch im Datenblatt. Im 
Reference Manual dürfte es immer zu finden sein.

von Monk (roehrmond)


Lesenswert?

Bauform B. schrieb:
> Neu ist relativ, auch der F103 hatte schon Pull-Up/-Down an den
> Debug-Pins. Nur steht das nicht bei allen Typen auch im Datenblatt

Sicher? Ich frage nach, weil die Boot Jumper vom Blue-Pill Board (wegen 
R3 und R4) dann eigentlich nicht funktionieren können, tun sie aber.
https://freeelectron.ro/wp-content/uploads/2019/12/blue-pill-schematic.png

: Bearbeitet durch User
von Harry L. (mysth)


Lesenswert?

Steve van de Grens schrieb:
> Harry L. schrieb:
>> Oder...oder..oder
>
> Wie schön, dass es für jeden Geschmack eine passende Lösung gibt.

Das hat wenig mit "Geschmack" zu tun.
Bei der Lösung aus der AppNote kann man den Pin weiter als GPIO nutzen.

von Bauform B. (bauformb)


Angehängte Dateien:

Lesenswert?

Früher hatte die BOOT-Logik eigene BOOT-Pins, nur für den Zweck. Bei 
neueren Chips wird für BOOT0 ein anderer Pin mit benutzt (und BOOT1 ist 
eine Fuse). Solange BOOT0 ein normaler GPIO-Pin ist, merkt das niemand. 
Speziell beim STM32G030 wird aber der Debug-Pin SWCLK (PA14) mit benutzt 
und der hat einen internen Pull-Down.

Beim deinem Blue-Pill gibt es überhaupt kein Problem, es sind ja 
getrennte Pins.

Beim G030 ist die BOOT-Logik sowieso viel komplizierter, da ist die 
3-fach Belegung von PA14 schon egal, siehe AN2606. Das ist auch der 
Grund, warum man einen vollständigen SWD-Stecker haben sollte.

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.