CubeIDE - erstellen eines Projektes

Gast #6065188
Lesenswert?

Guten Tag,

ich verfolge gerade ein Tutorial, welches das programmieren der STM32 
mit der CMSIS erklärt.

Dort wird beschrieben, wie ich ein Projekt erstellen kann: 
http://stefanfrings.de/stm32/cube_ide.html

Leider existieren die Verzeichnisse
  ProjectFolder/CMSIS/core
  ProjectFolder/CMSIS/device
bei mir nicht (wie man auch dem Screenshot entnehmen kann).

Ich habe über File->New->Other->ST->STM32 das Arbeitsprojekt erstellt, 
die MCU ausgewählt (ich musste einen auswählen, weil ich sonst nicht auf 
Next clicken konnte) und als "Target Project Type" "Empty" angegeben.
Was mache ich falsch?
Angehängte Dateien:
Gast #6065275
Lesenswert?

>Ich habe über File->New->Other->ST->STM32 das Arbeitsprojekt erstellt,
>die MCU ausgewählt (ich musste einen auswählen, weil ich sonst nicht auf
>Next clicken konnte) und als "Target Project Type" "Empty" angegeben.
>Was mache ich falsch?

Falls das alles ist was du bis hier hin gemacht hast, ist deine 
Aufmerksamkeitsspanne der Knackpunkt, lese erstmal das Tutorial zu Ende: 
Du musst die CMSIS-Bibliothek selbst hinzufügen, so wie es im Tutorial 
weiter unten sehr sehr seeeehr ausführlich beschrieben wird.
Gast #6065349
Lesenswert?

> ist deine Aufmerksamkeitsspanne der Knackpunkt

Aha, interessant. Vielleicht war meine Frage auch nicht klar genug 
gestellt, dass sie für jeden verständlich ist.
Wo ist dort beschrieben, dass die Ordner selbst hinzugefügt werden 
sollen und nicht auto-generiert werden? Zumal die HAL Library darauf 
aufbaut? Im Tutorial ist kein Datum angegeben und auch keine 
Versionsnummer. Vielleicht ändert sich Software mit der Zeit? Immerhin 
wurde der Schritt auch nicht erwähnt, in der die MCU ausgewählt werden 
muss (soviel zu deinem sehr ausführlich - füg noch ein paar "e"s hinzu. 
Lässt dich schlauer aussehen)? Muss man echt so degeneriert auf eine 
einfache Frage antworten?
Gast #6065371
Lesenswert?

Quaser schrieb:
> Wo ist dort beschrieben, dass die Ordner selbst hinzugefügt werden
> sollen und nicht auto-generiert werden?

Lege mit dem Assistenten der IDE (File/New/Other.../ST/STM32 Project) 
ein Arbeitsprojekt mit dem "Target Project Type" "Empty" an.

Kopiere aus dem CMSIS Paket für alle STM32 die folgenden Verzeichnisse 
in dein Projekt:
1
Quelle                                Ziel
2
CMSIS/Include                        ProjectFolder/CMSIS/core
3
CMSIS/Device/ST/STM32Fxxx/Include     ProjectFolder/CMSIS/device

In der Datei stm32f3xx.h (oder so ähnlich) sollst du unter dem Kommentar 
"Uncomment the line below according to the target STM32 device" die zu 
deinem Mikrocontroller passende Zeile aktivieren.

Füge die beiden CMSIS Verzeichnisse zur Projektkonfiguration hinzu:
  * Gehe im Project Menü auf Properties.
  * Gehe nach C/C++ Build  Settings  Tool Settings / MCU GCC Compiler 
/ Include paths

Kann man das wirklich übersehen, nachdem man den ersten Satz bereits 
gefunden und nachvollzogen hat?
Angehängte Dateien:
Gast #6065372
Lesenswert?

Quaser schrieb:
> Zumal die HAL Library darauf aufbaut?

Du hast ja ein "Empty" Projekt erstellt, also ohne Bibliotheken. Ein 
Projekt nur mit CMSIS kann die IDE halt nicht erstellen. ST will mit der 
IDE die HAL bewerben.

> Vielleicht ändert sich Software mit der Zeit?

Das tut sie, auch das habe ich auf der selben Webseite deutlich 
geschrieben. Wenn du etwas stabiles willst, wo sich die Details nicht 
alle paar Monate ändern, dann verwende die System Workbench for STM32.

Wenn man das neueste vom neuesten benutzt, muss man damit rechnen, dass 
die meisten Anleitungen nicht 100% passen. Gerade bei der Cube IDE ist 
das ein Thema. Diese Anleitung habe ich seit der ersten Erstellung 
mehrfach ändern müssen.

> Immerhin wurde der Schritt auch nicht erwähnt, in der die MCU
> ausgewählt werden muss

Ja mei, das ergibt sich von selbst, weil man sonst in dem Assistenten 
nicht weiter kommt. Vor dem Pinkeln solltest du auch die Klobrille hoch 
klappen. Das muss man auch nicht auf ein Schild schreiben, oder doch?

> Muss man echt so degeneriert auf eine einfache Frage antworten?

Das ist der übliche Tonfall hier. Wer Schwächen offenbart macht sich 
selbst zum Opfer. Das ist fies, aber so ist es hier halt.
Gast #6065404
Lesenswert?

> Muss man echt so degeneriert auf eine
> einfache Frage antworten?

Das hast du wohl in den falschen Hals bekommen >:) In meiner Antwort 
waren doch alle für deine Fragestellung relevanten Informationen 
enthalten.
Gast #6065427
Lesenswert?

Was haltet ihr von der entgegengesetzten Richtung?

Ein normales CubeIDE HAL Projekt erzeugen und daraus alles was HAL ist 
entfernen, auch die .ioc.

Eine neue main.c und main.h erstellen ohne HAL irgendwie zu nutzen.

Klingt nach viel Arbeit, ist es aber nicht.
Hat den Vorteil das alles einschliesslich Debug funktioniert.

Das als Vorlage Projekt speichern und einfach immer wieder kopieren.
Angehängte Dateien:
#6065433
Lesenswert?

pegel schrieb:
> Was haltet ihr von der entgegengesetzten Richtung?
>
> Ein normales CubeIDE HAL Projekt erzeugen und daraus alles was HAL ist
> entfernen, auch die .ioc.
>
> Eine neue main.c und main.h erstellen ohne HAL irgendwie zu nutzen.
>
> Klingt nach viel Arbeit, ist es aber nicht.
> Hat den Vorteil das alles einschliesslich Debug funktioniert.
>
> Das als Vorlage Projekt speichern und einfach immer wieder kopieren.

Habe ich auch gemacht. Habe ein altes F103 CooCox Projekt von mir  mit 
SPL V3.5.0 in TS importiert und kompiliert und läuft ohne HAL wie es 
soll. HAL ist nicht unumgänglich notwendig.
Gast #6065522
Lesenswert?

pegel schrieb:
> Was haltet ihr von der entgegengesetzten Richtung?
> Ein normales CubeIDE HAL Projekt erzeugen und daraus alles was HAL ist
> entfernen, auch die .ioc.

Kann man durchaus machen, ist allerdings deutlich mühsamer.

> Das als Vorlage Projekt speichern und einfach immer wieder kopieren.

Gute Idee.
#6065555
Lesenswert?

Hänge meine Frage gleich mal hier an:

Beschäftige mich erst seit einigen Tagen mit dem STM32 (konkret mit dem 
F303RET6 Nucleo Board).

Ist der HAL als Ebene dazwischen wirklich so gruslig?

Ich fand den Lernfortschritt recht angenehm, habe in den Tagen mit GPIO, 
ADC, einem Timer, einem Timer-Interrupt und dem UART über den virtuellen 
COM-Port experimentiert und kam recht gut voran. Und ich fand es 
zumindest in der Phase recht angenehm noch nicht gleich jeden 
Registereintrag per Hand überlegen und vornehmen zu müssen.

Bläht der HAL den Speicherbedarf unnötig auf und/oder verlangsamt er die 
Verarbeitung ohne dass der Compiler vieles davon im Vorfeld erledigen 
kann?

Danke für eure Tips.
Gast #6065561
Lesenswert?

Wenn es überhaupt 10 Klicks sind. Ich spiele es mal durch. Wir nehmen 
mal an, wir haben gerade ein neues STM32CubeMX Projekt angelegt für den 
STM32F407VGT6.

1. Code in der .io Datei erzeugen (Generate Code).
2. .io Datei löschen
3. Folgende Dateien löschen: main.h, stm32f4xx_hal_conf.h, 
stm32f4xx_hal_msp.c, system_stm32f4xx.c
4. HAL Ordner löschen
5. Überall "#include "main.h"" entfernen (Übersetzen zeigt die include 
Orte als Fehler an)
6. "HAL_IncTick();" aus "SysTick_Handler" entfernen. Übersetzen zeigt 
den Ort als Fehler an.
7. Aus der .s-Startup Datei "bl  SystemInit" entfernen.
8. "USE_HAL_DRIVER" auf den Settings (Preprocessor) entfernen.
9. HAL Include Path entfernen.

Thats it.
Gast #6065562
Lesenswert?

Lutz S. schrieb:
> Bläht der HAL den Speicherbedarf unnötig auf und/oder verlangsamt er die
> Verarbeitung ohne dass der Compiler vieles davon im Vorfeld erledigen
> kann?

Der HAL verhindert, dass du den Controller wirklich durchdringst und 
ggf. mal auf ein Problem stößt, welches sich auf Registerebene wirklich 
gut individuell lösen lässt, im HAL jedoch nicht möglich oder 
ersichtlich ist.

Zusätzlich hat der HAL genau wie jede andere Software auch Fehler.
Gast #6065563
Lesenswert?

Lutz S. schrieb:
> Ist der HAL als Ebene dazwischen wirklich so gruslig?

Meine ersten zwei Projekte mit zwei unterschiedlichen STM32 Modellen 
scheiterten an Bugs in der HAL. Und der erste Eindruck zählt. Ich habe 
meinen Knacks weg.

Dennoch habe ich in dem Jahr danach noch mehrmals die HAL verwendet, und 
bin prompt auf zwei weitere Bugs gestoßen. Dank der Hilfe hier im Netz 
wurden die Fehler gefunden und korrigiert. Doch ich fühle mich wohler, 
wenn ich meine Programme ohne fremde Hilfe durchschaue.

Wegen der Erlebnisse mit den Bugs ist die HAL für mich unattraktiv.

Das Einzige, weswegen ich sie noch verwenden würde wäre der USB Treiber, 
allerdings hat da das Forenmitglied W.S eine wesentlich kompaktere und 
durchschaubare Lösung veröffentlicht, mit der ich sehr gut zurecht 
komme.

Deswegen ist die HAL für mich vollkommen uninteressant geworden.

> ich fand es zumindest in der Phase recht angenehm noch nicht gleich
> jeden Registereintrag per Hand überlegen und vornehmen zu müssen.

Genau das würde ich vermissen.

Lutz S. schrieb:
> Bläht der HAL den Speicherbedarf unnötig auf und/oder verlangsamt er die
> Verarbeitung ohne dass der Compiler vieles davon im Vorfeld erledigen
> kann?

Kommt drauf an. Wenn du die HAL nur zur einmaligen Initialisierung der 
Peripherie verendest und genug Speicher frei hast, kann Dir das 
Aufblähen egal sein. Auf jeden Fall ist es nicht so schlimm, die 
digitalWrite() von Arduino.

"Ein Hello World!" auf der USB-CDC Schnittstelle eines STM32F3 kostet 
mit HAL 20 kB Flash und 5 kB RAM. Mit dem USB treiber von W.S sind es 
nur 5,2 kB Flash und 600 Bytes RAM.

Falls du dir das anschauen möchtest: 
http://stefanfrings.de/stm32/stm32f3.html#usb

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren