STM32-Entwicklung mit CubeMX und Eclipse

© Pavel Timofeev, 123RF

Sparsam und günstig

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"

Listing 2

 

$ sudo udevadm control --reload-rules
$ sudo udevadm trigger

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 7 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Raspberry Pi Geek kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

Aktuelle Ausgabe

12/2019
RasPi-Alternativen

Diese Ausgabe als PDF kaufen

Preis € 9,99
(inkl. 19% MwSt.)

Stellenmarkt

Neuigkeiten

  • Grußbotschaften

    Mit Sonic Pi zaubern Sie komplexe Sounds, die Sie bei Bedarf sogar noch während des Abspielens modifizieren.

  • Das Runde und das Eckige

    Mit dem MCP4725 ergänzen Sie einen RasPi um einem D/A-Wandler, der bei Bedarf noch weitere Funktionen erfüllt.

  • Alles unter Kontrolle

    Schon ein einfaches Mikrocontrollerboard wie das CY8CKIT-049-42xx bietet erstaunlich viele Möglichkeiten beim Ansteuern von Hardware.

  • Viele Kerne

    Das Spresense Development Board von Sony lässt sich mit der Arduino IDE programmieren und bringt auch ein eigenes Entwickler-SDK mit.

  • Exotische Früchte

    Der aus China stammende Orange Pi positioniert sich mit einem guten Preis und interessanten Features gegen die RasPi-Truppe. Kann er sich auch behaupten?

  • Flexibler Surfer

    Mit dem neuen RasPi 4 setzen Sie einen öffentlichen Webkiosk schnell und kostengünstig auf.

  • Auskunftsfreudig

    Viele Devices, so auch der E.ON-Aura-Controller, verwenden eine Schnittstelle namens REST, um Zustandsdaten zu übermitteln. Mit ein wenig Bastelei lesen Sie diese auch über Ihr Smartphone aus.

  • Doppelt gemessen

    Mit wenig Aufwand und einem Pi Zero realisieren Sie einen mobilen Zweikanal-Spannungsprüfer.

  • Elegant zusammengeführt

    Tizonia streamt Musik von Online-Quellen und lokalen Sammlungen. Die schlanke Architektur macht den Player zur guten Wahl für den Einsatz auf dem RasPi.

  • Kommunikativ

    Nicht jeder traut sich zu, sein eigenes Smartphone zu bauen. Allerdings kann jeder Linux-Nutzer den Raspberry Pi im Handumdrehen zu einem VoIP-Telefon aufrüsten.