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.
>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.
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!
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
>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?
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.
>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
>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?
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).
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.
>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.
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:
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.
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.