In letzter Zeit stoße ich immer häufiger auf Holivars zum Thema Cube MX und HAL, wie sie auf STM32-Controller angewendet werden.
Einerseits gibt es Befürworter, die die einfache Konfiguration und die Lesbarkeit des Codes mögen.
Auf der anderen Seite schreiben Anhänger alles mit ihren Händen, wofür Arbeitsgeschwindigkeit und sorgfältiger Umgang mit Ressourcen wichtig sind.
Versuchen Sie, "Hallo Welt" mit den drei am häufigsten verwendeten Pfaden CMSIS, LL, HAL zu schreiben. Wir werden die Kosten schätzen (Controller-Ressourcen, das Volumen der ausführbaren Datei und natürlich die Zeit des Entwicklers).
Der Artikel besteht aus mehreren Teilen:
STM32 Schnellstart. Teil 1 Software, Materialien, Cube MX.
STM32 Schnellstart. Teil 2 Hello World auf HAL, Debugging in Atollic TrueSTUDIO einrichten
STM32 Schnellstart. Teil 3 Hallo Welt auf LL
STM32 Schnellstart. Teil 4 Hallo Welt auf CMSIS
STM32 Schnellstart. Teil 5 Zusammenfassung, Vergleich von HAL, LL, CMSIS.
Lassen Sie uns zunächst entscheiden, was wir tatsächlich programmieren, dh die richtige Hardware finden.
Eine ideale Option wäre eine Budgetkarte für den Mikrocontroller STM32F103C8T6.

Diese Gebühr ist auf der gesamten bekannten Website zu einem Preis von 100 russischen Rubel erhältlich.
Suche nach Schlüsselwörtern: STM32F103C8T6 ARM STM32 Minimum
https://en.aliexpress.com/af/STM32F103C8T6-ARM-STM32-Minimum.html?SearchText=STM32F103C8T6+ARM+STM32+MinimumUm die Firmware auszufüllen und mit dem Debuggen zu spielen, ist auch ein Programmierer erforderlich
Für den Anfang und für die zukünftige Verwendung ist der chinesische Klon des ST-LINK V2-Programmiergeräts ideal.
Sie können auf der gleichen Website zu einem Preis von 120 russischen Rubel kaufen.

Suche nach Stichwörtern ST LINK Stlink ST 252dLink V2 Mini STM8 STM32:
https://en.aliexpress.com/af/ST-LINK-Stlink-ST%25252dLink-V2-Mini-STM8-STM32.html?SearchText=ST+LINK+Stlink+ST%252dLink+V2+Mini+STM8+ STM32Um Software für STM32 zu entwickeln, können Sie verschiedene IDEs verwenden.
Am beliebtesten sind IAR, Keil, Coocox (Eclipse).
Wir werden dem Weg folgen, der in letzter Zeit von ST selbst völlig kostenlos und vollständig bereitgestellt wurde.
Wir werden Atollic TrueSTUDIO für STM32 oder in den einfachen Leuten Tolik verwenden.
Was sind die Vorteile dieser Software: absolut kostenlos, die Größe des Codes ist unbegrenzt, es gibt einen guten Debugger, eine einfache Installation und Konfiguration.
Nachteile: Keine automatische Code-Vervollständigung.
Versionen für Windows und Linux sind verfügbar.
Hier herunterladen
https://atollic.com/resources/download/Es sollte keine Probleme mit der Installation dieser Software geben, alles ist intuitiv klar, wir wählen, wo wir sie ablegen möchten und klicken die ganze Zeit auf "Weiter".
Nach der Installation können Sie es nicht ausführen, da Sie neben der IDE selbst noch etwas anderes benötigen.
Wenn Sie es noch gestartet haben, schließen Sie es einfach.
Da TrueSTUDIO ein Entwicklungs- und Debugging-Tool ist, möchte ich das Projekt nicht von Hand zusammenstellen (die erforderlichen Bibliotheken verbinden und die Pfade vorschreiben), sondern eine vorkonfigurierte Datei erhalten, in die Sie ohne unnötige Probleme sofort Code schreiben können.
Verwenden Sie dazu das Programm Cube MX Code Generator oder das allgemeine Programm „Kalokub“.
Diese Software ist der erste Stolperstein in Holivars, was unter STM geschrieben werden soll: auf Registern und CMSIS oder auf HAL.
Verteidiger der ersten Ideologie führen folgende Argumente an: Cube MX generiert eine riesige, unnötige Menge an Code, was auch die Arbeit von MK verlangsamt.
Verteidiger der zweiten - sagen, dass der automatisch generierte Code die Entwicklungszeit verkürzt, sodass der Entwickler schnell zum Rinnenbereich des Geräts (zur Hauptlogik) wechseln und die Peripherieroutine der speziellen Software (Cube MX) übergeben kann.
Seltsamerweise sind diese beiden Ideologien wahr und in der Praxis anwendbar, aber nur jede unter ihren eigenen Bedingungen.
Schauen wir uns einige Beispiele an:
Beispiel Nr. 1: Es ist erforderlich, ein Gerät zu entwickeln, das so billig wie möglich ist, da die Produktion in Chargen von 100500 Stück pro Jahr geplant ist. Natürlich führt jeder zusätzliche Rubel des Gerätepreises zu Hunderttausenden Rubel Kosten für das endgültige Gerät. Darüber hinaus gibt es in der geplanten Entwicklung einige umfangreiche Berechnungen und Arbeiten mit Peripheriegeräten (ADC, SPI, UART) bei maximaler Geschwindigkeit.
Das Gerät ist ein vollständig autonomes Produkt. In Zukunft sind minimale Änderungen für den gesamten Produktionszeitraum dieser Geräte geplant. Die Entwicklungszeit bis zur fertigen Probe beträgt 1-2 Jahre.
Beispiel Nr. 2: Es wird ein Prototyp eines Geräts benötigt, der für den Kunden von Interesse sein kann, und er wird 100 Stück ähnlicher Geräte für den Umbau seiner Einrichtung bestellen. Die erste geplante Charge sollte innerhalb von 2 Monaten an den Kunden versendet werden. Die Größe der ersten Testcharge beträgt 10 Stück.
Die genauen Spezifikationen werden während der Arbeit am Projekt angepasst. Es ist jedoch bekannt, dass in Zukunft mehrere Revisionen der Hardware geplant sind, für die eine schnelle Anpassung der gesamten angewandten Logik erforderlich ist.
Im ersten Beispiel wäre die ideale Option, den billigsten Controller auszuwählen und einen hardwareabhängigen, aber optimalen Code zu schreiben, bei dem die Arbeit mit Peripheriegeräten durch Zugriff auf die entsprechenden Register (CMSIS) organisiert wird. Der Entwickler, der an diesem Projekt beteiligt ist, sollte über gute oder ausgezeichnete Kenntnisse der Peripherie einer bestimmten MK-Familie verfügen. Idealerweise sollte er - wenn er versucht, ihn nachts aufzuwecken - die Adresse des erforderlichen Vektors sofort aus der Tabelle der Interruptvektoren benennen.
Im zweiten Beispiel wird die Wahl des Controllers durch die verfügbare Hardware sowie die Zeit bestimmt, die zum Schreiben der vom Kunden benötigten Funktionalität erforderlich ist. Daher tritt die Geschwindigkeit und Optimalität der Software selbst in den Hintergrund. Es ist keine Zeit für die manuelle Initialisierung, ebenso wenig wie für die Ermittlung von Hardwareabhängigkeiten.
In diesem Fall wird eine Steuerung ausgewählt, die in der aktuellen Region schnell in Produktion gehen kann, mit Cube MX initialisiert, die Anwendungslogik in HAL geschrieben und der Prototyp zum Testen an den Kunden übertragen. Ein solches Projekt kann von jedem durchschnittlichen Entwickler durchgeführt werden, der Kenntnisse in der Arbeit mit der Zielprogrammiersprache erworben hat. Ein Verständnis der Feinheiten der Arbeit der Peripherie ist praktisch nicht erforderlich.
Egal wie traurig es auch klingen mag - in der Realität der modernen Geräteentwicklung in Russland wird Beispiel Nr. 1 immer seltener und gibt den Staffelstab an Beispiel Nr. 2 weiter.
Wir werden ganz am Ende der Artikelserie auf die Diskussion der Beispiele Nr. 1 und Nr. 2 zurückkommen und nun mit der Vorbereitung des Arbeitsbereichs fortfahren.
Zu diesem Zeitpunkt machen wir eine kurze Pause, gehen zu
my.st.com und registrieren ein Konto darauf, da die ST-Unternehmensrichtlinie das Herunterladen der erforderlichen Materialien ohne Registrierung nicht zulässt.
Nachdem wir Zugriff auf die Site erhalten haben,
laden Sie STM32 Cube MX herunter.Ganz unten auf der Seite befindet sich eine Versionsauswahlschaltfläche. Wir benötigen Version 5.0.0

Bis wir hier abgereist sind, laden wir zwei weitere Dinge herunter, die in Zukunft nützlich sein werden
https://www.st.com/de/development-tools/stsw-link008.htmlST-LINK V2-Treiber

und
https://www.st.com/de/development-tools/stm32cubeprog.htmlBlinker programmieren.

Die Installation des Treibers, des Flash-Treibers und von Cub selbst verursacht keine Schwierigkeiten. Wir stimmen einfach mit allem überein und klicken auf.
Nach einer vollständigen Installation der erforderlichen Software können wir mit der Erstellung eines Projekts beginnen.
Führen Sie dazu Cube MX aus.
Klicken Sie im angezeigten Fenster auf die Schaltfläche „ACCESS TO MCU SELECTOR“.

Der Mikrocontroller STM32F103C8T6 ist auf unserer Zielplatine installiert.
Geben Sie den Namen in die Suchleiste ein und doppelklicken Sie, um die einzige gefundene Option auszuwählen.
In derselben Tabelle sehen Sie die Hauptfüllung unseres MK (64 Kilobyte Flash, 20 Kilobyte RAM usw.).

Vor uns erschien ein schematisch dargestellter Controller-Fall mit in verschiedene Richtungen gespreizten Beinen.
In diesem Stadium müssen Sie auf jeden Fall die Methode zum Verbinden des Debuggers auswählen.
Wählen Sie dazu im linken Menü das Element SYS auf der Registerkarte Pinbelegung & Konfiguration und legen Sie den Wert für die serielle Leitung in der Dropdown-Liste unter dem Namen "Debug" fest.
Gleichzeitig bemerken wir aus den Augenwinkeln, dass das Programm zwei Pins für die Debugging-Zwecke auf der Controller-Mnemonik reserviert hat.

Wir erinnern uns noch einmal daran, dass wir eine LED auf unserer Platine blinken lassen möchten.
Dazu müssen Sie zuerst herausfinden, mit welchem bestimmten Bein es verbunden ist.
Hier helfen wir dem elektrischen Schaltplan:

oder farbenfroher und leicht verständlicher Pinbelegung

Die gewünschte LED befindet sich am Bein von PC13.
Dementsprechend muss dieser Ausgang so konfiguriert werden, dass er im Ausgabemodus arbeitet.
Dafür:
- Wir finden die Schlussfolgerung auf dem Mnemonendiagramm
- Wir klicken mit der rechten Maustaste darauf und wählen aus dem Dropdown-Menü den Punkt "GPIO_Output".
- Gehen Sie zum GPIO-Menü,
- Wählen Sie in der Liste PC13 aus
- Wir füllen die PC13-TAMPER-RTC-Konfigurationstabelle gemäß dem Screenshot aus. Wir interessieren uns insbesondere für den GPIO-Modus und die User Label-Parameter

Wir konfigurieren das Projekt weiter und wechseln zur Registerkarte Uhrenkonfiguration.
Tatsächlich ist dies eine der wichtigsten Registerkarten, auf denen Sie die Einstellungen der Peripherieuhr konfigurieren können. Im Moment werden wir hier jedoch nichts berühren, da das Hauptziel im Moment nicht dies ist.

Wechseln Sie zur Registerkarte Projektmanager unter der Registerkarte Projekt.
Geben Sie unbedingt die folgenden Parameter ein:
- Projektname (es ist besser, nur lateinische Buchstaben zu verwenden)
- Das Verzeichnis, in dem das Projekt erstellt wird (es ist auch besser, nur das lateinische Alphabet zu verwenden).
- IDE, in der wir an dem Projekt arbeiten möchten (wir planen, TrueSTUDIO zu verwenden)

Wir werden unten auf der Registerkarte Code Generator angezeigt.
Hier beachten wir definitiv die Option Peripherie-Initialisierung als Paar generieren ...
Auf diese Weise erhalten wir ein strukturierteres Projekt, in dem für jeden Peripherietyp ein Paar C- und H-Dateien vorhanden ist.

Der letzte Schritt blieb. Unterregisterkarte Erweiterte Einstellungen.
- Wählen Sie den Typ der HAL-Bibliothek für alle Peripheriemodule
- Wir sammeln das Projekt mit den aktuellen Einstellungen

Beim ersten Start müssen Sie möglicherweise die aktuelle Version der Bibliothek für die ausgewählte MK-Familie herunterladen.
Wir stimmen zu, Dateien herunterzuladen:

Wir gehen, um den Wasserkocher aufzuwärmen oder Kaffee zu machen:

Nach dem Ende der Arbeit am Codegenerator öffnen wir ihn sofort:

Wählen Sie einen Ordner aus, in dem Atollic den Arbeitsbereich speichern soll:

Nach erfolgreicher Eröffnung sehen wir das Hauptfenster von Atollic TrueSTUDIO für STM.
Allgemeine Informationen sind für uns von geringem Interesse. Gehen Sie daher sofort zum Dateibaum.

Suchen Sie dort die Datei main.c und die Funktion int main (void):

Versuchen Sie zum Selbsttest, ein leeres Projekt zu sammeln
- Im Menü Projekt -> Projekt neu erstellen
- Wählen Sie unten die Registerkarte Konsole
- Nach erfolgreicher Montage - sollte die Aufschrift Build Finished erhalten

Fortsetzung im nächsten Teil.
PS: Ich habe den Artikel zuvor in meinem
persönlichen Blog veröffentlicht .