Wie fange ich mit der STM32F103C8T6-Karte an?

Ich verwende seit einigen Jahren 8-Bit-AVR-MCUs, um mit Studenten Line-Follower-Roboter zu bauen. Jetzt würde ich gerne auf einen ARM Cortex-M3 umsteigen, weil ich einige CPU-intensivere Funktionen wie Odometrie und Sensorfusion hinzufügen möchte.

Die Anforderungen sind:

  • 8 analoge Eingänge,
  • 4 PWM-Ausgänge,
  • Ich 2 C,
  • 2 Quadratur-Encoder-Eingänge,
  • Serielle E/A,
  • Kabellose Selbstprogrammierung ohne physischen Zugriff auf den Roboter.
  • Multiplattform-Toolchain + IDE (OS X, Linux, Windows).

Die Schritte, die ich bisher unternommen habe, sind:

Ich verwende dieses STM32F103C8-basierte Board. Ich glaube, diese MCU hat alles, was ich brauche, einschließlich der 2 x QEI, die ich in Software implementieren wollte, aber diese hat sie zufällig in Hardware, so großartig:

Ich habe dies befolgt, um meine Toolchain + IDE einzurichten:

Ich habe festgestellt, dass die Dokumentation für diesen Chip in einer Reihe von PDFs verstreut ist, die ich heruntergeladen habe:

Ich habe auch die Standard-Peripheriebibliothek STM32F10x heruntergeladen, aber das wiederum hat mir empfohlen, den neueren STM32CubeF1 zu kaufen, von dem ich glaube, dass er nur eine Marketing-Umbenennung des oben Genannten ist, also habe ich beides bekommen:

Schließlich habe ich auch „The Definitive Guide to the ARM Cortex-M3“ von Joseph Yiu, den ich lese, während ich auf die Ankunft der Platinen warte.

Meine Fragen sind:

  1. Ich bin ein bisschen überwältigt von der Dokumentation, um es gelinde auszudrücken, und ich bin mir nicht einmal sicher, ob ich alles habe. Beispielsweise geben das Datenblatt und das Referenzhandbuch an, dass der Chip über 3 Timer verfügt, die Quadratur-codierte Eingänge verarbeiten können. Aber ich kann in den obigen PDFs nirgendwo eine Dokumentation der Register finden, die die Timer steuern. Was vermisse ich?

  2. Soll ich die (ältere?) Standard Peripheral Library oder das (neuere?) Cube-Ding verwenden? Was ist der Unterschied? Ich verstehe, dass beide Bibliotheken mich vor der direkten Manipulation von Registern bewahren und der empfohlene Weg sind. Habe ich recht?

  3. Wo ist die Dokumentation für die Bibliotheken (abgesehen von den eingebetteten Doxygen-Kommentaren, die nett und alle sind, aber ich hätte lieber ein durchsuchbares HTML/PDF)?

  4. Ich habe Eclipse + GCC ARM + OpenOCD als meine Toolchain gewählt, weil ich der Meinung bin, dass dies die einzige Option ist, die auf den 3 Hauptbetriebssystemen ohne Codegröße oder andere Einschränkungen ausgeführt werden kann. Gibt es noch mehr Optionen?

Auf Seite 324 des Referenzhandbuchs finden Sie Einzelheiten zur Encoder-Schnittstelle mit TIM1 und TIM8.
Darf ich Embedded Systems - Shape The World ARM-Cortex-M3 vorschlagen, aber es ist von TI. Außerdem konnte ich Eclipse + GCC ARM + OpenOCD für Ubuntu konfigurieren, es war ziemlich mühsam und zumindest für mich nicht übermäßig zuverlässig.
ARM-gcc-Lösungen sind im Allgemeinen ziemlich stabil und ungefähr die portabelste Option auf dem Markt. Der Schwerpunkt liegt eher auf Builds, die von einem Makefile oder einer Build-Automatisierung angetrieben werden, sodass die Integration in bestehende Softwareentwicklungspraktiken der Organisation hervorragend ist. In welcher IDE (falls vorhanden) bearbeitet und experimentelle Builds betrieben werden sollen, ist in der Regel eine viel persönlichere Entscheidung, bei der nicht unbedingt so viel Aufwand bei der Toolentwicklung darauf verwendet wird. Das letzte, womit ich mich persönlich befassen möchte, ist ein Ziel / eine Toolchain, die davon ausgeht, dass ich IDEs ändern werde, nur um damit zu arbeiten.

Antworten (1)

  1. Was Datenblätter angeht, sind sie in der Tat geteilt. "Referenzhandbuch" ist eine komplexe Beschreibung der Vorgehensweise, der Konfiguration und detaillierter Überlegungen zur gesamten MCU. "Datenblatt" ist andererseits nur eine kurze Beschreibung der MCU-Funktionen, Pinbelegungen, Gehäuse usw. Es gibt auch ein sehr hilfreiches Dokument für jede STM32-Zeile (F1,2...7) "Erste Schritte mit der STM32F7xxxx-MCU-Hardwareentwicklung". bietet Ihnen viele Informationen, falls Sie ein individuelles Board entwerfen möchten. Im Vergleich zu AVRs werden Registerbeschreibungen manchmal etwas abseits von der Hauptbeschreibung eines bestimmten Kapitels platziert.

  2. STM32CubeMX ist keine Bibliothek, sondern nur ein nützliches Programm von ST, mit dem Sie Pinbelegungen, Konfigurationen, Systemuhren usw. festlegen und am Ende einen Code und das gesamte Projekt generieren können. Das Projekt kann speziell für Eclipse (System Workbench für STM32) generiert werden, in das Sie dieses Projekt einfach importieren und schon kann es losgehen. Die neue Bibliothek ist HAL ("Hardware Abstraction Layer") und versuchen Sie, sie zu verwenden. Das ist das Neue, und manchmal ist es schwierig, Beispiele im Internet zu finden, aber bringen Sie Ihren Schülern keine veralteten Technologien bei. HAL ist bequem zu bedienen und verfügt über eine Dokumentation, daher denke ich, dass es die bessere Wahl ist.

  3. Welche Bibliothek? Jedenfalls sollte es kein Problem sein, sie zu googeln, denke ich.

  4. Auch wenn Sie nur ein Betriebssystem (wie Windows) verwenden möchten, ist Eclipse (AC6 = System Workbench für STM32) - meiner Meinung nach - die beste Option. Da ist zum Beispiel uVision 5 von Keil – aber das ist wirklich schreckliche IDE – es fehlen die meisten Funktionen, die IDE bieten sollte (Refrakturierung, Click-and-Search, richtige Fehlerprüfung, Finden von Referenzen und viele, viele mehr). Alles in allem ist Eclipse also so ziemlich die einzige vernünftige Wahl für IDE für STM32.

Tatsächlich können Sie fast jede IDE verwenden, die zum Ansteuern eines externen Compilers erstellt werden kann.