Forum: Mikrocontroller und Digitale Elektronik PCB für STM32F303K8T6


von Sebastian T. (sebastian_tsch)


Angehängte Dateien:

Lesenswert?

Hi,

Ich möchte für einen STM32F303K8T6 ein eigenes PCB machen. Das flashen 
soll über den SWD erfolgen mithilfe eines externen STLINK/V2. Als clock 
nehme ich die interne clock. Gebootet soll vom flash Speicher werden, 
wie üblich. Die Pinbelegung ist ansonsten noch offen.

Sieht Jemand noch Fehler/Probleme im Schaltbild?

Bei der Schaltung habe ich mich an diesem Datenblatt orientiert:
http://www.st.com/content/ccc/resource/technical/document/application_note/31/14/f4/9d/d3/8f/48/2b/DM00070391.pdf/files/DM00070391.pdf/jcr:content/translations/en.DM00070391.pdf

Grüsse
Sebastian

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

R1 ist nicht in den Standardschaltungen ...
Lege BOOT0 ueber einen (4k7?) Widerstand an Masse, dann kannst Du zum 
Testen BOOT0 auch auf ein setzten.
3.3V und VDDA verbinde ich nicht direkt, sondern mit einer EMI 
Induktivitaet wie BLM18RK102. Das hält hichfrequente Störungen von VDDA 
fern.

von --- (Gast)


Lesenswert?

Einen Quarz, respektive die Pads dafür, wegzulassen ist Falschgeiz.

von Sebastian T. (sebastian_tsch)


Angehängte Dateien:

Lesenswert?

Danke, habe das mal angepasst. Zum Quarz, ich möchte eigentlich keinen 
verwenden, da ich keine zeitkritischen Anwendungen drauf laufen lasse 
und mir daher die Toleranz von um die 3% keine Rolle spielt. Das 
wichtigste ist vor allem die Kompaktheit.

Noch zum R1, ich habe das hier gesehen:

http://www.st.com/content/ccc/resource/technical/document/user_manual/8a/56/97/63/8d/56/41/73/DM00063382.pdf/files/DM00063382.pdf/jcr:content/translations/en.DM00063382.pdf

Und auch hier:

http://electronics.stackexchange.com/questions/274815/stm32-custom-board

Die Größe von 100kOhm ist vielleicht zu hoch?

: Bearbeitet durch User
von eagle user (Gast)


Lesenswert?

Möchtest du für den SWD-Stecker nicht lieber den Vorschlag von ARM 
übernehmen? Oder wenigstens die Pinbelegung (wenn RM1.27 zu klein wäre)? 
Da könnte man dann auch den PB3/TRACESWO drauf legen.

C2 ist mit 10uF eigentlich zu klein für den LM2937, Tantals gibt's in 
der Größe A auch noch mit 22u/10V.

--- schrieb:
> Einen Quarz, respektive die Pads dafür, wegzulassen ist
> Falschgeiz.

Wenn er das Teil nur in der Wohnung betreibt und kein CAN nutzt wäre ein 
Quarz Verschwendung.

von Sebastian T. (sebastian_tsch)


Angehängte Dateien:

Lesenswert?

eagle user schrieb:
> Möchtest du für den SWD-Stecker nicht lieber den Vorschlag von ARM
> übernehmen? Oder wenigstens die Pinbelegung (wenn RM1.27 zu klein wäre)?
> Da könnte man dann auch den PB3/TRACESWO drauf legen.

Meinst du den Vorschalg im Anhang? Für was genau ist TRACESWO? Zum 
flashen reicht ja SWCLK and SWDIO, oder?

Muss ich noch Pull-up Widerstände für SWCLK und SWDIO verwenden?

eagle user schrieb:
> C2 ist mit 10uF eigentlich zu klein für den LM2937, Tantals gibt's in
> der Größe A auch noch mit 22u/10V.

Das ist eine gute Idee.

Grüsse

: Bearbeitet durch User
von Sebastian T. (sebastian_tsch)


Lesenswert?

Ich sehe noch ein Problem mit V3.3 am SWD. Der SWD sollte ja eigentlich 
hier die Betriebspannung bereitstellen, oder? Kann ich einfach V3.3 am 
SWD weglassen wenn ich den Spannungsregler auf dem Board aktiviere beim 
flashen?

von Sebastian T. (sebastian_tsch)


Lesenswert?

Erträgt der LM2937 eine Spannung am Output von 3.3V? So könnte ich über 
SWD trotzdem das Board mit Spannung versorgen und dann nach dem flashen 
auf den Spannungsregler umschalten. Eine Diode für den Spannungsregler 
möchte ich nicht, da ich den ADC verwende und die Diode zu stark 
temperaturabhängig ist.

von Vincent H. (vinci)


Lesenswert?

Die VCC wird vom Board für SWD bereit gestellt, nicht umgekehrt. Ich 
empfehle dir dich an das gepostete Bild zu halten, sowohl an die 
Serienwiderstände, als auch ans Layout generell (Pinnummern...).

Weiters würde ich raten USART1 oder ähnliches zugänglich zu machen, 
falls du dich aus versehen mal aus allen sonstigen SWD/JTAG Optionen 
ausschließt. Die ganzen ST besitzen einen internen Bootloader, über den 
man schlimmstenfalls auch programmieren kann. Die benötigten Pins um in 
den Bootloader zu booten heißen (wer hätte das gedacht) meist BOOT0 und 
oder BOOT1. Da es da mittlerweile eine unüberschaubare Kombination an 
Typen gibt, musst du das selbst im Datenblatt nachschlagen.

SWO heißt übrigens "Serial Wire Output" und der Name ist Programm. Ich 
persönlich verwende SWO für Debug-Ausgaben ala printf. Kann schon recht 
praktisch sein, ist aber nicht zwingend erforderlich.

von W.S. (Gast)


Lesenswert?

eagle user schrieb:
> Möchtest du für den SWD-Stecker nicht lieber den Vorschlag von ARM
> übernehmen?

bäh.. wer will schon so einen Klumpen auf seinem Board haben? Ich bin 
mittlerweile auf die Steckverbinder im 1 mm Raster von JST gekommen, 6 
oder 10 polig je nachdem. Sowas trägt nicht so unsäglich auf wie eine 
Zollraster-Wanne. Nein, zu deinem Vorschlag kann man dem TO nicht 
wirklich zuraten - es sei denn, er will unbedingt die Originalkabel an 
seinem J-Link benutzen.

Ansonsten hagelt es hier von mir noch ne herbe Kritik an der geposteten 
Schaltung: Mal abgesehen von der "chinesischen" Art, keinen 
Stromlaufplan, sondern lediglich einen viereckigen Igel mit Pinborsten 
ohne den eigentlichen STROMLAUF zu malen, obwohl für diepaar Leitungen 
genug Platz gewesen wäre - sehe ich keinerlei Kommunikationsanschluß.

Soweit ich sehe, hat der Chip auch keinen USB. Sowas ist eigentlich 
immer sehr blöd. Deswegen würde ich lieber auf SWD und das ganze 
Debugging verzichten, als auf einen Anschluß für U(S)ART1-RX und -TX. 
Und wenn man schon dabei ist, dann auch noch /Reset und BOOT0 (oder 1 
siehe Manual).

Bei meiner 10 poligen 1 mm Lösung hab ich das: VCC, GND, RESET, BOOT0, 
RX, TX, SWDIO, SWDCLK, und die restlichen Pins mit nem SDA und SCL. Da 
hat man in allen Lebenslagen einen Kommunikationspfad zum µC.

Nochwas: SWDCLK und BOOT mit je 22k gegen GND.

W.S.

von Sebastian T. (sebastian_tsch)


Angehängte Dateien:

Lesenswert?

Hallo W.S.

USART werde ich sicher noch einplanen. Ich habe noch nicht ganz 
begriffen, wie ich über den USB den uC flashen kann? Steht das irgendwo 
im Datenblatt?

Noch eine Frage zum BOOT0: ich möchte ja den PIN zu low oder high 
setzten können, kann ich das so wie auf dem Bild machen oder sollte ich 
noch irgend einen Widerstand setzen?

Warum muss SWDCLK mit einem 22k zu GND? Auf dem Discovery hat der ja 
keinen solchen Pull_Down Widerstand?

: Bearbeitet durch User
von Harald A. (embedded)


Lesenswert?

Die BLM21 Bead an VDDA ist ja gut, aber der C10 ist dann auf der 
falschen Seite. HF-mäßig ist VDDA so nicht gut angebunden.

von Sebastian T. (sebastian_tsch)


Lesenswert?

Harald A. schrieb:
> Die BLM21 Bead an VDDA ist ja gut, aber der C10 ist dann auf der
> falschen Seite. HF-mäßig ist VDDA so nicht gut angebunden.

Da hast du natürlich recht, danke.

von Ralf M. M. (ramime)


Lesenswert?

W.S. schrieb:
> bäh.. wer will schon so einen Klumpen auf seinem Board haben? Ich bin
> mittlerweile auf die Steckverbinder im 1 mm Raster von JST gekommen, 6
> oder 10 polig je nachdem.

Welche nimmst Du da genau? Ich habe auch schon damit experimentiert, 
aber die die ich da hatte (die die in den LiPos 3x/4x/5x genutzt werden) 
die sind schwer wieder auseinander zu bekommen.

von Mehmet K. (mkmk)


Angehängte Dateien:

Lesenswert?

R1 würde ich nochmals überdenken.

von W.S. (Gast)


Lesenswert?

Ralf M. M. schrieb:
> Welche nimmst Du da genau?

JST SM10BSRSS-TB
1 vcc
2 sda
3 scl
4 swdclk
5 rx1
6 tx1
7 swdio
8 boot
9 reset
10 gnd

Die Anschlußstrippen für den Steckerteil gibt's übrigens fertig gecrimpt 
bei Farnell oder RS. Und das Beispielbild bei Farnell ist falsch. Die 
Dinger gibt's stehend und liegend.

W.S.

von W.S. (Gast)


Lesenswert?

Sebastian T. schrieb:
> Ich habe noch nicht ganz
> begriffen, wie ich über den USB den uC flashen kann? Steht das irgendwo
> im Datenblatt?

Ich hab mir jetzt das Datenblatt zum STM32F303K8T6 nicht durchgelesen, 
aber soweit ich das sehe, hat dieser Typ gar keinen USB-Core drin. Also 
kannst du jetzt entweder auf USB pfeifen oder dir einen anderen 
Controllertyp aussuchen. Es geht ja auch ohne, dann aber am besten über 
den USART, der auch vom Bootlader benutzt wird. Den wiederum kannst du 
mit einem billigen USB-Seriell Adapter benutzen, wenn dieser Adapter 
simple TTL-Pegel liefert. z.B. ein simpler FTDI oder so. Also ohne 
MAX232.

Und wenn du dir nen anderen µC aussuchen solltest, dann guck lieber 
zuvor in die Programmier-Appnote von ST (Nummer hab ich grad vergessen), 
ob der sich über USB programmieren läßt. Bei einigen Typen von NXP weiß 
ich, daß die das können: da meldet sich der Bootlader als kleiner 
Massenspeicher an und man braucht dann bloß seine Firmware 
draufzukopieren - ganz OHNE jegliches Programmiergeschirre.

W.S.

von Sebastian T. (sebastian_tsch)


Lesenswert?

Ok, so brächte ich also eigentlich nur den USART um das ganze richtig 
kompakt zu machen?

von eagle user (Gast)


Lesenswert?

Jein, der USART-Stecker braucht zwar nur 3 Pins, aber du musst auch noch 
NRST und BOOT richtig ansteuern. Einen Reset-Taster hast du ja sowieso, 
dann wäre wohl ein Jumper für BOOT die kompakteste Lösung; 
bedienerfreundlicher wäre ein zweiter Taster.

Wenn du für die Anwendung einen MAX232 brauchst, aber nur RX und TX 
nutzt, kannst du BOOT und NRST über DTR und RTS vom PC aus fern steuern 
-- noch kompakter und noch komfortabler.

von Gerd E. (robberknight)


Angehängte Dateien:

Lesenswert?

eagle user schrieb:
> Jein, der USART-Stecker braucht zwar nur 3 Pins, aber du musst auch noch
> NRST und BOOT richtig ansteuern. Einen Reset-Taster hast du ja sowieso,
> dann wäre wohl ein Jumper für BOOT die kompakteste Lösung;
> bedienerfreundlicher wäre ein zweiter Taster.

So wie in diesem Schaltplanausschnitt mache ich es bei einigen von 
meinen Boards.

Wenn man den Taster kurz drückt, bekommt man einen Reset. Wenn man 
länger als 3 Sekunden draufbleibt, gibt es einen Reset und der 
Bootloader wird aktiviert.

Funktioniert zuverlässig, ist bequem und man spart sich den Platz für 
den 2. Taster.

von W.S. (Gast)


Lesenswert?

Gerd E. schrieb:
> Funktioniert zuverlässig, ist bequem und man spart sich den Platz für
> den 2. Taster.

Nett gedacht, kostet aber einiges an Bauteilen. Ich habe (wie weiter 
oben geschrieben) einfach Reset und Boot an den Steckverbinder gelegt. 
Bei einem Verbinder im 1.0 Raster oder 1.25 Raster trägt das viel 
weniger auf als ein Taster und man kann vom PC aus beides betätigen. 
Finde ich angenehmer.

W.S.

von Gerd E. (robberknight)


Lesenswert?

W.S. schrieb:
> Nett gedacht, kostet aber einiges an Bauteilen.

Naja, 2R, 1C, nen kleiner FET. Das läuft unter Hühnerfutter und fällt in 
der BOM nicht wirklich auf. Und im Gegensatz zu dem einen etwas größeren 
Taster, passen diese Kleinteile im Layout auch leicht in irgendwelche 
noch freie Ecken.

Vor allem wenn die Schaltung in ein Gehäuse eingebaut ist, ist ein 
zusätzlicher von außen zugänglicher Taster aufwendiger oder unschöner. 
Da können auch zusätzliche Pins stören.

> Ich habe (wie weiter
> oben geschrieben) einfach Reset und Boot an den Steckverbinder gelegt.
> Bei einem Verbinder im 1.0 Raster oder 1.25 Raster trägt das viel
> weniger auf als ein Taster und man kann vom PC aus beides betätigen.

Du brauchst dann halt nen USB-Seriell-Wandler, der diese Pins 
rausgeführt hat und die Du einfach per Programm ansteuern kannst, ohne 
daß diese Ansteuerung mit dem Flashprogramm kollidiert.

Wenn ich das will, dann nehme ich gleich den ganzen SWD-Stecker mit 
allem. Dann ist auch die Ansteuerung am PC kein Thema, denn dann ist das 
ja alles einheitlich über den Debugger zugänglich.

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.