Aus Raspberry Pi Geek 06/2016

STM32-Entwicklung mit CubeMX und Eclipse (Seite 3)

Erste Schritte

Nun starten Sie mit einem einfachen Programm für den STM32. Dazu rufen Sie zunächst einmal CubeMX auf und wählen in dessen Hauptfenster die Option New Project aus. Hier müssen Sie zunächst den verwendeten Controller wählen. Um die Auswahl zu erleichtern, filtern Sie die Liste in der obersten Zeile nach der entsprechenden Modelllinie oder suchen mit den Einstellungen in der linken Spalte nach der benötigten Peripherie.

Für das STM32F103C8T6-Modul wählen Sie in der obersten Zeile bei Series die STM32F1-Serie und verfeinern die Auswahl auf die Line STM32F103. Danach taucht die gewünschte Auswahl STM32F103C8Tx recht weit oben auf.

Für das STM32VLDiscovery erläutert das Handbuch (STM-Dokument UM0919), dass es sich um einen STM32F100RBT6B handelt (STM32F1-Serie, STM32F100 Value Line). Darüber hinaus erfahren Sie, dass das Modul zwei LEDs an den Anschlüssen PC8 (blau) und PC9 (grün) bietet und dass ein Taster an PA0 angeschlossen ist.

Nach der Auswahl des Modells lädt CubeMX gegebenenfalls Bibliotheken aus dem Netz nach. Anschließend präsentiert das Programm die in Abbildung 2 dargestellte Ansicht. Anfangs befinden Sie sich im Reiter Pinout. Hier sehen Sie rechts den Chip mit seinen Anschlüssen, links führt das Programm die Ressourcen des Controllers in einer funktional gegliederten Liste auf.

Abbildung 2: CubeMX mit der Anschlussbelegung des Discovery-Boards.

Abbildung 2: CubeMX mit der Anschlussbelegung des Discovery-Boards.

Um einen Anschluss als Schaltausgang für eine LED zu konfigurieren, klicken Sie rechts in der Chipansicht beispielsweise den Anschluss PC8 mit der linken Maustaste an und wählen im nun erscheinenden Kontextmenü GPIO Output. CubeMX markiert den Anschluss daraufhin grün als belegt und – mit einer Reißzwecke – zusätzlich als festgelegt. Wollen Sie diese Operation rückgängig machen, wählen Sie den Eintrag Reset state aus.

Konfigurieren Sie nun PA0 als GPIO Input und PA1 als ADC_IN1. In der Liste in der linken Spalte finden Sie jetzt die Ressourcen ADC1 und SYS als belegt markiert und mit einem gelben Warndreieck versehen. Bewegen Sie den Mauszeiger über den Eintrag ADC1, dann erscheint eine Hilfsmeldung, die über den Grund der Warnung aufklärt: Da PA0 als Logiklevel-Eingang definiert wurde, steht er nicht mehr für die A/D-Wandlerfunktion zur Verfügung.

Wählen Sie nun in der Ressourcenansicht den Eintrag USART1 an und schalten Sie den Modus von Disabled auf Asynchronous um. In der Anzeige der Belegung markiert CubeMX nun die dafür benötigten Anschlüsse (RX und TX) als belegt. Bewegen Sie den Mauszeiger über einen dieser Anschlüsse, so verrät das Kontextmenü, dass Alternativbelegungen für diese Funktionen existieren. Drücken Sie dazu [Strg] und klicken wieder auf den Anschluss, dann erscheinen die möglichen Alternativbelegungen blau markiert. Um zu dieser Alternativbelegung zu wechseln, ziehen Sie bei weiterhin gedrückter Maustaste die Funktionen zu den neuen Anschlüssen.

Um die serielle Schnittstelle zu konfigurieren, wählen Sie den Reiter Configuration aus. Hier klicken Sie auf die Schaltfläche USART1. Im daraufhin erscheinenden Dialog konfigurieren Sie im Reiter Parameter Settings die Baudrate sowie weitere Parameter der Schnittstelle. In anderen Reitern richten Sie dann die Unterstützung für Interrupts (NVIC) und DMA ein. Bestätigen Sie den Dialog und wählen Sie dann die Schaltfläche ADC1 aus. Dort aktivieren Sie den Continuous Conversion Mode.

Wechseln Sie nun in den Reiter Clock Configuration, der das Taktverteilungssystem anzeigt. Anfangs leitet das System alle Takte vom internen 8 MHz RC-Oszillator (HSI) ab. Da sowohl das VL Discovery als auch das STM32F103C8T6-Modul über einen 8-MHz-Schwingquarz verfügen, müssten Sie hier nun als Taktquelle HSE (High Speed External) auswählen. Allerdings ist diese Einstellung anfangs ausgegraut und lässt sich nicht aktivieren. Gehen Sie daher zum Reiter Pinout zurück und wählen Sie in der linken Funktionsspalte den Eintrag RCC aus. Im ausgeklappten Menüeintrag ändern Sie die Einstellung für HSE von Disabled zu Crystal/Ceramic Resonator.

Wechseln Sie nun wieder zurück zum Reiter Clock Configuration, dann lässt sich der Systemtakt für den Cortex-CPU-Kern FCLK auf 24 MHz umstellen. Daraufhin berechnet das Programm die entsprechenden Einstellungen neu. Stellen Sie nun den PLL source Mux auf HSE um. Das führt dazu, dass CubeMX einige abgeleitete Takte als unbrauchbar in Rot markiert. Diese Konflikte lassen sich durch einen Klick auf das Icon Resolve Clock Issues aus der Werkzeugleiste auflösen.

Speichern Sie nun das Projekt, vorzugsweise in einem Unterverzeichnis des Eclipse-Arbeitsbereichs, wo Sie später auch das C-Projekt anlegen wollen. Wechseln Sie dann zurück zum Reiter Configuration und wählen Sie die Aktion Generate source code based on user settings aus der Werkzeugleiste. Hier wählen Sie im Reiter Project als Toolchain die Option SW4STM32 aus.

Sehen Sie sich auch die Einstellungen im Reiter Code Generator an; besonders interessant ist hier die Einstellung ganz oben. Damit legen Sie fest, ob die benötigten Bibliotheken als Referenz oder als Kopie im erzeugten Projekt landen. Auch die Einstellungen unter HAL settings sollten Sie nicht ignorieren. Enable full assert schaltet umfangreiche Laufzeitprüfungen an. Bei deren Verletzung begibt sich das Programm in eine Routine mit Endlosschleife, die mit dem Ort der Ausnahmeverletzung parametrisiert wird.

Nach dem Bestätigen des Dialogs wechseln Sie nun in ein Terminalfenster, von wo Sie die Konvertierung des erzeugten Projekts zu einem Makefile-Projekt anstoßen (Listing 7). Das Python-Programm sollte daraufhin die Erstellung einer Makefile-Datei melden.

Listing 7

 

$ cd /Pfad/zum/Konvertierer
$ ./CubeMX2Makefile.py /Pfad/zum/Projekt

Eclipse

Importieren Sie das Projekt nun in Eclipse: Dazu wählen Sie im Menü der Entwicklungsumgebung den Punkt File | Import aus, klappen im Dialog die Sektion C/C++ auf und klicken den Punkt Existing Code as Makefile project an. Mit Next geht es zum nächsten Schritt: Hier suchen Sie mittels des Browse-Knopfs unter Existing Code Location den Ordner aus, in dem sich das generierte Makefile befindet. Wählen Sie außerdem unten die Cross ARM toolchain für den Indexer aus (Abbildung 3). Dann schließen Sie den Import mit Finish ab.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 7 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben