Startseite>STM32-Entwicklung mit CubeMX und Eclipse
Aus Raspberry Pi Geek 06/2016

STM32-Entwicklung mit CubeMX und Eclipse

© Pavel Timofeev, 123RF

Sparsam und günstig

Dr. Rüdiger Knörig

Die STM32-Chips von STMicroelectronics basieren auf dem 32-Bit-ARM-Prozessorkern und bilden eine weitgefächerte Familie. Die preisgünstigen und stromsparenden Mikrocontroller eignen sich für zahlreiche Projekte. Dieser Artikel steigt in die STM32-Entwicklung speziell unter Linux ein.

32-Bit-Mikrocontroller der STM32-Linie bieten bei geringen Preisen eine außerordentliche Leistungsfähigkeit. So findet sich der mit maximal 48 MHz getaktete STM32F030F4P6 im durchaus noch lötbaren TSSOP-20-Gehäuse beim chinesischen Amazon-Konkurrenten Aliexpress für rund 40 Cent. Den maximal mit 72 MHz getakteten STM32F103C8T6 mit USB- und CAN-Unterstützung gibt es dort als kompaktes Modul ähnlich dem Arduino Nano für 2,06 Euro inklusive Versand.

Ein weiterer Vorteil gegenüber verbreiteten 8-Bit-Mikrocontrollern liegt in der SWD-Programmierschnittstelle. Sie benötigt nur drei Leitungen (Daten, Takt, Masse und gegebenenfalls die Versorgungsspannung) und ermöglicht nicht nur das Programmieren, sondern auch das komfortable Debuggen von Programmen über das GNU-Debugger-Projekt GDB. Programmieradapter gibt es ebenfalls sehr günstig; ein STLink-V2-kompatibler Adapter in kompakter USB-Stick-Form fand sich für knapp 2,50 Euro bei Aliexpress.

Allerdings liegt auch die Einstiegshürde höher: Aus Rücksicht auf die gerade bei mobilen Geräten geforderte geringe Leistungsaufnahme müssen verwendete Komponenten wie GPIOs oder A/D-Wandler erst einmal aktiviert beziehungsweise mit Takt versorgt werden; zudem steigt gerade aufgrund des Funktionsumfangs die Anzahl der Register immens.

Auch die komplexeren internen Strukturen wirken sich auf die Programmierschnittstelle aus. Beispielsweise sind viele Funktionseinheiten über Busse angeschlossen, die mit teilweise deutlich geringeren Taktraten laufen als der Prozessorkern. Daher gibt es etwa für die GPIOs spezielle Register, mit denen sich einzelne Bits setzen oder umschalten lassen, um die sonst üblichen Read-Modify-Write-Zugriffe zu vermeiden.

Allerdings einigte sich die Industrie bei den von vornherein auf die Programmierung unter Hochsprachen ausgelegten ARM-basierenden Mikrocontrollern auf einheitliche Programmierschnittstellen wie CMSIS. Hat man sich einmal eingearbeitet, lässt sich das Wissen auch für Controller anderer Hersteller anwenden. Auch innerhalb der Palette eines Herstellers wurde viel vereinheitlicht.

So lassen sich zum Beispiel in vielen Fällen Programme ohne größere Änderungen am Quelltext zwischen STM32Fx-Controllern austauschen. Auch physisch besteht eine weitgehende Kompatibilität: So arbeitet ein STM32F103C8 anschlusskompatibel zu einem STM32F105C8. Als weitgehend vereinheitlichende Abstraktionsschicht kam bisher die STM32 Standard Peripheral Library zum Einsatz, die künftig durch die HAL-Bibliothek (Hardware Abstraction Layer) ersetzt werden soll.

Die Controller bieten relativ viele Einstellmöglichkeiten hinsichtlich der Taktquellen. Das ist schon deshalb erforderlich, weil bestimmte Funktionseinheiten – etwa die USB-Schnittstelle oder die A/D-Wandler – je nach Konfiguration recht eng spezifizierte Eingangstaktfrequenzen benötigen. Um dem Anwender diese recht komplexen Vorplanungen abzunehmen, stellt ST mit CubeMX ein Programm zur Verfügung, das die grafische Konfiguration aller Ressourcen ermöglicht und daraus ein C-Programmprojekt samt den nötigen Initialisierungen erstellt.

Allerdings erstellt CubeMX nur Projekte für kommerzielle Entwicklungsumgebungen. Dieser Artikel beschreibt, wie Sie (nicht nur unter Linux) dieses Programm nutzen, um ein Projekt für Eclipse zu erstellen und mit OpenOCD zu debuggen und zu programmieren.

Benötigte Programme und Geräte

Als Zielplattform dient die bei diversen Online-Händlern erhältliche STM32VL-Discovery-Evaluierungsplattform. Alternativ ordern Sie über Aliexpress direkt in China einen ST-Link-V2-Programmieradapter (etwa 2,50 Euro) und ein STM32F103C8T6-Board (rund 2,00 Euro).

Möchten Sie erst einmal ganz ohne Hardware-Anschaffungen auskommen, können Sie diese Anleitung auch mit einer Qemu-Emulation nachvollziehen [1]. Zusätzlich benötigen Sie noch einen USB-Seriell-Adapter (etwa basierend auf dem FT232); Linux-Anwender sollten auf die Unterstützung des spezifischen Chips achten.

Software

Anwendungsseitig benötigen Sie die Arm-none-eabi-Entwicklungswerkzeuge für GCC (Version 4.9+) und GDB. Linux-Anwender installieren beides in der Regel über die Paketverwaltung, für andere Systeme erhalten Sie die Tools über die Projektseite [2]. Die Installation für die gängigsten Betriebssysteme beschreibt die Webseite zu GNU ARM Eclipse [3].

Da wir in diesem Artikel mit einem automatisch generierten Makefile arbeiten, sollten Sie (im Widerspruch zum Hinweis am Ende der zugehörigen Anleitung) sicherstellen, dass sich der Compiler mit arm-none-eabi-gcc aus der Shell aufrufen lässt. Klappt das nicht, dann müssen Sie entweder die Variable $PATH oder jeweils das entsprechende Makefile anpassen.

Daneben brauchen Sie noch Git und Python (für den Konverter), eine Java-Laufzeitumgebung (für CubeMX und Eclipse), OpenOCD, Eclipse 4.5+ mit installiertem CDT-Plugin sowie gegebenenfalls ein Programm für die serielle Schnittstelle, wie etwa Gtkterm oder Screen.

Im Folgenden beschreiben wir die nötigen Schritte zum Einrichten einer Entwicklungsumgebung mit Fokus auf Linux. Dazu gehört das Einrichten des STLink-Adapters sowie dessen Konfiguration für Udev. Dazu legen Sie mit administrativen Rechten die Datei /etc/udev/rules.d/99-stlink.rules mit den entsprechenden Udev-Regeln an (Listing 1) und weisen anschließend das System an, diese einzulesen (Listing 2).

Listing 1

 

ATTRSidVendor=="0483", ATTRSidProduct=="3744", MODE="0666"
DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 7 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
€0,99 – Kaufen
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland