Forum: Mikrocontroller und Digitale Elektronik libraries bei stm32 einbinden.


von sepp (Gast)


Lesenswert?

ähmm
wie kann man HAL h-files zB xxx_hal_tim.h nachträglich so einbinden, 
dass der Compiler die auch findet?
Irgendwie funktioniert das nicht im Keil uVision 5.
Und komisch ist auch, dass ich nichts einbinden muss zB auch #include 
"stm32f0xx_hal.h" nicht benötige, damit alle Funktionen und 
HandlerTypeDefs gefunden werden.
Was macht STM32CubeMx anders als ich bzw. was muss ich machen, damit ich 
auch nicht immer extra alles zusätzlich includen muss?

von Dr. Sommer (Gast)


Lesenswert?

sepp schrieb:
> Und komisch ist auch, dass ich nichts einbinden muss zB auch #include
> "stm32f0xx_hal.h" nicht benötige, damit alle Funktionen und
> HandlerTypeDefs gefunden werden.

Sicher dass das nicht indirekt über einen zentralen Header passiert? Man 
kann zwar über "-i" auf der Kommandozeile Header einbinden, das ist aber 
ziemlich unsauber.

von sepp (Gast)


Lesenswert?

Dr. Sommer schrieb:
> sepp schrieb:
>> Und komisch ist auch, dass ich nichts einbinden muss zB auch #include
>> "stm32f0xx_hal.h" nicht benötige, damit alle Funktionen und
>> HandlerTypeDefs gefunden werden.
>
> Sicher dass das nicht indirekt über einen zentralen Header passiert? Man
> kann zwar über "-i" auf der Kommandozeile Header einbinden, das ist aber
> ziemlich unsauber.

Was ich meine ist, dass wenn ich den Code automatisch von STMCubeMX 
generieren lasse, dass ich dann fast nichts includen muss, ausser 
meistens der stmxxx_hal.h library. Die steht dann aber automatisch auch 
im main.c drin.

Und wenn ich das mal gemacht habe und zB den xxx_hal_tim.h oder 
xxx_hal_tim.c nachträglich einfügen möchte unter drivers, findet er die 
header datei dazu nicht.
Was macht daher CubeMX anders, dass es funktioniert.

von Dr. Sommer (Gast)


Lesenswert?

sepp schrieb:
> Was macht daher CubeMX anders, dass es funktioniert.

Include Pfade per -I Option an den Compiler setzen?

von pegel (Gast)


Lesenswert?

Ich weiß nicht wie Keil das macht, aber warum rufst du CubeMX nicht 
einfach noch mal auf?

Ein Blick in die .uvproj zeigt, dass einfaches in die Verzeichnisse 
kopieren wohl nicht genügt.
Es muss also eine Art "zum Projekt hinzufügen" geben.

von pegel (Gast)


Lesenswert?

Ach ja:
bei SW4STM32 muss nach dem Hinzufügen ein "rebuild index" ausgeführt 
werden damit er die "Neuen" in das Projekt einfügt.

von Nörgler (Gast)


Lesenswert?

Meine Güte das ist ja traurig! Klicke hier und dann dort, dann sollte es 
gehen. Beim nächsten Update oder IDE Wechsel gehts dann wieder nicht / 
anders.. und man muss wieder nachfragen.

Schade, dass die Programmierung von µC/C/C++ genauso Klickibunti wird, 
wie vieles anderes. Versuche dir zu liebe komplett auf HAL zu verzichten 
- es ist wirklich leicht.

von Dr. Sommer (Gast)


Lesenswert?

Nörgler schrieb:
> Schade, dass die Programmierung von µC/C/C++ genauso Klickibunti wird,
> wie vieles anderes. Versuche dir zu liebe komplett auf HAL zu verzichten
> - es ist wirklich leicht.

Einfach alles mit Simulink machen, dann wird alles besser.

von Harry L. (mysth)


Lesenswert?

Projekt mit CubeMX erzeugen, und dann das gesamte Projekt in der IDE 
importieren.

von sepp (Gast)


Angehängte Dateien:

Lesenswert?

pegel schrieb:
> Ich weiß nicht wie Keil das macht, aber warum rufst du CubeMX
> nicht
> einfach noch mal auf?
>
> Ein Blick in die .uvproj zeigt, dass einfaches in die Verzeichnisse
> kopieren wohl nicht genügt.
> Es muss also eine Art "zum Projekt hinzufügen" geben.

Weil ich einfach wissen möchte, warum das nicht funktioniert. 
Irgendeinen Grund muss es doch haben..

Dr. Sommer schrieb:
> sepp schrieb:
>> Was macht daher CubeMX anders, dass es funktioniert.
>
> Include Pfade per -I Option an den Compiler setzen?

Ich frage mich gerade, wo mein Commandofenster ist??
Wie kann ich das einblenden? (Siehe Bild)

von Harry L. (mysth)


Lesenswert?

Hör auf im Nebel zu stochern und geh den vorgesehen Weg!
Man muß as nicht alles manuell einstellen!
https://www.youtube.com/watch?v=EYwyIwClsGc

von Christopher J. (christopher_j23)


Lesenswert?

Ja mei, was soll ma do no sogn?

Dr. Sommer schrieb:
> Include Pfade per -I Option an den Compiler setzen?

Glaube ich nicht. Ich glaube auch nicht, dass das kompiliert wenn man 
sämtliche Includes weglässt und trotzdem irgendwelche HAL-Funktionen 
nutzt.

stm32f0xx_hal.h zieht stm32f0xx_hal_conf.h und da wird dann etwa über 
ein
1
#define HAL_GPIO_MODULE_ENABLED
gesagt, dass der sich den Header für GPIO automagisch ziehen soll, was 
dann später über
1
#ifdef HAL_GPIO_MODULE_ENABLED
2
 #include "stm32f0xx_hal_gpio.h"
3
#endif /* HAL_GPIO_MODULE_ENABLED */
abgefrühstückt wird. Deshalb reicht es diesen einen Header zu includen.

Das finde ich übrigens auch nicht viel besser als die Benutzung von 
-I, weil hier der Präprozessor als Build-System missbraucht wird und das 
ist meiner Meinung nach viel zu oft einfach nur Käse.

von Harry L. (mysth)


Lesenswert?

Christopher J. schrieb:
> Das finde ich übrigens auch nicht viel besser als die Benutzung von
> -I, weil hier der Präprozessor als Build-System missbraucht wird und das
> ist meiner Meinung nach viel zu oft einfach nur Käse.

Das ist Unfug!
Die HAL-Includes liegen in einem eigenen Verz. und genau das wird im 
Include-Suchpfad hinzugefügt, nur, daß man das nicht manuell machen muß, 
sondern im von CubeMX generierten Projekt-File bereits enthalten ist.

Der hier gewählte Ansatz ist bereits grundverkehrt!

Wie bereits oben geschrieben:
Projekt mit CubeMX generieren, und das gesamte Projekt als Projekt in 
der IDE importieren!

Danach ist alles bereit und so, wie es sein soll.

Manuelle Eingriffe sind absolut nicht erforderlich.

von Christopher J. (christopher_j23)


Lesenswert?

Harry L. schrieb:
> Das ist Unfug!

Was ist Unfug? Den CPP als Build-System zu missbrauchen oder was?

Um das mal klarzustellen: Meine Aussage oben bezog sich auf das hier:

sepp schrieb:
> Was ich meine ist, dass wenn ich den Code automatisch von STMCubeMX
> generieren lasse, dass ich dann fast nichts includen muss, ausser
> meistens der stmxxx_hal.h library. Die steht dann aber automatisch auch
> im main.c drin.
>
> Und wenn ich das mal gemacht habe und zB den xxx_hal_tim.h oder
> xxx_hal_tim.c nachträglich einfügen möchte unter drivers, findet er die
> header datei dazu nicht.
> Was macht daher CubeMX anders, dass es funktioniert.

und die Antwort darauf ist, dass CubeMX die richtigen #defines in der 
stm32yyxx_hal_conf.h setzt und dadurch alle HAL-Header automagisch 
eingebunden werden, wenn man denn die Peripherie entsprechend in CubeMX 
konfiguriert hat.

: Bearbeitet durch User
von Harry L. (mysth)


Lesenswert?

Christopher J. schrieb:
> und die Antwort darauf ist, dass CubeMX die richtigen #defines in der
> stm32yyxx_hal_conf.h setzt und dadurch alle HAL-Header automagisch
> eingebunden werden, wenn man denn die Peripherie entsprechend in CubeMX
> konfiguriert hat.

Ja, sorry, hatte ich wohl falsch verstanden....die Hitze....
Ist natürlich korrekt so!

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.