© Dmitriy Rybin/Shutterstock.com
Wir statten das Nucleo Board mit Ethernet aus

Mit dem STM32 ins Internet der Dinge


Der STM32 ist ein echter Klassiker: Der Mikrocontroller ist weitverbreitet, günstig und eignet sich hervorragend für den Einstieg ins Internet der Dinge. Also Ärmel hochkrempeln und loslegen: Wir wollen das STM32 Nucleo Board mit Ethernet ausstatten. Auf dem Weg dahin erhalten Sie jede Menge Praxistipps dazu, was Sie beim Programmieren eines Webservers auf einem Mikrocontroller beachten sollten.

Die Mikrocontroller der STM32-Familie [1] zeichnen sich durch eine hohe Rechenleistung und eine Vielzahl von I/O-Pins aus. Für den Einstieg in die Programmierung existieren spezielle Entwicklungs-Boards wie das Nucleo F401RE, das für ca. 24 Euro zu haben ist [2]. Wirft man einen Blick auf das Pinout der Platine (Abb. 1 und 2) fällt sofort auf, dass das Nucleo F401R pinkompatibel mit dem Arduino ist. Somit können alle Shields, die es für den Arduino gibt, auch für das Nucleo verwendet werden. Natürlich hat das Nucleo Board erheblich mehr Schnittstellen als der Standard-Arduino. Eine Übersicht über die technischen Daten ist in Tabelle 1 zu sehen.

mohr_nucleo_1.tif_fmt1.jpgAbb. 1: Nucleo Pinout Teil 1: Arduino
mohr_nucleo_2.tif_fmt1.jpgAbb. 2: Nucleo Pinout Teil 2: STM32

Gehäuse LQFP64

ARM 32-bit Cortex-M4 CPU mit FPU

84 MHz CPU

Betriebsspannung 1.7 V bis 3.6 V

512 KB Flash

96 KB SRAM

50 x GPIOs

16 x 12 bit AD-Wandler

Echtzeituhr

Erweiterte Timerfunktionen

2 x Watchdog-Timer

4 x USART/UART

3 x I2C

3 x SPI

SDIO

USB 2.0

Tabelle 1: Technische Daten des STM32F401RET6

Die Entwicklungsumgebung: STM32CubeIDE

Eine tolle Hardware ist bei der Entwicklung nur ein Erfolgsfaktor, eine gut auf die Hardware abgestimmte IDE der weitaus wichtigere Punkt. Für die Mikrocon-troller der STM32-Familie gibt es eine ganze Reihe von Entwicklungsumgebungen – von sehr teuer bis Free-ware ist alles dabei. In diesem Artikel verwenden wir die STM32CubeIDE. Sie kann frei heruntergeladen werden und ist für Linux, Mac und Windows verfügbar [3]. Man muss allerdings seine E-Mail-Adresse verraten, um den Download starten zu können. Das ist aber ein kleiner Preis, wenn man bedenkt, wie leistungsfähig die IDE ist. Die Installation unter Linux läuft komplett auf der Kommandozeile ab und lässt sich ohne Probleme durchführen. Unter Linux muss die Installation allerdings mit Root-Berechtigung ausgeführt werden.

Nach der Installation kann die IDE bequem aus der Applikationsübersicht heraus gestartet werden. Falls Sie die IDE nicht auf Anhieb sehen, suchen Sie einfach nach STM. Beim ersten Start fragt die STM32CubeIDE, wo der Workspace angelegt werden soll. Danach präsentiert sich die IDE wie auf Abbildung 3 zu sehen.

mohr_nucleo_3.tif_fmt1.jpgAbb. 3: Der Startbildschirm der STM32CubeIDE

Wir verbinden nun das Nucleo Board per USB mit unserem PC, damit wir mit dem ersten kleinen Test starten können. Dazu klicken wir in der STM32Cube-IDE auf Start new STM32 project. Es öffnet sich ein Fenster, in dem wir das STM32-Zielsystem auswählen können. Die Familie der STM32-Mikrocontroller ist groß, zur Zeit der Artikelerstellung existieren 1796 unterschiedliche Boards. Um das Nucleo Board schnell zu finden, klicken wir auf den Tab Board Selector, wählen beim Typ Nucleo-64 aus und scrollen in der Liste herunter, bis das NUCLEO-F401RE Board auftaucht. Mit einem Klick wählen wir das Board als Zielsystem für unser Projekt aus. Im nächsten Schritt werden wir nach einem Namen für das Projekt gefragt und entscheiden uns für Blink. Die Optionen können auf den vorausgewählten Werten belassen werden. Wenn wir nun auf den Finish-Button klicken, wird das Projekt angelegt. Die Fragen zum Initialisieren der Peripherie und der Perspektive beantworten wir mit yes. Jetzt dauert es einen Moment, bis alle nötigen Dateien für das Projekt heruntergeladen sind. Ein guter Zeitpunkt für eine Tasse Kaffee. Wenn alle Komponenten für das Projekt installiert sind, öffnet sich der Pinout & Configuration-Schirm wie in Abbildung 4 zu sehen ist.

mohr_nucleo_4.tif_fmt1.jpgAbb. 4: Die Pinkonfiguration des Beispielprojekts

Um zu verstehen, was wir da gerade auf dem Bildschirm sehen, müssen wir etwas ausholen. Die Mikrocontroller der STM32-Familie sind extrem vielseitig und in weiten Grenzen konfigurierbar. Das bedeutet, wir können die Funktion für jeden einzelnen Pin des Con-trollers frei auswählen. Wir sprechen hier nicht nur von Input und Output, sondern auch von unterschiedlichen Schnittstellen (wie zum Beispiel I2C, SPI und UART) und Sonderfunktionen, die auf die einzelnen Pins gelegt werden können. Alle vorhandenen Möglichkeiten hier zu erklären, würde zu viel Raum einnehmen.

Sie können auf der linken Seite einen Blick in die einzelnen Kategorien werfen, um eine Vorstellung zu bekommen, was man alles einstellen kann. Für uns ist aktuell nur wichtig, dass am Pin PA5 die grüne Leuchtdiode des Nucleo Boards angeschlossen ist. Für den Anfang ist die Konfiguration der Hardware erst einmal abgeschlossen. Wir können jetzt beginnen, das eigentliche Programm für den STM32 zu schreiben.

Wir öffnen dazu die Datei main.c. Man findet die Datei leicht, wenn man im Projektexplorer die Baumstruktur aufklickt (Abb. 5). Schon beim ersten Blick in den Quellcode fällt auf, dass es bestimmte Bereiche für Usercode gibt. Verwenden Sie nur die vorgesehenen Bereiche für Usercode, um Ihre eigenen Programme zu schreiben. Sollten Sie Code außerhalb dieser Bereiche erstellen, wird er gnadenlos von der IDE überschrieben. Verändern Sie auch nicht die vorhandenen Kommentare, das bringt eine Menge Ärger mit sich. Wenn Sie später etwas an der Hardwarekonfiguration ändern möchten, machen Sie das nicht im Code, sondern immer über die eingangs gezeigten Konfigurationsfunktionen (Abb. 4). Sie müssen sich immer vor Augen halten, dass große Teile des Quellcodes automatisch generiert werden. Das klappt natürlich nur, wenn man den Codegenerator nicht stört.

mohr_nucleo_5.tif_fmt1.jpgAbb. 5: Die main.c-Datei des Projekts

Kommen wir nun zu unserem ersten kleinen Programm. Das Programm lässt die auf dem Nucleo Board verbaute LED im Sekundentakt blinken. Wir suchen in der main.c den Bereich, der für den Usercode vorgesehen ist. Hier fügen wir die Zeilen ein, wie in Listing 1 zu sehen ist. Sie können sich dabei gut an den Kommentaren orientieren.

Um den Code in den Controller zu laden und auszuführen, klicken wir auf das Run-Icon (weißer Pfeil nach rechts im grünen Kreis). Beim ersten Mal werden einige Fragen gestellt, die man alle mit j...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang