Forum: Compiler & IDEs STM32duino geht nicht


von Sebastian (Gast)


Lesenswert?

Ich habe einige STM32 Nucleo-Boards, die ich gerne verwenden würde.

Hier gibt es ein Arduino Framework für die Boards:

https://github.com/stm32duino/Arduino_Core_STM32

Bis jetzt hat das aber noch nie funktioniert.
Alle paar Monate installiere ich das Ding neu, allerdings konsequent 
erfolglos.
Woran könnte das liegen

Hier die Debug-Ausgabe

Arduino: 1.8.9 (Linux), Board: "Nucleo-144, Nucleo H743ZI, Mass Storage, 
Enabled (generic 'Serial'), None, Low/Full Speed, Smallest (-Os 
default), Newlib Nano (default)"

/home/christoph/tools/Arduino/arduino-1.8.9/arduino-builder -dump-prefs 
-logger=machine -hardware 
/home/christoph/tools/Arduino/arduino-1.8.9/hardware -hardware 
/home/christoph/.arduino15/packages -tools 
/home/christoph/tools/Arduino/arduino-1.8.9/tools-builder -tools 
/home/christoph/tools/Arduino/arduino-1.8.9/hardware/tools/avr -tools 
/home/christoph/.arduino15/packages -built-in-libraries 
/home/christoph/tools/Arduino/arduino-1.8.9/libraries -libraries 
/home/christoph/Arduino/libraries 
-fqbn=STM32:stm32:Nucleo_144:pnum=NUCLEO_H743ZI,upload_method=MassStorag 
e,xserial=generic,usb=none,xusb=FS,opt=osstd,rtlib=nano 
-ide-version=10809 -build-path /tmp/arduino_build_381654 -warnings=none 
-build-cache /tmp/arduino_cache_427275 
-prefs=build.warn_data_percentage=75 
-prefs=runtime.tools.arm-none-eabi-gcc.path=/home/christoph/.arduino15/p 
ackages/STM32/tools/arm-none-eabi-gcc/8.2.1-1.7 
-prefs=runtime.tools.arm-none-eabi-gcc-8.2.1-1.7.path=/home/christoph/.a 
rduino15/packages/STM32/tools/arm-none-eabi-gcc/8.2.1-1.7 
-prefs=runtime.tools.CMSIS.path=/home/christoph/.arduino15/packages/STM3 
2/tools/CMSIS/5.5.1 
-prefs=runtime.tools.CMSIS-5.5.1.path=/home/christoph/.arduino15/package 
s/STM32/tools/CMSIS/5.5.1 
-prefs=runtime.tools.STM32Tools.path=/home/christoph/.arduino15/packages 
/STM32/tools/STM32Tools/1.3.0 
-prefs=runtime.tools.STM32Tools-1.3.0.path=/home/christoph/.arduino15/pa 
ckages/STM32/tools/STM32Tools/1.3.0  -verbose 
/home/christoph/tools/Arduino/arduino-1.8.9/examples/01.Basics/Blink/Bli 
nk.ino

Board Nucleo_144 (Plattform stm32, Paket STM32) ist unbekannt

Fehler beim Kompilieren für das Board Nucleo-144.

von Andreas R. (daybyter)


Lesenswert?

Hast Du das Nucleo 144 Board vorher über den Board Manager hinzugefügt?

https://github.com/stm32duino/wiki/wiki/Getting-Started

von Sebastian (Gast)


Lesenswert?

>Hast Du das Nucleo 144 Board vorher über den Board Manager hinzugefügt?

Ja schon. Aber nach all der Zeit bin ich jetzt doch weiter.
Ich habe das STM32 Paket mit dem Board-Manager deinstalliert und nachdem 
im Verzeichnis .arduino immer noch nicht alle Files weg waren, habe ich 
diese dann noch von Hand gelöscht. Dann das gesamte STM32Duino über den 
Board-Manager neu installiert.

Hurra, es compiliert .... aber: Jetzt findet er keine Download 
Möglichkeit.

von DSR200 (Gast)


Lesenswert?

geht nicht

Hat ja auch keine Beine.

von Sebastian (Gast)


Lesenswert?

Mittlerweile glaube ich ja, dass das Hauptgeschäft von ST gar nicht die 
Produktion von Mikrocontrollern sondern von Spielen ist.

Die Spiele gehören zur Kategorie "Installation-Advendure-Games" mit dem 
man sich über Tage beschäftigen kann.

Das ist der Output:

....

Global variables use 800 bytes (6%) of dynamic memory, leaving 11488 
bytes for local variables. Maximum is 12288 bytes.
An error occurred while uploading the sketch
STM32_Programmer.sh not found.
Please install it or add '<STM32CubeProgrammer path>/bin' to your PATH 
environment:
https://www.st.com/en/development-tools/stm32cubeprog.html
Aborting!

von Stefan F. (Gast)


Lesenswert?

Seit der Übernahme durch ST läuft dieses Projekt nur noch gruselig. ST 
kann einfach keine Software.

Für einige ältere STM32 Modelle gibt es eine ältere Version vom Projekt, 
welches von Dan Drown zum Download bereitgestellt wird. Diese Version 
läuft noch ohne Cube.

http://stefanfrings.de/stm32/stm32f1.html#arduino

von Sebastian (Gast)


Lesenswert?

>Seit der Übernahme durch ST läuft dieses Projekt nur noch gruselig. ST
>kann einfach keine Software.

Stefan, Du hast völlig Recht, der Meinung bin ich auch.
Zu herunterladen des Cube-Programmers muss man seine E-Mail angeben. 
Dafür bekommt man dann einen 90Mb großes Programm ( früher hatten 
Betriebssysteme mal diese Größe und nicht die Flash-tools ).

Natürlich ist das Ergebnis keineswegs überzeugend, denn wie könnte es 
auch anders sein: Das Programm funktioniert nicht.

Es gibt die Fehlermeldung, dass man openJFX ( also eine neue Java 
Runtime ) herunterladen muss.

Natürlich ist das Ergebnis keineswegs überzeugend, denn wie könnte es 
auch anders sein: Das Programm funktioniert nicht.

Weil Ubuntu die alte JavaSDK als default nimmt.

Welcher hirnverbrannte Idiot kam bei ST auf die Idee, dass eine 
Flash-Software die neuesten GUI-Elemente braucht?

von Stefan F. (Gast)


Lesenswert?

Sebastian schrieb:
> Es gibt die Fehlermeldung, dass man openJFX ( also eine neue Java
> Runtime ) herunterladen muss.

Du musst es mit Oracle Java 8 ausführen.
https://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html
Unter Linux nutze ich dazu dieses Hilfs-Script, welches drei benötigte 
Libraries automatisch auspackt, falls nötig: 
http://stefanfrings.de/stm32/start.tar.gz

> Welcher hirnverbrannte Idiot kam bei ST auf die Idee,
> dass eine Flash-Software die neuesten GUI-Elemente braucht?

Da hast du etwas missverstanden. JFX gibt es schon seit vielen jahren, 
wurde zwischenzeitlich aus Linux entfernt und jetzt doch wieder 
eingefügt. Allerdings in einem Verzeichnis, wo diese Kack Software sie 
nicht findet.

von Johannes S. (Gast)


Lesenswert?

Das dürfte an den geänderten Lizenzbedingungen liegen, das liegt aber an 
Oracle und da kann ST nix für.

von Sebastian (Gast)


Lesenswert?

>Du musst es mit Oracle Java 8 ausführen.

Danke für den Hinweis.

Ich habe festgestellt, dass es eine Kommandozeilenversion gibt, die von 
der Arduino-IDE benötigt wird.

Ich kann ein Terminal öffnen, meinen Tool-Pfad exportieren und dann die 
Arduino-IDE vom Terminal aus starten:

export PATH=~/tools/Arduino/STM32CubeProg/bin:$PATH
./arduino

Natürlich ist das Ergebnis keineswegs überzeugend, denn wie könnte es
auch anders sein: Das Programm hat keine Rechte:

Global variables use 944 bytes (0%) of dynamic memory, leaving 130128 
bytes for local variables. Maximum is 131072 bytes.
      -------------------------------------------------------------------
                        STM32CubeProgrammer v2.1.0
      -------------------------------------------------------------------

libusb: error [_get_usbfs_fd] libusb couldn't open USB device 
/dev/bus/usb/003/005: Keine Berechtigung
libusb: error [_get_usbfs_fd] libusb requires write access to USB device 
nodes.
libusb: error [_get_usbfs_fd] libusb couldn't open USB device 
/dev/bus/usb/003/005: Keine Berechtigung
libusb: error [_get_usbfs_fd] libusb requires write access to USB device 
nodes.
ST-LINK error (DEV_CONNECT_ERR)

Leider weiß ich nicht, welchen Programmiermodus man normalerweise nimmt 
( Massstorage, SWD, Serial, DFU ).
Die Meldung gilt für SWD

von Sebastian (Gast)


Lesenswert?

>Das dürfte an den geänderten Lizenzbedingungen liegen, das liegt aber an
>Oracle und da kann ST nix für.

Doch: Warum muss ein Flash-Tool eine SchnickSchnack-GUI mit 90Mb haben, 
anstatt eine einfache alte mit SWING die wirklich überall läuft?

von Stefan F. (Gast)


Lesenswert?

Sebastian schrieb:
> Das Programm hat keine Rechte

Du trittst aber auch in jedes Fettnäpfchen , könntest mei 
Seelenverwandter sein. "Zufällig" kenne ich nämlich auch dieses Problem.

Da gibt es ein Unterverzeichnis Drivers/rules. Die Dateien darin 
kopierst du nach /etc/udev/rules.d. Oder du startest das Programm 
einfach mit sudo (falls du ihm vertraust, keine Dummheiten zu begehen).

von Stefan F. (Gast)


Lesenswert?

Sebastian schrieb:
> Doch: Warum muss ein Flash-Tool eine SchnickSchnack-GUI mit 90Mb haben,
> anstatt eine einfache alte mit SWING die wirklich überall läuft?

Vor allem: Cube MX braucht ja schließlich auch kein JFX.

von Stefan F. (Gast)


Lesenswert?

Sebastian schrieb:
> Leider weiß ich nicht, welchen Programmiermodus man normalerweise nimmt

SWD wenn du einen ST-Link Adapter verwendest.
Ich glaube, du brauchst ein paar Grundlagen: 
http://stefanfrings.de/stm32/index.html

von Sebastian (Gast)


Lesenswert?

>Ich glaube, du brauchst ein paar Grundlagen:

Wohl war ....

So, die LED blinkt. Damit liegt die TTB ( Time to Blink ) bei ca. 4 
Stunden, wobei man von einem Arduino Framework deutlich mehr erwarten 
kann.

Man muss die rules kopieren:

~/tools/Arduino/STM32CubeProg/Drivers/rules$ sudo cp *.* 
/etc/udev/rules.d/

Das wirkt aber scheinbar nicht gleich, man muss die IDE neu starten.

Ausserdem dachte ich, dass das Blink Beispiel nicht geht. Es scheint so 
zu sein, als wenn das Falshen nur bei jedem zweiten Mal funktioniert.

Aber ich bin zuversichtlich, dass ich jetzt die LED auf dem Board

https://www.st.com/en/evaluation-tools/nucleo-h743zi.html

mit gefühlten 100MHz blinken kann.

Ich muss mal raus kriegen, ob's einen DA-Wandler gibt und ob der von 
Framework unterstützt wird.

von Stefan F. (Gast)


Lesenswert?

Sebastian schrieb:
> Das wirkt aber scheinbar nicht gleich, man muss die IDE neu starten.

Eigentlich musst du das USB Gerät ab- und wieder anstecken.

von Sebastian (Gast)


Lesenswert?

>Eigentlich musst du das USB Gerät ab- und wieder anstecken.

Ah, OK, könnte sein, dass ich das im Eifer des Gefechts getan habe ...

von Andreas R. (daybyter)


Lesenswert?


von Sebastian (Gast)


Lesenswert?

Der STM32H743ZI auf dem Nucleo Board ( TQFP144? ) hat tatsächlich zwei 
DAC.

Aber ich bin mir nicht sicher, wie die angesprochen werden müssen, 
analogWrite(pin,wert) ?

Im Moment tut sich da nichts:
1
#define PIN_DAC1 40 // Achtung, wahrscheinlich falsch
2
3
void setup()
4
{
5
  pinMode(LED_RED, OUTPUT);
6
}
7
8
void loop()
9
{
10
  digitalWrite(LED_RED, 1);
11
  analogWrite(PIN_DAC1, 200);
12
  delay(1000);                       // wait for a second
13
14
  digitalWrite(LED_RED, 0);
15
  analogWrite(PIN_DAC1, 0);
16
  delay(1000);                       // wait for a second
17
}
18
19
Bin ich am falschen Pin? Geht analogWrite nicht?

von Stefan F. (Gast)


Lesenswert?

Das müsste do eigentlich alles in der Doku des Arduino Core beschrieben 
sein. Ok zugegebenermaßen sind diese Dokus oft Lückenhaft, insbesondere 
bei den Punkten, wo sie den Arduino Standard weitgehend 1:1 
implementiert haben.

Guck zuerst in die Doku auf Github: 
https://github.com/stm32duino/wiki/wiki/ Zum DAC habe ich da aber nichts 
gefunden, daher musst du wohl auf die Cube HAL Funktionen zugreifen oder 
den DAC "zu Fuß" ansprechen.

Und wenn du dort nichts findest, könnte der Standard gelten: 
https://www.arduino.cc/reference/en/ (den man ohnehin kennen sollte, 
wenn man Arduino benutzt)

Darüber hinaus solltest zu zur Kenntnis nehmen, dass der Arduino Core 
seit Übernahme durch ST komplett auf Cube HAL basiert. Deswegen stehen 
alle Funktionen aus der Cube HAL zur Verfügung, sofern sie nicht durch 
das Arduino Framework belegt wurden: 
https://www.st.com/en/embedded-software/stm32cubeh7.html#resource

Cube HAL basiert wiederum auf der CMSIS Library, deren Struktur und 
Funktionsumfang von ARM als Standard spezifiziert wurde. Hier würde ich 
Dir raten, einen Blick in di Datei stm32h7xx.h zu werfen, und in die 
Dateien, die darin inkludiert sind.

Der gcc Compiler wird in der Regel zusammen mit der newlib-nano Library 
verwendet. Da sind die Standard C Funktionen drin, wie z.B. sprintf() 
und atoi(). Sie ist hier Dokumentiert: 
https://sourceware.org/newlib/docs.html

Bevor du loslegst, würde ich Dir empfehlen, herauszufinden, welche 
Ressourcen (insbesondere Timer) bereits vom Arduino Framework belegt 
sind. Das erspart Dir stundenlanges Stochern im Nebel. Dazu habe ich auf 
die Schnelle keine Doku gefunden, musst du mal selber suchen.

von Sebastian (Gast)


Lesenswert?

Die Doku zum DAC ist leider gleich Null.

Aber mittlerweile wurde das hier gelöst:
Beitrag "Re: Arduino Nucleo-H743ZI"

Wenn ST zu den Boards die Arduino üblichen, einfachen Examples gemacht 
hätte, wäre das ein Sache von Sekunden. So muss man ein paar Stunden 
suchen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.