Wie entwickle ich für die STM32-Erkennung unter Linux? [geschlossen]

26

Ich habe ein STM32 Discovery Board und möchte es unter Linux programmieren können.

Was ist der einfachste Weg, dies zu tun?

Gordon Williams
quelle
Ich habe Codesourcery unter LinuxhUbuntu installiert und ein bisschen gestapelt: PATH ist in Ordnung, aber das Programm wird auf dem Dasboard oder im Software Center nicht angezeigt. Vielleicht ist es das Ubuntu das ich irgendwie ändern würde aber nicht weiß wie. Wenn Sie eine Idee haben, schreiben Sie bitte. Vielen Dank. Tom
Tom Rert
1
@TomRitzmann PeterJ ist richtig, bitte verwenden Sie keine Antworten, um Fragen zu stellen. Darüber hinaus sind Softwareprobleme hier nicht aktuell, SuperUser ist der richtige Ort.
Clabacchio

Antworten:

12

Eine einfache Möglichkeit zum Programmieren und Debuggen des STM32 Discovery-Boards (oder eines STM32 mit einem ST-Link-Programmierer) ist die Verwendung des "stlink" -Projekts https://github.com/texane/stlink (OpenOCD scheint jedoch ebenfalls beliebt zu sein).

ST Nucleo-Karten werden auch als USB-Flash-Gerät angezeigt. Sie müssen also nicht einmal stlinkdie Datei kopieren.

Es gibt einige gute Seiten zum Entwickeln für die STM32-Erkennung unter Linux, z. B. http://gpio.kaltpost.de/?page_id=131 und http://torrentula.to.funpic.de/2012/03/22/. Einrichten der STM32F4-Arm-Entwicklungs-Toolchain / und http://jethomson.wordpress.com/2011/11/17/Getting-Started- With-The-StM32F4Discovery-Inlinux/

Allerdings fand ich den letzten Link am nützlichsten. Es wird gezeigt, wie STs STM32-Projekte unverändert erstellt werden. Die einzige Änderung besteht darin, sein Makefile hinzuzufügen, das als perfekte Lösung erscheint.

In neueren Versionen von Ubuntu gibt es ein Paket, das Sie installieren können und das einen ARM-Compiler enthält:

sudo apt-get install gcc-arm-none-eabi

Beachten Sie, dass die Prozessoren alle etwas unterschiedlich sind. STM32F0..4 benötigt alle unterschiedliche Compiler-Flags und das Linker-Skript ist für jedes leicht unterschiedlich (allerdings nur wirklich aufgrund der geänderten RAM- und Flash-Größen).

Bearbeiten: Wenn Sie wirklich schnell loslegen möchten, können Sie auch http://www.espruino.com aufrufen . Es ist ein JavaScript-Interpreter, der auf dem STM32 selbst ausgeführt wird. Wenn Sie also 'stlink' installiert haben, können Sie ein Image von dieser Site herunterladen, es aufspielen und dann eine Verbindung mit einer Terminalanwendung herstellen Starten Sie die Programmierung.

Gordon Williams
quelle
Hier ist eine Liste der von OpenOCD unterstützten STM32x Discovery-Boards: github.com/openrisc/openOCD/tree/master/tcl/board (suchen Sie mit Ihrem Browser nach "discovery")
rbaleksandar
8

Wenn Sie sich mehr für Texteditoren und Makefiles interessieren, anstatt eine GUI zu verwenden, können Sie Folgendes tun:

  • Installieren Sie eine Toolchain mit arm-none-eabi-gcc. Unter Archlinux benötigen Sie community / arm-none-eabi-binutils, arm-none-eabi-gcc und arm-none-eabi-newlib (und arm-none-eabi-gdb, wenn Sie alle in der Community debuggen möchten) repo oder https://launchpad.net/gcc-arm-embedded (in Archlinux 'AUR als gcc-arm-none-eabi-bin zu finden).
  • Entscheiden Sie, ob und welche Bibliothek Sie für den Zugriff auf die Hardware verwenden möchten. Vom Kopf aus gibt es drei gebräuchliche Optionen:
    1. Keiner. Sie schreiben alles von Grund auf neu. Für Anfänger nicht zu empfehlen.
    2. STM32Cube : Von ST selbst bereitgestellte AC- Bibliothek .
    3. Libopencm3 : Eine Open-Source- Bibliothek, die sehr viele Cortex-M-Kerne verschiedener Hersteller unterstützt.
    4. STM32PLUS : Eine C ++ - Bibliothek . Mehr kann ich dazu jedoch nicht sagen, da ich es nicht getestet habe.
  • Erstellen oder kopieren Sie Ihr erstes Projekt.
    1. Schreiben Sie ohne eine Bibliothek Ihr eigenes Makefile, Linker-Skript, Startcode und lassen Sie ein einfaches Makefile laufen. Viel Glück ;)
    2. Mit STM32Cube: Laden Sie STM32CubeMX herunter und installieren Sie es . Nach dem Entpacken ist die * .exe-Datei eigentlich nur eine Java-Datei und kann mit "java -jar filename.exe" ausgeführt werden. Die Installation benötigt sudo. Wenn Sie fertig sind, erstellen Sie ein Projekt und generieren Sie den Code für "Truestudio". Das sollte Ihnen einen Ausgangspunkt mit einem Linker-Skript, einem Startcode, einer einfachen Hauptfunktion (und einem Makefile, wenn ich mich richtig erinnere) geben. Selbst wenn Sie die STM32Cube-Bibliothek nicht verwenden, eignet sich der STM32CubeMX hervorragend zum Berechnen der Werte für den Uhrenbaum und zum Überprüfen, ob Sie den Chip nach Ihren Vorstellungen konfigurieren können.
    3. Mit libopencm3: Holen Sie sich die libopencm3-Beispiele , suchen Sie ein zu Ihrem Board passendes Beispiel und verwenden Sie dieses als Ausgangspunkt. Die Beispiele sollten einsatzbereit sein. Geben Sie einfach "make" ein. Dann nutzen Sie dieses Beispiel als Ausgangspunkt für Ihre eigene Entwicklung.
    4. Mit STM32Plus: Ich weiß es nicht. Es tut uns leid.
  • Holen Sie sich Ihr Projekt an die Tafel. Entweder verwenden

    1. Der serielle Bootloader: stm32flash funktioniert hervorragend.
    2. Der Debug-Port: Sie können openocd verwenden, um mit dem auf der Karte bereitgestellten Debug-Adapter zu kommunizieren . Openocd ist großartig, aber die Dokumentation ist nicht immer die beste. Wenn Sie Zweifel haben, schließen Sie sich dem OpenOCD-IRC-Kanal an. Die Leute dort sind wirklich nett.
  • Code in einem Texteditor und verwenden Sie Befehlszeilentools. Dieses Tutorial bietet viele Tipps.

Genießen

Mox
quelle
5

Eclipse , GCC und OpenOCD sind eine Toolchain. Es wird empfohlen , von EMCU-IT und es gibt zusätzliche Informationen hier . Diese Seiten empfehlen auch die Verwendung eines RTOS wie FreeRTOS.org , aber das liegt bei Ihnen.

Und um Hilfe beim Kompilieren der STM32-Beispiele unter Linux zu erhalten , klicken Sie hier . Dieser Link verweist auf ein Makefile für die Beispiele, mit denen aufgerufen werden kann

git clone git://github.com/snowcap-electronics/stm32-examples.git
cd stm32-examples
wget http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32_f105-07_f2xx_usb-host-device_lib.zip
unzip stm32_f105-07_f2xx_usb-host-device_lib.zip

Ein paar kleinere Code-Fixes sind ebenfalls dokumentiert, aber der Großteil des Projekts sollte funktionieren

make CROSS_COMPILE=/path/to/arm-2011.03/bin/arm-none-eabi-
embedded.kyle
quelle
1
Vielen Dank! Ich hatte diese Links noch nie gesehen. Ich bin erstaunt, dass es irgendwo keine definitivere Anleitung gibt, da verschiedene Discovery-Boards subtil unterschiedliche Build-Flags haben.
Gordon Williams
Ja, ST hat ein sehr billiges Board hergestellt und sie verschenkt, Tausende von ihnen, und der STM32 selbst ist ein großartiger Chip, bis hin zu F4, aber das Programmieren ist ein großer Schmerz im Hintern. Ihre Treiber sind unglaublich schlecht dokumentiert und nicht gut benannt, und es ist nicht einfach, eine IDE und eine Toolkette zu finden, die kostenlos gut zusammenspielen.
Hak8or
1

Ich hatte Erfolg mit https://github.com/JorgeAparicio/bareCortexM (siehe auch die verlinkten Blog-Beiträge). Ich habe das Gefühl, dass ich einfach einen Schritt durch den Code gehen oder den Gerätespeicher durchsuchen kann, anstatt Debugging-Anweisungen in meinen Code einzufügen oder zu erraten, was im Chip vor sich geht.

Das bareCortexM-Projekt ist eine Eclipse-Vorlage für die Entwicklung mit der Cortex M-Serie, insbesondere STM32, in C ++ ohne Betriebssystem. Es ist für die Verwendung von openocd und gcc konfiguriert und verfügt über Skripts zum Flashen und Debuggen auf mehreren Zielen, einschließlich einiger Discovery-Boards. Durch Befolgen der Anweisungen und Installieren der empfohlenen Eclipse-Plugins konnte ich mein STM32VLDISCOVERY unter Ubuntu verwenden.

Wie empfohlen habe ich die Eclipse-Vorlage mit der libstm32pp C ++ - Vorlagenbibliothek desselben Autors für STM32-Hardware kombiniert. libstm32pp bietet einen überraschend vollständigen Ersatz für CMSIS und die oft mit einem Programmiermodell kritisiert STM32 - Treiber , die Sie wie die Dinge sagen läßt PB10::setMode(gpio::cr::GP_OPEN_DRAIN_2MHZ)und PINB::setLow()oder PINB::setHigh()alle meist zusammengestellt Inline aufgrund der C ++ Vorlagen. Das Setup ist sehr schön.

joeforker
quelle
Ich empfehle das nicht mehr gepflegte bareCortexM; check out stm32plus bei andybrown.me.uk/wk
joeforker
Das Problem mit solchen Gerätetreibern ist, dass sie ineffizient sind. Für richtige Hochgeschwindigkeits-Gerätetreiber, die keine CPU-Zyklen verschwenden, benötigen Sie ein RTO, damit Sie die richtige Zeitplanung durchführen können.
Martin
0

Vielleicht wäre es für jemanden nützlich: meinen kurzen Artikel (auf Russisch) und ein einfaches Projekt . Alles unter Linux und ohne unnötige Dinge wie Eclipse.

Die Bibliotheken stammen von der ST-Website, Makefile - aus einem der vielen GPL-Beispiele im Internet.

Eddy_Em
quelle
0

Hier ist ein kleines, aber innovatives Vorlagenprojekt für den schnellen Start mit dem STM32F0 Discovery Board unter Linux oder einem anderen Betriebssystem:

https://github.com/dobromyslov/stm32f0-chibios-template

Beachten Sie, dass das Projekt ChibiOS verwendet - ein freies und Open-Source-Echtzeitbetriebssystem, daher ist es nicht gerade eine reine Neuimplementierung.

Viacheslav Dobromyslov
quelle
0

Ich benutze vim und arm-none-eabi-gcc zusammen mit allen üblichen Linux-Entwicklungswerkzeugen. Linux ist meiner Meinung nach eine überlegene Entwicklungsumgebung für Embedded-Arbeiten. Zum Debuggen verwende ich stlink und arm-none-eabi-gdb.

Martin
quelle
0

Betrachten wir platformio . Wenn Sie mit der Befehlszeile vertraut sind, werden Sie feststellen, dass platformio den Entwicklungsprozess erheblich vereinfacht. pio initkann verwendet werden, um ein Projekt einzurichten. pio runnutzt die Toolchain zum Kompilieren. pio run --target uploadSendet den Code an das Gerät. Platformio übernimmt das Herunterladen der Toolchain-Komponenten, Bibliotheken usw. nach Bedarf.

dat
quelle