Forum: Mikrocontroller und Digitale Elektronik Wie programmiert man einen STM32?


von STM = (S)tudent (T)rifft (M)ikrocontroller (Gast)


Lesenswert?

Hallo,

ich habe mir einen STM32F4 Discovery mit dem LCD Bildschirm geholt. 
Danach habe ich mir das Atollic Studio heruntergeladen und das 
entsprechende Projekt mit dem passenden Device angelegt.

Meine Frage wäre nun folgende: Wie programmiert man das Teil? Welche 
Dokumentationen benötige ich dafür? Was gibt es als Anfänger zu 
beachten?

MfG

von RP6conrad (Gast)


Lesenswert?

Schon Erfahrung mit µ-controller ? (Arduino, Atmel 8-bit..). Diese STM32 
F4 ist nicht so einfach, das hilft wen sie schon C / C++ Kentnisse habe. 
Eigenlich braucht sie nur ein usb-kabel, eine compiler IDE wie Atollic 
und die sie konnen anfangen !
Was genau wollen sie erreichen ?

von STM = (S)tudent (T)rifft (M)ikrocontroller (Gast)


Lesenswert?

RP6conrad schrieb:
> Schon Erfahrung mit µ-controller ?

Ja habe ich. Ich habe etwas AVR und PSoC5 Kenntnisse. Ich will halt den 
Einstieg in die STM Welt schaffen. Gibt es eine Übersicht der 
Headderfiles, die man in sein Projekt einbinden kann? Dort könnte ich 
mir mal die ganzen Funktionen anschauen.

Ich will noch nichts spezielles machen, einfach nur herum 
experimentieren.

MfG

von Alex D. (daum)


Lesenswert?

Kommt drauf an, ob du einen HAL verwenden willst oder direkt auf 
Registerebene arbeiten willst. Der HAL ist ein Abstrahierungslayer, der 
es einfacher macht die Hardware zu nutzen und normalerweise von der IDE 
eingebunden werden kann. Der HAL hat funktionen für alle Peripherals 
(I2C, SPI,...).

Falls du mit dem HAL programmieren möchtest, solltest du dir CubeMX 
ansehen, das ist eine Software von ST, mit der auf Graphische weise die 
Peripherals konfiguriert werden.

Persönlich nutze ich den HAL nicht, weil ich gerne möglichst 
Hardwarenahe programmiere und wenn ich die Register schreibe, weiß ich 
genau was der Code macht. Als Referenz für Code sind das ReferenceManual 
für den Mikrocontroller (für die Peripherals) sowie das 
ProgrammingManual (für Core-componenten, z.B. Interrupt-controller). 
Sonst hilft es oft sich die Sourcen der HAL bzw. StdPeriph library 
anzusehen wenn etwas nicht so funktioniert wie man möchte.

Beitrag #5532954 wurde von einem Moderator gelöscht.
von Harry L. (mysth)


Lesenswert?

Das ist der offizielle YouTube-Kanal zu Atollic.
Da wird alles von Anfang an erklärt.

https://www.youtube.com/channel/UCZ5tf8T8odmacEAOpw68guA

von Stefan F. (Gast)


Lesenswert?

Die Basis Library für alle ARM Controller ist die CMSIS. Mal abgesehen 
von eine ganz kleinen Menge Funktionen beinhaltet die CMSIS eigentlich 
nur die Definitionen für die ganzen Register. Da jeder Chip Hersteller 
as andere um den ARM Kern herum baut, musst du die CMSIS Header Dateien 
folglich bei den Chip-Herstellern suchen.

Bei ST habe ich leider keinen entsprechenden Download gefunden. Aber: In 
dem "STM32Cube MCU Package for STM32F4 series" Paket ist sie enthalten, 
und zwar im Unterverzeichnis Drivers/CMSIS. Für den Anfang brauchst du 
nur die beiden Verzeichnisse "Include" und "Drivers" (das ist der CMSIS 
Core). Alles andere  sind optionale Erweiterungen, die auf dem CMSIS 
Core aufbauen.

Der schwierigere Part ist das Erstellen des Linker Scriptes, des 
Interrupt-Vektor Tabelle und des Startup-Codes in Assembler. Die System 
Workbench konnte diese Files automatisch anlegen, wenn man ein "No 
Firmware" Projekt startete. Das Atollic Studio kann das leider nicht.

Ich würde Dir daher raten, lieber die System Workbench zu benutzen.

Oder du erzeugst mit Cube MX ein Projekt mit HAL und schmeißt den ganzen 
HAL Kram wieder raus, so dass nur noch die CMSIS übrig bleibt.

Es sei denn, du möchtest die HAL benutzen. Dann bleibt sie natürlich 
drin.

Was die Doku angeht: Du brauchst für den Anfang drei Dokumente:

1) Das Reference Manual der STM32F4 Serie. Es beschreibt die ganzen 
Periphierie-Einheiten und Register.
2) Das Datenblatt des konkreten STM32Fxxx Chips. Es beschriebt, welche 
Peripherie (aus dem Reference Maunual) tatsächlich vorhanden ist, die 
elektrischen Eigenschaften und die Pinbelegung.
3) Das Errata Sheet für deinen STM32Fxxx Chip. Es beschreibt Fehler und 
empfiehlt Workarounds.

Wenn du die Cube HAL Verwendest, brauchst du auch die Dokumentation 
davon.

Aber bevor du dich durch diese tausenden Seiten durcharbeitest, wäre ein 
kleines Tutorial mit LED Blinker sicher nicht falsch.

Falls du erwägst, die HAL zu verwenden, dann bedenke, dass diese 
ausschließlich für STM32 Controller existiert. Du kannst Code, der die 
HAL verwendet, nicht leicht auf ARM Controller anderer Hersteller 
portieren.

von Stefan F. (Gast)


Lesenswert?


von Stefan F. (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe Dir mal mit der System Workbench ein nacktes Projekt für 
STM32F4xxRB angelegt. Das Atollic Studio kann dieses Projekt öffnen. 
Dort kannst du die beiden oben genannten CMSIS Verzeichnisse hinzufügen.

Die Vorgehensweise ist hier (für STM32F1) beschrieben, müsste bei Dir 
theoretisch genau so gehen:
http://stefanfrings.de/stm32/index.html#cmsis

von Stefan F. (Gast)


Lesenswert?

Die Dokumentation der C Library ist hier:
https://sourceware.org/newlib/

von Stefan F. (Gast)


Lesenswert?

Mir ist noch etwas eingefallen (kommt so kleckerweise hoch):

Wenn du nach Tutorials für das Discovery Board suchst, wirst du 
warscheinlich auf die Standard Peripheral Library (SPL, StdPeriphLib) 
stoßen. Die war nämlich damals noch aktuell, als die Discovery Boards 
neu waren.

Halte dich davon fern. Diese Library ist veraltet und wurde schon vor 
einigen Jahren durch die Cube HAL ersetzt.

von Stefan F. (Gast)


Lesenswert?

Noch Fragen oder bist du am Lesen? :-)

von CK (Gast)


Lesenswert?

Ich verwende Eclipse CDT mit "GNU MCU Eclipse"-Plugin

Bei der Projekterstellung kann man seinen STM-Controller auswählen und 
es wird C-Startup-Code dafür erstellt. (Anders als die Binar-Blobs 
welche die KEIL-IDE dazu linkt)

CMSIS und (leider auch) Cube-HAL werden auch automatisch eingebunden.
Schmeiße ich beides danach immer raus, und binde mit dann nur die CMSIS, 
wie schon oben erwähnt, aus dem CubeMX Archiv manuell ein.

von STM = (S)tudent (T)rifft (M)ikrocontroller (Gast)


Lesenswert?

Stefanus F. schrieb:
> Noch Fragen oder bist du am Lesen? :-)

Ich bin schön am Lesen. Vielen Dank für die vielen Infos. Damit habe ich 
jetzt nicht gerechnet. Da ist ja eine ganze Menge.

@Stefanus

Ist das deine Homepage? Wenn ja, hast du eine Menge Arbeit reingesteckt.

http://stefanfrings.de/stm32/index.html#cmsis

Danke für den Link :)

MfG

von temp (Gast)


Lesenswert?

Stefanus F. schrieb:
> Der schwierigere Part ist das Erstellen des Linker Scriptes, des
> Interrupt-Vektor Tabelle und des Startup-Codes in Assembler.

Es ist absolut unnötig den Startup-Code in Assembler zu schreiben. Auch 
wenn man das häufig antrifft, vor allem wenn es die IDEs wie Keil, 
Segger und Rowley mitbringen. Bei Atollic weiss ich es nicht. Aber ich 
will hier keine Unruhe stiften, gleich kommen wieder 20 Leute die 
behaupten man muss vom Startup nichts verstehen. Ist ja bei PIC und AVR 
schließlich auch so....

von Harry L. (mysth)


Lesenswert?

Wenn es dein Ziel ist, die Interna der MPU mit all ihren schmutzigen 
Details genau zu verstehen und Zeit keine Rolle spielt, mach es wie 
Stefan es beschrieben hat.

Wenn du eine konkrete Anwendung realisieren willst, und auch in 
vertretbarer Zeit Erfolgserlebnisse haben willst, nutz CubeMX und HAL!

Vor allem, wenn du dich nicht auf eine MCU-Familie (STM32F1xx, STM32F4xx 
usw.) beschränken, und das Rad jedes mal neu erfinden willst, nutz 
CubeMX!

Code, den du damit einmal geschrieben hast, kann man in den meisten 
Fällen nahezu 1:1 für alle Familienmitglieder nutzen.

Und laß dich von den leuten, die hier so vehement davon abraten nicht 
verrückt machen!

Die selben Leute schreiben meist im Nachsatz, daß sie es "kurz" damit 
versucht haben, und nicht klar gekommen sind...
-was der Bauer nicht kennt frisst er nicht-

Du fängst eh bei Null an, und da wird dir CubeMX schneller zum 
Erfolgserlebnis verhelfen.
Dann ist man auch wesentlich motivierter, sich mit den zahllosen Details 
zu beschäftigen, denn am Studium des umfangreichen Referenz-Manual führt 
auch mit CubeMX kein Weg vorbei.

Und nein!
Du musst keinen Startup-Code in Assembler, keine 
Interrupt-Vector-Tabellen, und auch kein Linker-Script von Hand 
codieren, so lange du nicht etwas sehr spezielles (eigenen Bootloader 
z.B.) damit machen willst.
Den Job erledigt CubeMX für dich.

Mit diesen Tutorials hast du nach max. 2h deine erste blinkende LED, und 
die grundlegenden Dinge gelernt, um mit deinem Projekt starten zu 
können:
https://www.youtube.com/channel/UCZ5tf8T8odmacEAOpw68guA

: Bearbeitet durch User
von temp (Gast)


Lesenswert?

Harry L. schrieb:
> Wenn du eine konkrete Anwendung realisieren willst, und auch in
> vertretbarer Zeit Erfolgserlebnisse haben willst, nutz CubeMX und HAL!
> .... langer Text

Genau. Und wenn dann die LED das erste mal blinkt kann man sich stolz 
auf die Schulter klopfen und sich freuen die Welt der µCs zu 
beherrschen. Am besten gleich bei einer Zeitarbeitsfirma anheuern und 
Airbagsteuerungen entwickeln...

Ich frage mich wozu jemand einen STM32F4 einsetzen will ohne auch nur 
annähernd zu wissen was da wie abläuft. Das ist so als wenn ein 
angehender Architekt eine Autobahnbrücke in Genua konstruieren will, und 
sich auch dazu in der Lage fühlt, weil er schon mal 3 Schaufeln Sand, 
eine Schaufel Zement und etwas Wasser zu sowas ähnlichen wie Beton 
zusammen gerührt hat.
Beim ersten Problem kommen dann hier die dämlichsten Fragen und man 
beschwert sich auch noch über die, die dann genervte Kommentare dazu 
ablassen. Es ist leider nicht wie auf dem PC wo es ein Betriebssystem 
gibt, dass einem im gewissen Umfang davon befreit den Unterbau zu 
verstehen. Das kann die HAL aber bei weiten nicht leisten, zumal sie 
auch noch absolut schlecht dokumentiert ist. Ohne das Manual vom 
Controller versteht man die HAL auch bloss nicht.

Im Nachbarthread beschert sich gerade einer, dass der die Klammerung in 
C nicht versteht und es doch so abartig kompliziert ist. Aber das 
scheint jetzt die Generation zu sein, die ein Leben lang als Prinz oder 
Prinzessin behandelt wurden, keinerlei Schranken kennen und glauben sie 
sind zu allem fähig.

von Steffen K. (botnico)


Lesenswert?

Die STM32 lassen sich alle über SWD programmieren. Die größeren auch 
über JTAG. Ich würde SWD nehmen. Jetzt brauchst du noch eine 
Programmier-Software, die kommt mit der Entwicklungsumgebung. Dieser 
Part ist relativ entfach. Wenn es dir nicht nur ums programmieren geht, 
sondern auch noch ums entwickeln, wird es etwas komplizierter.

von snow (Gast)


Lesenswert?

Wenn man tatsächlich verstehen will, wie der µC auf Registerebene 
funktioniert und den vielleicht auch noch mit Assembler programmieren 
will (Fängt man nicht so an? Haben wir zumindest gemacht), dann rate ich 
davon ab, mit den STMs anzufangen. Für die empfehle ich klar die HAL.
Wenn man tiefer gehen will, kann man ja immer noch den Source dafür 
anguggen oder auch über die LL-APIs gehen.

von soso... (Gast)


Lesenswert?

Dein Board hat den Programmer schon mit drauf (SWD).
Musst du an den richtigen USB anstecken, den ST-Treiber installieren 
lassen und fertig ist die Sache.
Eventuell noch Brücken richtig stecken, das wars dann.

Du hast dann einen vollwertigen Debugger. Der auch - mittels Stiftleiste 
- für deine eigenen Platinen taugt. Für ALLE Platinen mit STM32.

Und das für rund 10€.

Das ist DAS Killerfeatuere der STM32 für Bastler, und das sage ich als 
überzeugter PIC-Verwender.

von Alex D. (daum)


Lesenswert?

Harry L. schrieb:
> Vor allem, wenn du dich nicht auf eine MCU-Familie (STM32F1xx, STM32F4xx
> usw.) beschränken, und das Rad jedes mal neu erfinden willst, nutz
> CubeMX!
>
> Code, den du damit einmal geschrieben hast, kann man in den meisten
> Fällen nahezu 1:1 für alle Familienmitglieder nutzen.

Das gleiche gilt auch für Code auf Register-level. Da die Peripherals 
zwischen den Familien ziemlich gleich sind, zumindest die vorhandenen. 
Aber ich will CubeMX hier nicht schlecht reden, ich persönlich verwende 
es nicht, aber das liegt hauptsächlich daran, dass ich von AVR gekommen 
bin und dort auch immer direkt auf Register level gearbeitet habe.

Die startup files lasse ich mir zwar auch immer von SystemWorkbench 
erstellen, den HAL schmeiße ich aber raus.

Noch ein Tipp, falls plötzlich die Programmgröße einen riesen Sprung 
macht, verwende mit -specs=nano.specs in den linker flags die 
newlib-nano. Die braucht deutlich weniger flash als die vollständige 
newlib.

STM32 kann man auch ohne Probleme in c++ mit der standard template 
library (vector, array, usw.) verwenden. Nur die interrupts müssen so 
als extern "C" deklariert werden.

von Johannes S. (Gast)


Lesenswert?

Die Nucleos haben nicht nur die Debughardware drauf, sie melden sich 
beim USB anstecken auch als Massenspeicher an. Da ist üblicherweise ein 
Link zu https://os.mbed.com/ drauf und man kann ohne etwas zu 
installieren mit einem Online Compiler loslegen. Das fertige .bin wird 
heruntergeladen und auf das USB Laufwerk kopiert, fertig. Auf der 
Hardwareseite zu den Boards https://os.mbed.com/platforms/ ist für die 
Nucleos auch ein Video Tutorial zu finden.
Sehe gerade es ging um ein Discovery, aber auch die sind grösstenteils 
mbed enabled.

von W.S. (Gast)


Lesenswert?

STM = (S)tudent (T)rifft (M)ikrocontroller schrieb:
> Ich habe etwas AVR und PSoC5 Kenntnisse. Ich will halt den
> Einstieg in die STM Welt schaffen.

Setze dir nicht freiwillig so eine Scheuklappe auf.

Wenn du tatsächlich Erfahrungen mit den PSOC5 hast - also nicht bloß 
mal im Psocdesigner (oder wie diese IDE heißt) herumgedaddelt hast - 
dann hast du eigentlich auch ausreichende Erfahrungen für die 
ARM-Cortex-Chips. Eigentlich. Was mich stutzig macht ist, daß du hier so 
eine Frage stellst.

So, und was ist deiner Meinung nach der Einstieg in die STM-Welt? ST ist 
nur einer von mehreren Produzenten von Cortex-Controllern. Und die Chips 
der Anderen sind zum guten Teil schöner und besser als die STM32. Grund: 
Bei den STM32 trifft man noch immer einen großen Teil an Peripherie an, 
die nur 16 bittig ist. Klar, man kommt ja damit zurecht, aber echte 32 
Bit Peripherie ist an vielen Stellen einfach angenehmer.

Ich will dich hier nicht von den STM32 weglotsen, ich benutze von denen 
ja auch einige (weil die beim Chinesen so angenehm billig sind). Aber 
dir sage ich, daß du gut daran tust, auch die anderen Hersteller dir 
anzuschauen und dich besser NICHT allzu fest an ST anketten zu lassen. 
Das betrifft vor allem sowas wie Cube, HAL und sowas. Wer sich auf 
dieses ST-Zeugs einläßt und sich von dem eigentlichen Chip fernhält, hat 
schon den Fuß an der Kette von ST.

Also was brauchst du:
- eine Programmiermöglichkeit. So ein ST-Link ist nicht die einzige 
Wahl, es geht auch per eingebautem Bootlader, aber darüber kanst du 
nicht debuggen und das scheint mir bei allen Anfängern ein schier 
unüberwindliches Problem zu sein.
- eine Toolchain. Hakelig und an manchen Stellen echt problematisch, 
dafür aber kostenlos und ohne Codegrößenbegrenzung wäre der GCC. Nicht 
hakelig und unproblematisch und kostenlos, dafür aber auf 32K Code 
beschränkt wären der Keil und der IAR. Es gibt wohl noch andere, aber da 
sollen sich mal deren Benutzer zu Wort melden.
- die Dokumentation zum Chip, das Familien-Referenzmanual zum Chip, 
evtl. noch die CPU-Dokumentation von ARM dazu. Und das will zuvörderst 
gelesen sein.
- das Erlernen, wie du deine Toolchain selber aufrufst, um vom 
Quellcode zum Hexfile zu kommen.

Das war's, alles Andere ist eher fakultativ.

W.S.

von Til S. (Firma: SEGGER) (til_s)


Lesenswert?

W.S. schrieb:
> Es gibt wohl noch andere, aber da
> sollen sich mal deren Benutzer zu Wort melden.

Dürfen sich auch die Hersteller zu Wort melden? ;-)
Wenn es GCC sein soll dann könnte Embedded Studio eine gute Wahl sein:
https://www.segger.com/products/development-tools/embedded-studio/

Genauso einfach zu bedienen wir IAR und Keil aber deutlich günstiger 
bzw. für nicht kommerziell komplett kostenlos. Man braucht natürlich 
einen J-Link:
https://www.segger.com/products/debug-probes/j-link/

Oder man flasht den onboard ST-Link auf einem Discovey/Nucleo Board um:
https://www.segger.com/products/debug-probes/j-link/models/other-j-links/st-link-on-board/

von Upp Sala (Gast)


Lesenswert?

Til S. schrieb:
> Oder man flasht den onboard ST-Link auf einem Discovey/Nucleo Board um:

Das haben wir doch schon durchgekaut dass die Discovery Boards
einen ST-Link v2.0 repräsentieren (und nicht v2.1) und damit
nicht "um-flash-bar" sind.

Nur auf den Nucleo Boards funktioniert es.

Als Mitarbeiter von Segger solltest du dich dieser Correctness
schon unterwerfen.

von STM32 (Gast)


Lesenswert?

Upp Sala schrieb:
> Das haben wir doch schon durchgekaut dass die Discovery Boards
> einen ST-Link v2.0 repräsentieren (und nicht v2.1) und damit
> nicht "um-flash-bar" sind.

Bitte erst mal ausprobieren, bevor Du solche Aussagen rtiffst,. Es 
klappt nämlich

von temp (Gast)


Angehängte Dateien:

Lesenswert?

Upp Sala schrieb:
> Das haben wir doch schon durchgekaut dass die Discovery Boards
> einen ST-Link v2.0 repräsentieren (und nicht v2.1) und damit
> nicht "um-flash-bar" sind.

Wo hast du diese Weisheit her? Ich habe hier ein stm32f4-discovery 
welches zum j-link geflasht wurde. Das stm32F334-discovery geht auch.

von Til S. (Firma: SEGGER) (til_s)


Lesenswert?

Upp Sala schrieb:
> Das haben wir doch schon durchgekaut dass die Discovery Boards
> einen ST-Link v2.0 repräsentieren (und nicht v2.1) und damit
> nicht "um-flash-bar" sind.
>
> Nur auf den Nucleo Boards funktioniert es.
>

Schau mal bitte hier ganz unten:
https://www.segger.com/products/debug-probes/j-link/models/other-j-links/st-link-on-board/

Dort findest du eine Liste von Boards, mit denen das Umflashen 
funktioniert (bzw. die wir getestet haben, geht wahrscheinlich mit noch 
mehr Boards). Da sind auch viele Discovery Boards dabei.

> Als Mitarbeiter von Segger solltest du dich dieser Correctness
> schon unterwerfen.
Nö, unterwerfen ist nicht so mein Ding ;-).
Aber klar, ich kann mich natürlich auch mal vertun.

von Framlin (wolfgang_e34)


Lesenswert?

Mein Erfahrung als Anfänger zum Thema CubeMX vs. Register-Coden (CMSIS):

Mich hat CubeMX, bzw. der erzeugte QuellCode erstmal hauptsächlich 
verwirrt und mental erschlagen.

Ich hab mich dann darauf beschränkt, die Register direkt zu befüllen und 
auszulesen und mich so Schritt für Schritt an den uC (STM32F411RE 
nucleo-64) rangetastet.

Nachdem ich nun (nach einigen Wochen) so weit gekommen bin, dass ich 
LEDs blinken lassen, via I2C Sensorwerte einlesen und mittels PWM Servos 
ansteuern kann, beginne ich ganz langsam zu erahnen, was es mit HAL, 
bzw. dem von CubeMX erzeugten Code auf sich haben könnte.

Bei mir kommt allerdings einschränkend dazu,, dass ich die "fixe Idee" 
habe, dass ich den uC mit C++ programmieren möchte. Da eignet sich 
CubeMX eh nicht so recht, weil es nur C-Code zu erzeugen scheint.

Ich benutze Eclipse mit dem ARM-MCU-plugin bzw. die ARM-GCC-Toolchain. 
Das funktioniert aus meiner Sicht unproblematisch.

von Harry L. (mysth)


Lesenswert?

Wolfgang E. schrieb:
> Ich benutze Eclipse mit dem ARM-MCU-plugin bzw. die ARM-GCC-Toolchain.
> Das funktioniert aus meiner Sicht unproblematisch.

Der generierte Code ist C++-safe und kann problemlos mit eigenen 
C++-Modulen verlinkt werden.

Alle HAL-Header beginnen mit:
1
#ifdef __cplusplus
2
 extern "C" {
3
#endif

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Wolfgang E. schrieb:
> Mich hat CubeMX, bzw. der erzeugte QuellCode erstmal hauptsächlich
> verwirrt und mental erschlagen.
>
> Ich hab mich dann darauf beschränkt, die Register direkt zu befüllen und
> auszulesen und mich so Schritt für Schritt an den uC (STM32F411RE
> nucleo-64) rangetastet.

 Ja, sure, das ist besonders für Anfänger geeignet.
 Da kann man so viel bei der Init-Routinen falsch machen bzw.
 vergessen, dass es einfach lachhaft ist, den Anfängern von CubeMX
 abzuraten.

 Irgendwann mal später, wenn man sich mit STM bekannt gemacht hat,
 kann man von Cube weggehen, aber warum gleich am Anfang ?

 Lass dir doch von Cube zeigen, was du alles bei der Initialisation
 machen musst, nachher ein Blick ins DaBla um zu verstehen warum,
 danach ein ' aha, so geht das also ' usw.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Marc V. schrieb:
>  Irgendwann mal später, wenn man sich mit STM bekannt gemacht hat,
>  kann man von Cube weggehen, aber warum gleich am Anfang ?

Ich meide den generierten Code, weil ich ihn noch nicht durchblicke. Er 
verleitet mich dazu, mal eben schnell etwas hinzusauen bis es irgendwie 
funktioniert und dann nicht weiter zu lernen.

Auch ich befasse mich lieber mit den Registern und dem Referenzhandbuch. 
Damit fühle ich mich sicherer. Der Zeitaufwand und die Anzahl der 
Fehlschläge ist für mich kein Hindernis, da es nur ein Hobby ist.

von Framlin (wolfgang_e34)


Lesenswert?

Harry L. schrieb:
> Der generierte Code ist C++-safe und kann problemlos mit eigenen
> C++-Modulen verlinkt werden.

Ja klar. Was ich meinte, ist der Anwendungs-Code, den CubeMX generiert.
Das scheint mir C zu sein. D.h. wenn ich das "out of the box" so 
verwenden möchte, wie es von CubeMX generiert wird, dann muss ich C 
programmieren (und an den markierten Stellen meinen Code einfügen) und 
eine der IDEs verwenden, für die CubeMX Code erzeugt.

Natürlich kann man theoretisch auch generierte Code-Teile nehmen und in 
eigenen C++-Code integrieren. Für mich war das aber nicht praktikabel, 
weil ich zu wenig verstanden hab, was da genau generiert wird und 
welchen Sinn das alles hat.

Wie geschrieben, nachdem ich nun schon Erfahrungen mit meinem eigenen 
Vorgehen gesammelt hab, beginne ich so langsam zu erahnen, was man sich 
bei ST eventuell gedacht haben könnte, als man den HAL designed und 
implementiert hat.

Es kommt eben auch immer darauf an, warum man so einen uC programmiert 
und welches Vorwissen man hat.

Ich mach das, um die Innereien eines uC kennen zu lernen und eine 
Spielwiese für "embedded C++" zu haben. Ich will eben nicht den HAL 
lernen oder möglichst schell eine LED zum Blinken bringen.

Für solche pragmatischen Anforderungen hab ich meinen Brotjob ;-)

von Harry L. (mysth)


Lesenswert?

Mein Tip:
Stell CubeMX so ein, daß für die Funktionen separate .c- und .h-Dateien 
generiert werden.
Das macht die Sache übersichtlicher.

von Framlin (wolfgang_e34)


Lesenswert?

@Marc V.
Für mich ist es genau, wie Stafanus F. geschrieben hat.
Für mich wird eben umgekehrt ein Schuh draus.

Den ganzen Initialisierungkram übernimmt meine IDE. Das macht Eclipse, 
bzw. das ARM-plugin für mich.
Da leg ich fest, dass ich Code für nen STM32F411RE schreiben will und 
die IDE erledigt den Rest.

Alles andere mach ich erst mal lieber selbst.
Ich habs ja zuallererst mit CubeMX probiert. Das schien mir erst mal das 
sinnvollste zu sein.
Dann hab ich allerdings Stunden und Tage damit verbracht, das mit meiner 
Entwicklungsumgebung zu "verheiraten". Ich musste C programmieren wenn 
ich reibungslos zwischen CubeMX hin- und herwechseln wollte und ich bin 
in dem erzeugten Code und den verschiedenen Stellen, an denen ich meinen 
eigenen Code einfügen sollte, ohne dass ich wirklich verstanden hab, was 
da alles passiert, schlicht untergegangen.

Seit ich die Register selber setze und auslese und weiß, was wo 
passiert, kann ich viel gezielter untersuchen, warum es nicht so läuft, 
wie ich mir das vorgestellt hab und komm wesentlich schneller zu 
Erfolgserlebnissen, als das mit CubeMX der Fall war .... auch wenn die 
CubeMX-Evangelisten mir immer das Gegenteil erzählen ... ;)

von Framlin (wolfgang_e34)


Lesenswert?

Harry L. schrieb:
> Mein Tip:
> Stell CubeMX so ein, daß für die Funktionen separate .c- und .h-Dateien
> generiert werden.
> Das macht die Sache übersichtlicher.

hab ich gemacht, ist auch tatsächlich übersichtlicher, aber für mich 
eben nicht übersichtlich genug ...

von Harry L. (mysth)


Lesenswert?

Man kann sich das leben auch selber schwer machen....

Warum benutzt du nicht Atollic?
Das ist auch Eclipse, aber CubeMX-Projekte funktionieren uot-of-the-box.

von Stefan F. (Gast)


Lesenswert?

Harry L. schrieb:
> Warum benutzt du nicht Atollic?

Mich stört bei dem Programm, dass es beim erzeugen neuer Projekte immer 
die alte StdPeriphLib einbindet. Ich möchte aber bare-metal Projekte, wo 
nur der ARM Kern initialisiert wird. Das erledigen normalerweise ein 
paar wenige Zeilen Assembler Code.

Ansonsten ist das Atollic TrueStudio sicher nicht übel.

von Harry L. (mysth)


Lesenswert?

Stefanus F. schrieb:
> Mich stört bei dem Programm, dass es beim erzeugen neuer Projekte immer
> die alte StdPeriphLib einbindet.

Wie kommst du denn darauf?

Das ist Blödsinn!

Was eingebunden wird, als Schicht unter HAL ist CMSIS - sonst nichts!

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Harry L. schrieb:
> Stefanus F. schrieb:
>> Mich stört bei dem Programm, dass es beim erzeugen neuer Projekte
>> immer die alte StdPeriphLib einbindet.
> Das ist Blödsinn!

Helfe mir mal bitte. Welche Bedienfolge erzeugt ein Projekt ohne HAL und 
ohne StdPeriphLib? Ich will nur CMSIS drin haben (oder gar keine 
Libraries).

von Harry L. (mysth)


Lesenswert?

Stefanus F. schrieb:
> Helfe mir mal bitte. Welche Bedienfolge erzeugt ein Projekt ohne HAL und
> ohne StdPeriphLib? Ich will nur CMSIS drin haben (oder gar keine
> Libraries).

File->New->C Project->CMSIS C/C++-Project

von Christopher J. (christopher_j23)


Lesenswert?

Harry L. schrieb:
> File->New->C Project->CMSIS C/C++-Project

Bei "Select Device" ist bei mir die Liste leer. Weiß nicht ob es ein Bug 
ist...

von Harry L. (mysth)


Lesenswert?

Christopher J. schrieb:
> Harry L. schrieb:
>> File->New->C Project->CMSIS C/C++-Project
>
> Bei "Select Device" ist bei mir die Liste leer. Weiß nicht ob es ein Bug
> ist...
Ja, und scheinbar nicht der Einzige (zumindest unter Linux)
Da wird mir als Target exe angezeigt.

Ich muß aber auch gestehen, daß ich das bisher nie genutzt hab, aber 
evtl. muß man dazu weitere Komponenten installieren.

von Stefan F. (Gast)


Lesenswert?

Bei mir ist die Liste auch leer.

von Harry L. (mysth)


Lesenswert?

Die Lösung:
File->New->C Project->Embedded C Projekt
In den folgenden Dialogen alles abwählen, was man nicht braucht.

von Christopher J. (christopher_j23)


Lesenswert?

HAL bzw. StdPeriphLib kann man bei Atollic nicht abwählen. Das ist schon 
so wie Stefan sagt. Bei SW4STM32 kann man wählen ob man HAL oder 
PeriphLib oder nichts von beidem möchte.

Beitrag #5545957 wurde von einem Moderator gelöscht.
von Harry L. (mysth)


Lesenswert?

Christopher J. schrieb:
> HAL bzw. StdPeriphLib kann man bei Atollic nicht abwählen. Das ist schon
> so wie Stefan sagt. Bei SW4STM32 kann man wählen ob man HAL oder
> PeriphLib oder nichts von beidem möchte.

Das stimmt so nicht!

Es geht auch ganz Ohne.

Die StdPeriph-Header werden zwar vom Template ins Projekt kopiert, aber 
nicht genutzt.

Ausserdem kann man genauso bei 0 starten.

von Framlin (wolfgang_e34)


Lesenswert?

Harry L. schrieb:
> Man kann sich das leben auch selber schwer machen....
>
> Warum benutzt du nicht Atollic?
> Das ist auch Eclipse, aber CubeMX-Projekte funktionieren uot-of-the-box.

Weil ich auch noch was anderes mach, als STM32 zu programmieren.
Außerdem gibt es Atollic nicht für Mac OSX.

Das ist genau ein Punkt, der mich an dem ganzen „Paket“ stört.

Ich möchte mir nicht vorschreiben lassen, mit welchem Betriebssystem und 
welchen Tools ich einen Mikroprozessor programmiere. Ich will mir das 
selbst aussuchen. Wenn ich Lust hab, dann will ich das auch auf nem 
Raspberry Pi mit nem vi machen können.

Das hat mit „sich das Leben selbst schwer machen“ IMHO nichts zu tun.
Auch da wird für mich umgekehrt ein Schuh draus. Schon mittelfristig 
macht sich das Leben derjenige selber schwer, der sich von den 
proprietären Produkten einzelner Hersteller abhängig macht.

Und abgesehen davon, auch wenn Du es Dir nicht vorstellen kannst: Für 
mich sind CubeMX und HAL eben gerade nicht einfacher. Für mich ist es 
kompliziert und verwirrend und brauch deutlich länger, zu dem zu kommen, 
was ich erreichen will (falls mir das überhaupt gelingt).

Warum sollte ich mir das Leben selbst schwer machen und mich wochenlang 
mit einem undurchsichtigen Wirrwar rumärgern, das mir eine bestimmte 
Entwicklungsumgebung aufzwingt, wenn ich ohne diesen Hemmschuh innerhalb 
von ein paar Tagen mit den Tools meiner Wahl zu den gewünschten 
Ergebnissen komme?

von Stefan F. (Gast)


Lesenswert?

Ich habe gerade ein Minimalprojekt zwangsweise mit StdPeriphLib 
erstellt. Da hat er aber eine ganze Menge davon auch benutzt, dass 
müsste ich erst mühsam wieder heraus fummeln.

Gefällt mir so nicht, das haben die Leute von der System Workbench 
schöner gelöst.

von Christopher J. (christopher_j23)


Lesenswert?

Stefanus F. schrieb:
> Gefällt mir so nicht, das haben die Leute von der System Workbench
> schöner gelöst.

Sehe ich auch so. Außerdem finde ich es ein wenig unglücklich, dass bei 
manchen Serien die StdPeriphLib und bei anderen wiederum HAL genutzt 
wird. Wenn schon, dann sollen sie doch einfach überall die HAL-Libs 
reinhauen.

An anderer Stelle (z.B. fault-Analyzer) gefällt mir Atollic aber ganz 
gut.

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.