STM32-PCB-Problem

Ich versuche seit fast einem Jahr, einen STM32 dazu zu bringen, auf einer kundenspezifischen Leiterplatte zu arbeiten. Ich habe einen STM32F107 und habe ihn wie im beigefügten Diagramm gezeigt verdrahtet (nur die gezeigten Komponenten sind derzeit gelötet).

Ist diese Schaltung korrekt oder hat sie eklatante Fehler, die ich übersehe?

Geben Sie hier die Bildbeschreibung ein

Ich habe versucht, OpenOCD mit swd zu verbinden, und ich habe auch versucht, BOOT0 hochzuziehen und ohne Erfolg eine Verbindung über USART1 herzustellen.

Wenn Sie JTAG verwenden möchten, müssen Sie TDI an Pin PA15 anschließen. Haben Sie versucht, das Gerät im SWD-Modus zu programmieren? Und wo ist der NRST-Pin angeschlossen?
Hallo, Entschuldigung, ich meinte SWD, nicht JTAG. Ja, das habe ich ohne Erfolg versucht - Init schlägt fehl. Der NRST-Pin ist nur mit einem Testpad verbunden, das ich an den SWD-Programmierer gelötet habe.
Ich sehe keine anderen offensichtlichen Probleme mit dem Schaltplan. Beim Hardware-Debugging müssen Sie drei grundlegende Dinge überprüfen: Stromversorgung, Uhr und Zurücksetzen. Wenn all das wie erwartet funktioniert, würde ich versuchen, einen anderen Programmierer auszuprobieren oder zu überprüfen, ob Ihr Programmierer versucht, SWD korrekt zu initialisieren (siehe Seite 1071 des Referenzhandbuchs).
Zunächst empfehle ich Ihnen, Ihr Board gemäß diesem Dokument zu entwerfen: Erste Schritte mit der STM32F 10xxx-Hardwareentwicklung .
Haben Sie einen geeigneten Pull-up zu NRST eingefügt?
Der NRST-Pin wird standardmäßig intern hochgezogen. Abbildung 10, Seite 124 .
Wenn Sie SWD verwenden, vergewissern Sie sich, dass Sie SWCLK-, SWDIO- und GND-Pins korrekt angeschlossen haben. Weitere Einzelheiten finden Sie im Kommentar von @BenceKaulics. Das Verbinden von NRST mit dem RESET-Pin ist wichtig, aber nicht obligatorisch. Außerdem rate ich, BOOT0 nicht hoch zu ziehen. Lassen Sie es niedrig und Ihr Code wird in den Flash-Speicher geschrieben. BOOT0- und BOOT1-Pins dienen der Speicherverwaltung.
Welche Art von Hardware-Debugging hast du gemacht? Das sieht nicht nach einem Problem mit dem Schaltplan aus. Wenn es dann so wäre, würde ich sagen, dass ich Ihre Kristallschaltung nicht mag, weil sie keine Etiketten für die Kondensatoren hat, was mich misstrauisch macht.
Der Schaltplan scheint in Ordnung zu sein. Schauen Sie sich die Pinbelegung des Pakets an.
Versorgen Sie den Chip überhaupt mit Strom oder fehlt dieser Teil des Schaltplans nur? Vielleicht ist es ein zweiter Unterteil in Ihrem Eagle-Schaltplan. Pins 12/13 sind nur für VDD-Analog.
Stimmen Sie @Hans zu, es sieht so aus, als würden Sie ein LFQP64-Paket verwenden, das VDD auf den Pins 19, 32, 48 und 64 haben sollte. Ich würde tun, was viele andere gesagt haben, und Ihr Design mit einem feinen Zahnkamm überprüfen. (Es sei denn, Sie haben diesen Teil Ihrer Schaltpläne nicht gezeigt)

Antworten (4)

Da ich noch keinen Kommentar abgeben kann, poste ich dies als Antwort: Für mein ganzes Leben kann ich die SWD-Pins auf Ihrem Schaltplan nicht finden, die mit irgendetwas verbunden sind, und ohne sie ist die Programmierung nur über den Bootloader von ST über UART möglich BOOT1 und Debuggen ist unmöglich. Wenn Sie SWD verwenden möchten, müssen Sie 5 Pins verbinden:

  • SWDIO
  • SWCLK
  • NRST
  • VDD
  • Masse

SWDIO und SWCLK sind für die Datenübertragung, NRST wird manchmal verwendet, um die Karte zu programmieren ("Programm unter Reset"), VDD ist notwendig, um eine Verbindung zu ST-Links TVDD herzustellen, da es zur Erkennung verwendet wird, und GND, um eine gemeinsame Masse zu haben.

Außerdem müssen Sie Kondensatoren an den 8-MHz-Quarzoszillatoren anbringen, obwohl Sie bei Betrachtung Ihres Designs keine genaue Frequenz benötigen, sodass Sie auch den internen 8-MHz-Oszillator des F107 verwenden und etwas Geld sparen können.

Kondensatoren scheinen in den Oszillator integriert zu sein
@Daniel mea culpa

Ich verstehe, dass meine Antwort eher für die Leute ist, die sich in Zukunft mit diesem Thema befassen werden. In stm32f107 boot1 (PB2) Pin ist nicht erforderlich, Sie können es in Tabelle 9 im Referenzhandbuch auf Seite 59 überprüfen. STM32F107 könnte in 3 verschiedenen Boot-Modi ausgeführt werden, die über BOOT[1:0] ausgewählt werden können.

-----------------------------------------------------------------------------
| boot1 | boot0 | Boot Mode        | Alliasing
-----------------------------------------------------------------------------
|  X    |   0   | Main Flash Mmory | Main Flash memory is selected as boot space
-----------------------------------------------------------------------------
|  0    |   1   | System Memory    | System memory is selected as boot space
-----------------------------------------------------------------------------
|  1    |   1   |  Embedded SRAM   | Embedded SRAM is selected as boot space
-----------------------------------------------------------------------------

Also denke ich, dass pb2 keine richtige Lösung war.

Obwohl es fraglich ist, ob dies technisch eher eine Antwort als ein Kommentar zu einer anderen Antwort ist, ist dies ein wichtiger Haken! Solange boot0 niedrig ist, spielt boot1 keine Rolle. Es ist jedoch erwähnenswert, dass Boot0 Low gelegentlich die SWD-Nutzung frustrieren kann, wenn Code im Flash vorhanden ist, der die SWD-Pins umfunktioniert. In diesem Fall kann das Anheben von boot0 auf so, dass der Chip von einer anderen Quelle startet, eine Problemumgehung sein (das Verbinden von SWD, während ein Reset aktiviert ist, ist eine andere).

Sie sollten unbedingt dieses kurze Tutorial von ST lesen: „Getting started with STM32F 10xxx hardware development“

Es enthält ein Kapitel über die Programmierung über JTAG und SWD sowie ein Beispiel-Referenzschema mit minimal erforderlichen Komponenten zum Ausführen von STM32, sodass Sie dies mit Ihrem Design vergleichen können.

Danke. Ich habe vergessen, pb2 mit Masse (dem anderen Boot-Pin) zu verbinden.

Bester Gareth

Wenn dies die Lösung der ursprünglichen Frage ist, können Sie sie als akzeptiert markieren (auch wenn Sie Ihre eigene Frage beantwortet haben) =-)
Wie Sergii betonte, könnte diese Theorie nicht die Lösung des Problems sein, denn wenn boot0 niedrig ist, wie in Ihrem Schema gezeigt, ist der Zustand von boot1 irrelevant . Wenn Ihr Problem jetzt gelöst ist, wurde es durch etwas anderes gelöst , vielleicht etwas, das Sie nicht kennen, wie z. B. eine lose Verbindung, Debugger-Verkabelung oder Netzteilwechsel usw.