STM32F102 USB-Programmierung

Ich entwerfe derzeit eine Platine für einen STM32F102-Chip, der den USB-Bus verwenden muss, um Daten zu übertragen, während der Chip läuft. Ich möchte jedoch auch den Chip über USB programmieren können, während ich die Software entwickle.

Ich möchte sicherstellen, dass ich beim Entwerfen des Boards nichts tue, was dies später unmöglich macht, daher bitte ich um einige Klarstellungen zu einigen Dingen.

Zunächst einmal gemäß dem USB-Standard, da der STM32F1 USB mit voller Geschwindigkeit unterstützt, habe ich einen Pull-up-Widerstand auf der D + -Leitung.

Um nun vom Haupt-Flash zu booten, muss der Boot0-Pin logisch 0 sein, also werde ich ihn mit einem Pulldown-Widerstand auf der Platine verbinden. Um den mitgelieferten Bootloader zu verwenden (was ich meiner Meinung nach über USB programmieren muss), muss der Boot0-Pin logisch 1 sein und der Boot1-Pin (der ein gpio ist, jedoch ein Eingang beim Zurücksetzen ist) sollte logisch 0 sein.

Angenommen, ich verstehe alle diese Informationen richtig, was wäre der beste Weg, um den Chip zu programmieren, wenn ein USB-Kabel angeschlossen ist? Kann ich USB V+ und GND verwenden, um die am Boot-Pin benötigten Logikpegel einzustellen? oder sollte ich diese an die Platinen V+ und GND anschließen und einen Schalter verwenden, um die Boot-Pins entsprechend einzustellen?

Wenn weitere Informationen erforderlich sind, helfe ich Ihnen gerne zu verstehen, was ich brauche oder um was ich bitte.

Betrachten Sie die Schaltpläne für das Open-Source-Arduino. Es hat die gleiche USB-Funktionalität, die Sie suchen. Über USB können Sie es mit Strom versorgen, programmieren und als COM-Port verwenden. Zwischen diesem Schaltplan und dem Arduino-Bootloader wird viel Arbeit für Sie erledigt. Es ist einen Blick wert.
Arduino verwendet einen AVR, der mir nicht die gleichen Probleme bereitet wie der STM32 mit den beiden Boot-Pins, aber der STM32 wird für dieses Projekt besser geeignet sein, also bleibe ich dabei. Was ich mit den beiden Boot-Pins mache, ist mein Hauptproblem.
Ich sage nicht, dass Sie den Atmel uC verwenden sollen, ich sage nur, dass Sie das USB-Schaltungsdesign als Ausgangspunkt verwenden könnten. Das und der Bootloader müssten auf den STM32 portiert werden. Hier ist ein "Arduino" mit dem STM32. Es hätte genau die Funktionalität mit USB, die Sie wollen: emcu.it/ARDUINO-STM32/Arduino-and-STM32.html
Okay, ich verstehe, was Sie sagen, ich hätte immer noch Probleme, die Verwendung des Boot-Pins zu entschlüsseln, aber dieser Link sollte dabei sehr hilfreich sein, danke!

Antworten (1)

Ich habe eine schlechte Nachricht für Sie: Der STM32F102 (und ich vermute die STM32F1xx-Geräte im Allgemeinen) hat keinen USB-Bootloader, nur einen UART-Bootloader. Sie benötigen einen STM32F2xx oder STM32F4xx, um einen USB-Bootloader in das System-ROM-Image zu laden.

Sie haben viele Alternativen, darunter:

  1. Verwenden Sie den UART-Bootloader, möglicherweise mit einem USB-UART-Brücken-IC wie dem FT232.
  2. Stellen Sie Ihren eigenen USB-Bootloader bereit, den Sie über einen anderen Mechanismus laden.
  3. Verwenden Sie einen JTAG/SWD-Programmierer wie den STLinkV2 (sie sind wirklich billig, aber ziemlich langsam, was JTAG angeht). Dies ist Ihre beste Option, da Sie beim Codieren Fehler beheben können.
STM32F3 verfügt im Allgemeinen auch über einen USB-Bootloader und ist möglicherweise nur wenige Pins von der Layout-Kompatibilität entfernt, obwohl die Programmierschnittstelle zu On-Chip-Peripheriegeräten ganz anders sein kann. Platzieren Sie auf jeden Fall einen Header für die Verwendung eines 10-Dollar-Discovery-Boards als SWD-Pod - es ist äußerst praktisch. Und ein Header für einen UART für die Debug-Ausgabe, wenn die Software nicht gut genug funktioniert, um USB aufrechtzuerhalten.
Ah, jetzt verstehe ich, warum ich Probleme hatte, das zu finden, was ich wollte, solange USB noch für die Kommunikation verwendet werden kann, ist es kein ernstes Problem, danke.