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

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

Was ist der einfachste Weg, dies zu tun?

Ich habe Codesourcery auf LinuxhUbuntu installiert und etwas gestapelt: PATH ist ok, aber das Programm erscheint nicht im Dasboard oder Software Center. Vielleicht ist es das Ubuntu das ich irgendwie ändern würde aber weiß nicht wie. Wenn Sie eine Idee haben, schreiben Sie bitte. Danke schön. Tom
@ TomRitzmann PeterJ hat Recht, bitte verwenden Sie keine Antworten, um Fragen zu stellen. Außerdem sind Softwareprobleme hier Off-Topic, SuperUser ist der richtige Ort.
Das Online-Buch The Embedded Rust Book unter URL docs.rust-embedded.org/book/intro/index.html verwendet das STM32 Discovery Board in seinen Tutorials. Siehe auch GitHub unter github.com/rust-embedded/discovery
Siehe auch ST-Dokumentation, Webinare und Lernressourcen unter st.com/content/st_com/en/support/learning/…

Antworten (8)

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

ST Nucleo-Boards werden auch als USB-Flash-Gerät angezeigt, also nicht einmal nötig stlink– kopieren Sie einfach die Datei auf sie.

Es gibt einige gute Seiten zur Entwicklung 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/ setup-the-stm32f4-arm-development-toolchain/ und http://jethomson.wordpress.com/2011/11/17/getting-started-with-the-stm32f4discovery-in-linux/

Allerdings fand ich den letzten Link am nützlichsten. Es zeigt, wie man die STM32-Projekte von ST so erstellt, wie sie sind - Die einzige Änderung besteht darin, sein Makefile hinzuzufügen, was eine perfekte Lösung zu sein scheint.

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ötigen alle unterschiedliche Compiler-Flags, und das Linker-Skript wird für jeden etwas anders sein (allerdings nur wegen der geänderten RAM- und Flash-Größen).

Bearbeiten: Wenn Sie wirklich schnell loslegen möchten, können Sie auch auf http://www.espruino.com schauen . Es ist ein JavaScript-Interpreter, der auf dem STM32 selbst ausgeführt wird. Wenn Sie also „stlink“ installiert haben, damit Sie auf das Board flashen können, können Sie einfach ein Bild von dieser Site herunterladen, es flashen und dann mit einer Terminalanwendung verbinden und Programmieren beginnen.

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

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

  • Installieren Sie eine Toolchain, die arm-none-eabi-gcc bereitstellt. Auf 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 debuggen möchten) alle von der Community repo oder https://launchpad.net/gcc-arm-embedded (welches im AUR von Archlinux als gcc-arm-none-eabi-bin zu finden ist).
  • Entscheiden Sie, ob und welche Bibliothek Sie für den Zugriff auf die Hardware verwenden möchten. Aus meiner Sicht gibt es drei gängige Optionen:
    1. Keiner. Du schreibst alles von Grund auf neu. Für Anfänger nicht zu empfehlen.
    2. STM32Cube : AC-Bibliothek, die von ST selbst bereitgestellt wird.
    3. Libopencm3 : Eine Open-Source-Bibliothek, die ziemlich viele Cortex-m-Kerne von verschiedenen Anbietern unterstützt.
    4. STM32PLUS : Eine C++-Bibliothek. Viel mehr kann ich dazu aber nicht sagen, da ich es nicht getestet habe.
  • Erstellen oder kopieren Sie Ihr erstes Projekt.
    1. Schreiben Sie ohne Bibliothek Ihr eigenes Makefile, Linker-Skript, Startcode und bringen Sie ein einfaches Makefile zum Laufen. Viel Glück ;)
    2. Mit STM32Cube: STM32CubeMX herunterladen und installieren . Nach dem Entpacken ist die *.exe-Datei eigentlich nur eine Java-Datei und Sie können sie mit "java -jar filename.exe" ausführen. 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, Startcode, einer trivialen 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 Taktbaum und zum Überprüfen, ob Sie den Chip so konfigurieren können, wie Sie es sich vorstellen.
    3. Mit libopencm3: Holen Sie sich die libopencm3-Beispiele , finden Sie ein Beispiel, das zu Ihrem Board passt, und verwenden Sie dieses als Ausgangspunkt. Die Beispiele sollten betriebsbereit sein. Geben Sie einfach "machen" ein. Verwenden Sie dieses Beispiel dann als Ausgangspunkt für Ihre eigene Entwicklung.
    4. Mit STM32Plus: Ich weiß es nicht. Verzeihung.
  • Bringen Sie Ihr Projekt an die Tafel. Entweder verwenden

    1. Der serielle Bootloader: stm32flash funktioniert super.
    2. Der Debug-Port: Sie können openocd verwenden , um mit dem auf dem Board bereitgestellten Debugging-Adapter zu kommunizieren. Openocd ist großartig, aber die Dokumentation ist nicht immer die beste. Treten Sie im Zweifelsfall dem Openocd-IRC-Kanal bei. Die Leute dort sind wirklich nett.
  • Codieren Sie in einem Texteditor und verwenden Sie Befehlszeilentools. Dieses Tutorial wird viele Tipps geben.

Genießen

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

Und Hilfe beim Kompilieren der STM32-Beispiele unter Linux finden 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 Codekorrekturen sind ebenfalls dokumentiert, aber der größte Teil des Projekts sollte damit funktionieren

make CROSS_COMPILE=/path/to/arm-2011.03/bin/arm-none-eabi-
Danke! Diese Links hatte ich vorher noch nicht gesehen. Ich bin erstaunt, dass es nirgendwo eine definitivere Anleitung gibt, da verschiedene Discovery Boards subtil unterschiedliche Build-Flags haben.
Ja, ST hat ein sehr billiges Board hergestellt und sie verschenkt, Tausende davon, und der STM32 selbst ist ein großartiger Chip, bis hin zu F4, aber das Programmieren ist eine große Nervensäge. Ihre Treiber sind unglaublich schlecht dokumentiert und nicht gut benannt, und es ist nicht allzu einfach, kostenlos eine IDE und eine Toolkette zu finden, die gut zusammenspielen.

Ich hatte Erfolg mit https://github.com/JorgeAparicio/bareCortexM (siehe auch die verlinkten Blogbeiträge). Ich bin platt, dass ich den Code einfach in Einzelschritten durchgehen 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, gcc konfiguriert und verfügt über Skripte zum Flashen und Debuggen auf mehreren Zielen, einschließlich einiger der Discovery Boards. Indem ich die Anweisungen befolgte und die empfohlenen Eclipse-Plugins installierte, konnte ich mein STM32VLDISCOVERY auf Ubuntu verwenden.

Wie empfohlen habe ich das Eclipse-Template mit der C++-Template-Bibliothek libstm32pp desselben Autors für STM32-Hardware kombiniert. libstm32pp bietet einen überraschend vollständigen Ersatz für CMSIS und die oft kritisierten STM32-Treiber mit einem Programmiermodell, das Sie Dinge sagen lässt wie PB10::setMode(gpio::cr::GP_OPEN_DRAIN_2MHZ)und PINB::setLow()oder PINB::setHigh()alles aufgrund der C++-Vorlagen größtenteils inline kompiliert. Die Einrichtung ist sehr schön.

Ich empfehle den ungewarteten bareCortexM nicht mehr; Schauen Sie sich stm32plus unter andybrown.me.uk/wk an
Das Problem bei solchen Gerätetreibern ist, dass sie ineffizient sind. Für richtige Hochgeschwindigkeits-Gerätetreiber, die keine CPU-Zyklen verschwenden, benötigen Sie ein RTOS darunter, damit Sie eine ordnungsgemäße Planung durchführen können.

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

Bibliotheken wurden von der ST-Website, Makefile, entnommen – von einem von vielen GPL-Beispielen im Internet.

Hier ist ein kleines, aber innovatives Vorlagenprojekt für den schnellen Einstieg in die Verwendung des STM32F0-Discovery-Boards unter Linux oder einem anderen Betriebssystem:

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

Beachten Sie, dass das Projekt ChibiOS verwendet - ein kostenloses und Open-Source-Echtzeitbetriebssystem, also ist es nicht gerade eine Bare-Bone-Implementierung von Grund auf neu.

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

Betrachten Sie 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 kümmert sich bei Bedarf um das Herunterladen der Toolchain-Komponenten, Bibliotheken usw.