Wie bereits angekündigt werden wir in diesem Tutorial von Anfang an grafisch programmieren. Dafür verwenden wir als Entwicklungswerkzeug das UML-Klassendiagramm und Klassenbibliotheken für den STM32. Wir werden im Folgenden diese Arbeitsschritte gemeinsam ausführen:
Starten Sie SiSy und wählen Sie die Schaltfläche „neues Projekt erstellen“ und das Projektprofil „ARM-Vorgehensmodell“.
Sie erhalten nach dem Anlegen der Projektdatenbank im SiSy LibStore verschiedene Vorlagen zur Auswahl. Bitte laden Sie die aktuelle Vorlage für das PEC Framework - Portable Embedded Classes ohne Beispiele.
Legen Sie ein neues Klassendiagramm an, indem Sie das entsprechende Element per Drag&Drop aus der Objektbibliothek in das Diagrammfenster ziehen. Achten Sie auf die Einstellung der Zielsprache ARM C + + .
Wählen Sie im nächsten Fenster die Hardware STM32F042 mySTM32 Board light HAL und den Programmer mySTM-Light-Board aus.
Öffnen Sie das Klassendiagramm, indem Sie auf diesem das Kontextmenü (rechte Maustaste) aktivieren und den Menüpunkt nach unten (öffnen) auswählen. Laden Sie aus dem SiSy LibStore die Diagrammvorlage Application Grundgerüst für PEC Anwendungen (XMC, STM32, AVR). Schränken Sie die Vorlagensuche ggf. mit dem Suchbegriff PEC ein.
Weisen Sie dem Diagramm das Treiberpaket für den konkreten Controller MCU_STM32F0 zu. Sie finden dieses Paket über den Navigator (UML-Pakete) oder über die Suchfunktion im Explorer.
Tipp: Aktivieren Sie im Diagrammfenster die Schaltfläche Suche MCUs im Explorer. Oben links erscheint das Fenster MCU-Explorer. Ziehen Sie das Objekt MCU_STM32F0 in das Diagrammfenster. Mit der zweiten Schaltfläche Suche PEC im Explorer erhalten Sie die zur Anwendung empfohlenen Bibliotheksbausteine und können die Hinweiselemente aus dem Diagramm löschen.
Standardmäßig läuft der STM32F042 mit stromsparenden 8MHz. Das reicht für die Übungen die wir machen vorerst absolut aus. Um den Controller mit voller Leistung (48MHz) zu betreiben, können Sie zusätzlich noch den Bibliotheksbaustein „stm32F042_48MHz“ hinzufügen. Diesen finden Sie über die Suchfunktion im Explorer.
Sie erhalten das nachfolgende Diagramm. Dabei handelt es sich um die typische Grundstruktur einer objektorientierten Anwendung auf der Basis des SiSy PEC Framework.
Als Anfänger schaut man etwas Ratlos auf diese Darstellung. Das ist ganz normal. Trotzdem lohnt es sich das was man da sieht näher zu betrachten. Wir sehen Rechtecke. Rechtecke interpretieren wir im Folgenden als Bausteine des Systems.
Im Zentrum steht der Systembaustein Controller. OK, das macht irgendwie Sinn. Wir wollen ja einen Mikrocontroller programmieren. Der Controller hat zwei Verhaltensmerkmale: Er kann gestartet werden onStart() und er kann arbeiten onWork().
Ein Pfeil zeigt zu einem Baustein mit dem Namen PecAppKernel. An solche eigenartigen Namen werden Sie sich schnell gewöhnen. Das sind eigentlich zusammengesetzte Substantive in dem Falle aus PEC (Portable Embedded Class), APP (Application) und Kernel.
Das PEC-Framework ist die Bibliothek mit vielen Bausteinen die uns die Programmierung erleichtern. APP, wer kennt diese Abkürzung nicht, steht für Application und meint ein Anwendungsprogramm. Der Begriff Kernel signalisiert uns, dass wir schon so etwas wie ein Betriebssystemkern haben der uns beim Management der Rechenzeit und der Systemressourcen unterstützt.
Die Pfeile mit den großen dicken Endpfeilen lesen wir als „ist ein“. Systembausteine werden sowohl in der Modellierungssprache UML als auch in der Programmiersprache C + + als Klasse bezeichnet.
Mit diesen ersten Informationen können wir versuchen die Darstellung etwas professioneller zu lesen:
Der Controller ist ein PecAppKernel. Es handelt sich um die sogenannte Anwendungsklasse. Diese nimmt die Rolle der gesamten Anwendung ein und muss als erstes ausgeführt werden.
Der Baustein app:Controller ist die Instanz der Anwendungsklasse. Falls Sie noch kein C + + oder eine andere Objektorientierte Programmiersprache kennen nur so viel: Instanzen sind vergleichbar mit den Variablen in klassischen Programmiersprachen. Nur dass Instanzen von Klassen nicht nur Daten sondern auch Funktionen enthalten.
Über die Referenz der Pakete Pec und MCU_STM32F0 werden alle benötigten Klassen aus der Bibliothek importiert. Das ist letztlich das selbe wie das #include oder #using auf Quellcodeebene.
PecAppKernel stellt bereits eine Reihe von nützlichen Struktur- und Verhaltensmerkmalen einer ARM-Anwendung bereit. Zwei Operationen sind in der Klasse Controller zur Realisierung vorbereitet. Die Operation onStart dient der Initialisierung nach dem Systemstart, bildet also die Initalisierungssequenz. Die Operation onWork wird durch das Framework zyklisch aufgerufen. Damit nimmt diese die Position der Mainloop ein. Beachten Sie, dass die Mainloop jetzt selbst im Framework vor unsern Augen verborgen läuft und nicht mehr von uns geschrieben werden muss. Zur Verdeutlichung und zur Gewöhnung hier das grundsätzliche Verhalten der Anwendung als UML-Sequenzdiagramm.
Die entsprechenden Operationen in der Klasse Controller sind bis jetzt noch leer.
Controller::onStart():void// boot sequence after start SysTick
Controller::onWork():void// continuous event from the Mainloop
So wie die Anwendung jetzt vor uns liegt tut das Programm nichts, sondern läuft im Leerlauf. Trotzdem wollen wir aus dem Klassendiagramm den Quellcode generieren, diesen übersetzen und auf den Controller übertragen. Das erfolgt über das Aktionsmenü in der Objektbibliothek. Wählen Sie dort den Menüpunkt Erstellen, Brennen Ausführen.
An dieser Stelle wird im Tutorial jeweils das Testen der Anwendung beschrieben. Bis jetzt macht unser Mikrocontroller noch gar nichts. Wir haben ja ein leeres Programm auf den Controller übertragen.
Damit haben wir auch schon unsere erste objektorientierte ARM-Anwendung erstellt und auf den Controller übertragen. Als Zusammenfassung dieses kurzen Abschnittes das Ganze nochmal als Video.