Forum: Mikrocontroller und Digitale Elektronik (ST) ARM Programmierung - HAL, SPL, CMSIS


von Raphael G. (steggesepp)


Lesenswert?

Guten Abend zusammen,
Ich bin noch einsteiger in der ARM-Szene und habe nun wirklich recht 
lange mich versucht in dem Wirrwar an Libraries zurecht zu finden.

Gerne hätte ich eure Meinung dazu, welche Libraries ihr verwendet. Es 
gibt so viele Möglichkeiten anzufangen dass mich das erstmal leicht 
überfordert. Ich weiß zwar, was ich einstellen möchte, aber nicht über 
welchen Weg ich das am Besten vornehmen soll (z.B. SPI einstellen, 
aktivieren, nutzen..). Die HAL und die SPL bieten dazu natürlich 
funktionen. Aber nicht alles ist irgendwie gut dokumentiert (Oder ich 
kenne die richtige documentation dazu nicht).

In meinem Fall habe ich das STM32F4 Discovery Board und habe die 
Möglichkeit, die Discovery Firmware einzusetzten in der die Standard 
Peripheral Libraries vorhanden sind, welche wohl auch nichtmehr 
weiterentwickelt werden. Zudem hab ich die Möglichkeit die CubeF4 
Libraries zu nutzen, in der die HAL aufzufinden ist, welche wohl noch 
unterstützt wird. Irgendwie darin vergraben ist dann auch die CMSIS, 
wobei diese wohl nicht direkt eine Librarie ist sondern eher 
Registerdefinitionen beinhaltet und keine Abstraktion in dem Sinne zur 
Verfügung stellt, schnell mal einen GPIO Port einzustellen (Was dann ja 
die HAL / SPL übernehmen würde).

Einem neueinsteiger machen diese scheinbaren "vereinfachungen" eher 
erstmal Probleme. Was empfiehlt ihr mir dabei?

Ich habe zuvor ein paar Atmels programmiert und dabei die Register alle 
immer selbst gesetzt.

Danke schonmal fürs Lesen :).

von Gerd E. (robberknight)


Lesenswert?

Raphael G. schrieb:
> Einem neueinsteiger machen diese scheinbaren "vereinfachungen" eher
> erstmal Probleme.

...nicht nur den Neueinsteigern.

Der ganz große Nachteil ist, daß Du jetzt plötzlich 2 Dokumentationen 
lesen und verstehen musst: die des µC und die des "Abstraktions"layers. 
Das "Abstraktion" setze ich hier ganz bewusst in Anführungszeichen, weil 
das, was das ST-HAL und Cube machen, eigentlich keine wirkliche 
Abstraktionstiefe hat und einem nicht erspart die µC-Dokumentation genau 
zu lesen.

Außerdem kommen dann noch Bugs in HAL und Cube hinzu...

> Ich habe zuvor ein paar Atmels programmiert und dabei die Register alle
> immer selbst gesetzt.

Niemand hindert Dich daran das bei den STM32 genauso zu machen!

Falls Du das nicht möchtest, würde ich mir als Alternative mal einen 
echten HAL-Layer anschauen, der den Namen auch verdient. Ich mag da das 
ChibiOS ganz gerne:
http://chibios.org/dokuwiki/doku.php

Da dort im HAL nicht alles umgesetzt ist was der µC kann, kombiniere ich 
das bei Bedarf mit ein paar Funktionen, die die nötigen Register direkt 
setzen.

Aber auch da sollte man die nötigen Kapitel im Datenblatt, Reference 
Manual, Programming Manual und Errata Sheet von dem verwendeten STM32 
gut kennen. Sonst stolpert man früher oder später.

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


Lesenswert?

Raphael G. schrieb:
> Einem neueinsteiger machen diese scheinbaren "vereinfachungen" eher
> erstmal Probleme. Was empfiehlt ihr mir dabei?

 Auf jeden Fall mit CubeMX anfangen.

 Grafische Oberfläche, es wird alles angezeigt was der ausgewählte
 Typ hat, ev. Konflikte werden sofort angezeigt, etc...

 Projekte für EWARM, Truestudio und andere werden automatisch erstellt.

 Als Anfänger (und auch als Fortgeschritener) kann man ganz einfach
 nicht alles über alle Ports, Timers usw. wissen und wenn man zuerst
 mit Reference Manual, Programming Manual und ähnlichem anfängt, hat
 man ganz schnell die Lust und Überblick verloren.

 Um das Lesen der ganzen Manuals wirst du sowieso nicht rumkommen,
 aber es muss ja nicht gleich am Anfang sein...
 Erst mal ein paar Erfolgserlebnisse, danach geht alles leichter.

: Bearbeitet durch User
von Nop (Gast)


Lesenswert?

Marc V. schrieb:

> (und auch als Fortgeschritener) kann man ganz einfach
>  nicht alles über alle Ports, Timers usw. wissen und wenn man zuerst
>  mit Reference Manual, Programming Manual und ähnlichem anfängt, hat
>  man ganz schnell die Lust und Überblick verloren.

Äh? Ohne das verallgemeinern zu wollen, aber ich persönlich sehe das 
anders. Mir machen solche komischen Graphiktools wie CubeMX eher Sorgen, 
weil ich nicht nachvollziehen kann, was da gemacht wird.

Von dem vendor-lock-in, der ja der strategische Hauptzweck dieses 
Danaergeschenkes ist, mal ganz zu schweigen.

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


Lesenswert?

Nop schrieb:
> anders. Mir machen solche komischen Graphiktools wie CubeMX eher Sorgen,
> weil ich nicht nachvollziehen kann, was da gemacht wird.

 Tja, ich sehe das anders.

 Cube sorgt dafür, dass nichts vergessen oder falsch eingestellt wird.
 HAL stellt nur die entsprechenden funktionen bereit.
 Alles andere ist ja dasselbe.

 Also, Grundgerüst mit Cube, Feineinstellungen von Hand...

von Nop (Gast)


Lesenswert?

Marc V. schrieb:

> Cube sorgt dafür, dass nichts vergessen oder falsch eingestellt wird.

Für die Kundschaft mit solchen "Sorgen" gibt's Arduino, da ist diese 
Philosophie konsequent umgesetzt. Keine erschreckenden Datenbücher 
lesen, einfach losprogrammieren.

> HAL stellt nur die entsprechenden funktionen bereit.

Von der halte ich auch nichts.

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


Lesenswert?

Nop schrieb:
> Für die Kundschaft mit solchen "Sorgen" gibt's Arduino, da ist diese
> Philosophie konsequent umgesetzt. Keine erschreckenden Datenbücher

 Ein Vergleich zwischen Arduino und STM32 hinkt aber gewaltig.
 Etwa wie Fahrrad und Rennmotorrad oder Auto und Flugzeug, nach dem
 Motto: ich kann Auto ohne Checkbuch fahren, also wird es auch mit
 Flugzeug klappen, sind ja nur ein paar Schalter und Instrumente mehr...

 Und ich will nicht erst stundenlang Datenbücher wälzen, um endlich
 rauszufinden, dass sich irgendein Pin mit irgendeinem anderem Pin
 beisst und diesen praktisch ausser Funktion setzt.
 Und im Endeffekt will ich ganz einfach nicht immer wieder die selben
 150 Zeilen stumpfen Code schreiben, wenn ich das Gleiche mit einem
 Mausklick erreichen kann, ohne irgendetwas zu vergessen oder falsch
 einzustellen.

: Bearbeitet durch User
von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Ich bin vor ein paar Jahren ganz frisch in C/C++ und gleichzeitig in die 
µC-Programmierung eingestiegen. Habe mit SPL angefangen, dann zu HAL 
gewechselt um dann festzustellen, dass nur eine eigene Lib meine 
Forderungen erfüllt.
Für mich ist folgendes in Erinnerung geblieben:
- SPL reicht für einfache Dinge aus
- HAL hat ein paar recht nette defines
- Fall man mehr machen will, als einfach nur ein paar IOs wackeln 
lassen, muss man das ReferenceManual und das Datasheet lesen
- SPL sowie HAL setzen an manchen Stellen Register auf 0. Das macht dann 
richtig Spaß den Fehler zu finden :) Deshalb muss man so oder so die 
ST-Funktionen durchgehen

Ich habe mir aus den Libs nur Anregungen für eine eigene Lib geholt.

von Raphael G. (steggesepp)


Lesenswert?

Danke schonmal für eure Meinungen. Für all diejenigen die gerne über 
Grundsatzfragen diskutieren soll das hier aber kein Spielplatz werden 
:). Ich habe ja explizit nach persönlichen Meinungen gefragt und möchte 
nicht, dass wiederum andere darin herumstochern, so kommt man 
immerwieder schnell vom eigentlichen Thema ab und das Nachschlagen für 
andere wird mehr und mehr zur Qual.

Es ist ja auch wiederum interessant zu sehen, dass alleine bei den paar 
Beiträgen schon starke unterschiede in der Herangehensweise vorliegen.

ChibiOS, CubeMX, .. eigene Libs (inspiriert von HAL und SPL). Ich werde 
mir natürlich alles genauer anschauen.

Ich bin gespannt ob noch weitere Herangehensweisen bzw. Empfehlungen von 
euch hereinprasseln! Ich habe auch schon irgendwo hier gelesen, dass 
vereinzelte nur den "core" nutzen (Ich denke den CMSIS core? Also 
letztendlich nur die Registerdefinitionen nutzen?) und darauf alles 
selbst aufbauen (finde den Beitrag nichtmehr).

von O. H. (ohagendorf)


Lesenswert?

In diesem Zusammenhang kann man auch mbed bzw. mbed OS erwähnen. Als 
Einstieg sehr gut geeignet, vollständig Open Source, die Eignung für 
komplexere Anwendungen: kommt darauf an.
STM32Cube ist integriert und kann auch parallel genutzt werden, wenn man 
weiß, was man tut.
Das F4 Discovery wird allerdings nicht von der Online IDE unterstützt. 
Nutzt man aber die offline tools, ist es voll benutzbar. Die Doku zum 
mbed cli ist recht brauchbar.
Nicht unerwähnt sollte bleiben, dass eine weitere Software Schicht auch 
weitere Bugs hinzufügen kann. Allerdings wird sehr intensiv von ARM und 
etlichen herstellerspezifischen Gruppen daran gearbeit und gemeldete 
Bugs werden recht zügig gefixt.

von Sebastian K. (sek)


Lesenswert?

> Ich bin gespannt ob noch weitere Herangehensweisen bzw. Empfehlungen von
> euch hereinprasseln! Ich habe auch schon irgendwo hier gelesen, dass
> vereinzelte nur den "core" nutzen (Ich denke den CMSIS core? Also
> letztendlich nur die Registerdefinitionen nutzen?) und darauf alles
> selbst aufbauen (finde den Beitrag nichtmehr).

Dazu zähle ich mich :-)

Die SPL verleitet meiner Meinung dazu zu glauben, die Software von der 
Hardware abstrahieren zu können. Dem ist aber nicht so. Wie bereits 
weiter oben gesagt wurde, muss man beim Einsatz der SPL ein ähnliches 
Verständnis der Hardware haben wie ohne SPL. Mit dem Unterschied, dass 
man nun auch noch die Doku für die SPL studieren kann.

Zudem kapseln eine Vielzahl von SPL Routinen Berechnungen und 
Registerzuweisungen, die für die eigentliche Programmausführung gar 
nicht nötig sind. Das macht den Code größer und langsamer. Den einzigen 
Vorteil den ich in der SPL sehe, ist die Kapselung diverser Operationen 
in benamten Funktionen. Das bringt automatisch etwas Codedokumentation 
mit sich.

Ein Tool was ich gerne benutze/benutz habe ist das Excel basierte 
ClockConfiguration Tool. Das war einfach zu benutzen und hat den 
Initialiserungscode für den gesamten Clock-Tree generiert. Dieses Tool 
wird seit CubeMX aber nicht mehr weiterentwickelt.

Womit wir bei CubeMX sind. Lange habe ich mir ein grafisches Tool für 
die Pinzuordnung gewünscht. Das macht CubeMX für mich interessant, 
allerdings nur zu grafischen Dokumentationszwecken bei der Pinzuordnung. 
Da CubeMX selbst wieder SPL und HAL Code generiert hört der Workflow in 
CubeMX damit auch schon auf. Ausnahme bildet hier einzig noch der 
zwangsweise Umstieg vom ClockConfiguration Tool auf CubeMX. Das Clock 
Setup führe ich wie bei der Pinzuordnung auch wieder aus 
Dokumentationsgründen grafisch durch und übertrage den generierten Code 
dann wieder in nicht SPL basierten Code.

Ich möchte die SPL oder CubeMX nicht schlecht reden, beides ist gut und 
schön gemacht. Summa summarum bringt es mir als Embedded Entwickler 
jedoch in Bezug auf Codegröße und Effizienz recht wenig.
Sehr gut eignet sich meiner Meinung nach jedoch CubeMX für kleine 
schnelle Projekte und Einsteiger in die Materie, um ein erstes 
Grundgerüst zu erhalten.

von W.S. (Gast)


Lesenswert?

Raphael G. schrieb:
> Ich bin noch einsteiger in der ARM-Szene und habe nun wirklich recht
> lange mich versucht in dem Wirrwar an Libraries zurecht zu finden.
>
> Gerne hätte ich eure Meinung dazu, welche Libraries ihr verwendet.

Nur kurz zu sagen, man sei "Einsteiger", ist ein bissel wenig. Die Leute 
hier versuchen ja, zu helfen (ein jeder auf seine Art). Aber dazu ist es 
nötig, etwas von deinem tatsächlichen Vorwissen zu kennen.

so. Ich verwende überhaupt keine von anderen vorgefertigten 
Bibliotheken. Natürlich bin ich schon einige Jahrzehnte in der Branche 
und habe deshalb mein eigenes persönliches Portfolio. Das besteht nur 
zum kleineren Teil aus Quellcodes, zum größeren Teil hingegen aus 
Erfahrungen und dem Wissen, wie man an dies und das herangeht oder 
lieber die Finger davon läßt.

Aber Erfahrungen sind keine Handelsware.

Ich kann dir aber einen Rat geben, sofern du selbigen überhaupt haben 
willst. Ich mach's mal an einem Beispiel fest, wie ich bislang an 
sowas herangegangen bin:

- zuerst das Datenblatt des konkreten Chips gelesen, dabei mir 
angesehen, was der so alles kann, ob mir das gefällt, ob es für meim 
Vorhaben ausreicht.

- dann bei den üblichen Verdächtigen (RS, Farnell und Konsorten) 
nachgeschaut, wie die Teile denn so im Preis liegen. Wenn da kein K.O. 
aufkommt, geht es weiter.

- Referenzmanual durchgeschaut, also erstmal überflogen. Dabei 
festgestellt, ob mir der Stil dieses Manuals zusagt. Ich sag's mal so: 
Ein Chip kann rein technisch vom Silizium her so grandios sein wie er 
will, wenn die zugehörige Dokumentation jedoch Scheisse ist und einem 
nicht das erklärt, was man zum Einsatz des Chips erfahren muß, dann ist 
der Chip insgesamt eben auch Mist.

- Referenzmanual nach den Interrupts durchgesehen und den Startupcode in 
Assembler für diesen Chip geschrieben. Natürlich habe ich da meine 
Vorlagen, denn ich mache sowas ja nicht zum ersten Mal. Das geht also 
ganz leicht über die Bühne.

- Referenzmanual wieder durchgesehen, diesmal der Reihe nach alle 
aufgeführten Hardware-Register per Copy&Paste in eine "chipname.h" 
geeignet kopiert, so daß ich später drauf zugreifen kann. Ja, auch ich 
mache manchmal Copy&Paste ... Wenn es ein ARM-Cortex ist, dann nehme ich 
auch die Definitionen von ARM her, die zum betreffenden Core gehören, 
was nötig ist für Timertick, FPU freischalten, NVIC und so.

Normalerweise hat man nach dem genannten Procedere durchaus einen 
gewissen Überblick darüber, was der Chip so kann und wie man mit ihm im 
Allgemeinen umgeht. Deshalb kommt jetzt:

- Eagle anwerfen, Bibliotheks-Element für diesen Chip anfertigen. Man 
muß ihn ja auch in eine Schaltung und auf ne LP kriegen. Das ist hier 
auch zur Entspannung, denn immer nur in SW herumhampeln nervt auf Dauer. 
Das geht jetzt aber weiter:

- Eine Konfigurations-Quelle schreiben. Zu allererst will man ja die 
Ports sinnvoll konfigurieren, die benötigte Peripherie einschalten und 
den Takt aufsetzen. Das Konfigurieren der Ports ist zumeist sehr 
chipabhängig - bei manchen geht es angenehm leicht, bei anderen ist es 
ein Zirkus. Gleiches gilt für das Aufsetzen des Taktes und der 
eventuellen Waitstates.

- Einen im eigenen Portfolio vorhandenen lowlevel-Treiber für den/die 
serielle(n) Port(s) auf den Chip anpassen

- ne erste main.c schreiben und den Chip programmieren. Da sollte 
normalerweise das erste Lebenszeichen kommen.

Ab da hat man ne Basis für das eigentliche Projekt.

W.S.

von Raphael G. (steggesepp)


Lesenswert?

Um meine Vorkentnisse zu konkretisieren:
Ich habe zwar Mechatronik studiert, jedoch kommt die Embedded Welt 
(trotz zwei belegter Embedded Systems Wahlfächer) recht kurz. Ich habe 
also einen allgemeinen grundlegenden Überblick wie Mikrocontroller 
funktionieren, auch Assember in dessen Grundzügen gelernt (C sollte ich 
intus haben :) ), jedoch keineswegs eine praktische 'Routine'darin - ARM 
wurde nur mit SPL oder HAL genutzt, bei denen man letztendlich auf vom 
Prof zur Verfügung gestellten Beispiele zugriff hatte und die einfach 
nur abändern musste (totaler quatsch meiner Meinung nach, da es nie 
wirklich low-level ging).

Privat habe ich ein paar kleine Atmel-Projekte realisiert, nichts 
kompliziertes aber dennoch sehr lehrreich in bezug auf lesen von 
Dokumentationen und setzten von Registern etc. Aufgrund meines Studiums 
habe ich eben das Discovery STM32F4 board mir gekauft und ich werde 
dieses Board weiternutzen um mich weiter einzuarbeiten, da mir das 
Studium auch viel zu wenig geboten hat.

@W.S.: Ich nutze aktuell ein fertiges Board, ich plane also keine eigene 
Platine aber danke für die Beschreibung deines vorgehens :).

von W.S. (Gast)


Lesenswert?

Wenn du die Zeit hast, dann geh übernächste Wochr zur Embedded nach 
Nürnberg. Tickets gibt es umsonst, wenn man sich vorher per Internet 
anmeldet.

Aber vergiß nicht, dir ein paar Visitenkarten einzustecken. IST 
WICHTIGST!!

Gerade als junger Bursche hat man da ne gute Gelegenheit, nicht nur 
Informationen, sondern auch  hie und da ein Stück Hardware zu ergattern. 
Wer nebenher jobben muß, um sein Studium zu finanzieren, wird das zu 
schätzen wissen. Aber das Zahlungsmittel ist die Visitenkarte. Vergiß 
das nicht.

Ansonsten habe ich so einiges gegen die diversen Eval- und 
Discovery-Boards. Die sind zumeist eben nur dazu da, den etwaigen Kunden 
an die jeweilige Firma zu binden - mal ganz generell gesagt. Eine echte 
gute Basis für Eigen-Entwicklungen sind sie nicht.

Guck dich stattdessen bei Ebay um, die Chinesen lieben den STM32F103... 
und bieten auch billige Minimal-Boards damit an. Sowas ist weitaus 
besser für dich, denn diese Boards haben so ziemlich alle Pins auf 
Steckkontakte geführt, so daß man so einen Modul auch auf eine 
selbstgefrickelte gröbliche Leiterplatte setzen kann und so zumindest 
einige eigene Projekte damit machen kann. Ich will jetzt keine 
übertriebene Werbung für die STM32F103xx machen, denn es gibt bessere 
Chips, aber für Feld-Wald-Wiese sind die Dinger recht brauchbar.

So, noch ein Wort zu sowas wie ST-Lib, HAL, Cube und Konsorten: Ich 
halte davon ganz und gar nichts, weil all dieses Zeugs eben keinerlei 
echte Hardware-Abstraktion darstellt, sondern nur eine Aufblähung ist, 
oder den Benutzer nicht wirklich lernen läßt, mit der HW umzugehen. 
Kurzum, es ist ein Tool zum Kunden-Verblöden. Wenn so einer, der seine 
ganzen Einstellungen noch nie begriffen hat dank Cube oder noch nie ein 
Register selbst mit den nötigen Bits beschrieben hat, mal auf einen Chip 
von ner anderen Bude trifft, ist er völlig hilflos, weil er eben 
nichts_ gelernt hat und folglich _nichts kann. Du solltest dir das für 
deinen Berufsweg merken - es selber zu können, also wirklich selbst 
potent zu sein, ist allzeit besser, als nur von vorgekautem Zeugs (oder 
dem "Gebumsten" von anderen..) zu leben. DIE DAMEN BITTE MAL KURZ 
WEGSCHAUEN..

W.S.

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


Lesenswert?

W.S. schrieb:
> So, noch ein Wort zu sowas wie ST-Lib, HAL, Cube und Konsorten: Ich
> halte davon ganz und gar nichts, weil all dieses Zeugs eben keinerlei
> echte Hardware-Abstraktion darstellt, sondern nur eine Aufblähung ist,
> oder den Benutzer nicht wirklich lernen läßt, mit der HW umzugehen.
> Kurzum, es ist ein Tool zum Kunden-Verblöden. Wenn so einer, der seine
> ganzen Einstellungen noch nie begriffen hat dank Cube oder noch nie ein
> Register selbst mit den nötigen Bits beschrieben hat, mal auf einen Chip


 90% der Anwendungen benutzen fremde Librarys und niemand stört sich
 daran, z.B. I2C, UART, LCD, SD-Card, um nur einige zu nennen. Alle
 nötigen Einstellungen werden meistens dort gemacht.
 Und das auch noch bei AVRs die bei weitem nicht so kompliziert sind.

 Jetzt auf einmal reden alle von low-level, eigenen Routinen zum
 Init, eigenen Bibliotheken etc. - und das gerade bei STM32 ?

 Es ist bestimmt nicht so, dass da ein bit in einem Register gesetzt
 wird und das wars dann - alles funktioniert wunderbar danach.
 Es sind ganz einfach zu viele Sachen auf die man aufpassen muss, nur
 Masochisten oder Hallo World und LED-Blinker tun sich so etwas an.

 SystemClock, ADC, SPI, I2C, DMA - wer von euch weiss auch nur
 einigermassen was und wie da alles eingestellt werden muss (ohne
 überhaupt auf ev. entstehenden Konflikte einzugehen) - ohne DaBla zu
 Hilfe zu nehmen ?
 CubeMX ist besser und weiss mehr über STM32 Familie (wenn man es so
 sagen kann) als Ihr alle zusammen, da könnt Ihr noch so viel auf
 ihrem Wissen bestehen...
 Wie gesagt, Grundgerüst mit Cube, ev. Veränderungen oder
 Feineinstellungen können dann immer noch von Hand gemacht werden.

 Und es kommen noch kompliziertere uC raus - wollt Ihr dann immer
 noch alles aus dem Kopf machen ?

 LOL.

von Horst (Gast)


Lesenswert?

Kann mich grundsätzlich anschließen, dass es einem die HAL in 99% der 
Fälle nicht erspart, das RefMan zu lesen. Dann kann man es auch gleich 
weglassen und effizienter programmieren.

Dennoch ist CubeMX nett um vorher einen Controller auszuwählen, und 
nicht nachher festzustellen, dass alle Peripherals an Board sind aber 
die Pin-Muxes es verhindern die in gewünschter Konfiguration parallel zu 
betreiben.

von Reginald L. (Firma: HEGRO GmbH) (reggie)


Lesenswert?

Marc V. schrieb:
> SystemClock, ADC, SPI, I2C, DMA - wer von euch weiss auch nur
>  einigermassen was und wie da alles eingestellt werden muss
Ich zb.

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


Lesenswert?

Reginald L. schrieb:
> Marc V. schrieb:
>> SystemClock, ADC, SPI, I2C, DMA - wer von euch weiss auch nur
>>  einigermassen was und wie da alles eingestellt werden muss
> Ich zb.

 LOL.
 Sicher.

 Ich will es gar nicht wissen, erst wenn mich der Cube warnt, geht
 es mit wälzen der Manuals los...

 Und in 10 Jahren wird es genauso sein...
 Weil es gerade dafür Computer gibt...
 Sind zwar dumm, können aber vieles speichern...

 Um auch nur 1/100 von dem zu behalten, was im CubeMX vorhanden ist,
 müsste ich Kopf wie einen Wassereimer haben...

 Und ich kann mein Gehirn für andere Sachen benutzen und dumme
 Computer dumme Sachen merken lassen...

 Du kannst es natürlich machen, wie es dir beliebt...

 Und dann auch noch behaupten, dass das mit Kreativität oder mit
 Kunst des Programmierens gleichzusetzen ist...

: Bearbeitet durch User
von Zoltan (Gast)


Lesenswert?

CubeMX ist super für Pin Mux und Clock und um ein Projekt neu 
aufzusetzen.
Ich packe da aber auch immer meine eigene Lib mit ins Projekt rein und 
passe die dann jeweils an die neue MCU an - dabei ist die "HAL" Lib aber 
durchaus hilfreich. Ich muss da erstmal nicht unbedingt ins Ref Man oder 
die HAL Doku schaun, nur in den Code. Wenn es nicht direkt zur eigenen 
Anwendung passt - dann den relevanten Teil kopieren und anpassen.
Das ist meist ein recht brauchbarer Startpunkt.

Ja das ginge wesentlich schöner und es wäre besser gewesen ST hätte das 
anders aufgezogen, aber es könnte auch schlimmer sein.


Nein, man muss nicht jedes Register in der MCU auswendig kennen.
Man darf natürlich wenn man möchte - das bringt aber nur was wenn man 
das Wissen dazu öfter als 1x im Jahr auch nutzt ;-)

von Nop (Gast)


Lesenswert?

Marc V. schrieb:

>  Und es kommen noch kompliziertere uC raus - wollt Ihr dann immer
>  noch alles aus dem Kopf machen ?

Ja. Das Gute an der Sache ist, wenn man Projekte mit heftigeren 
Anforderungen wie z.B. code coverage und noch ein paar mehr Dingen hat, 
dann kann man gutes Geld verdienen, wenn man diese Dinger selber 
programmieren kann. Mit "ich kann aber in CubeMX was zusammenklicken" 
braucht man da nämlich gar nicht erst anzukommen.

Natürlich ist das für Hobby völlig irrelevant. Aber wenn man sowas in 
Hobby-Projekten macht, wo man keinerlei Zeitdruck ausgesetzt ist, dann 
hat man das Wissen erarbeitet und ist im Vorteil. Zudem kann man sich 
nicht mit allen Chips graphisch was zusammenklicken - und die Fähigkeit, 
sich das nach technischen Unterlagen selber zurechtzusuchen, wird auch 
gut bezahlt.

Wobei ich bei Dir mal davon ausgehe, daß Du das ausreichend gemacht hast 
und das daher im Ernstfall auch kannst. Aber Einsteiger, die gleich den 
bequemen Weg gehen, erwerben durch die Abkürzung diese Fähigkeit nicht.

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


Lesenswert?

Zoltan schrieb:
> Ich packe da aber auch immer meine eigene Lib mit ins Projekt rein und
> passe die dann jeweils an die neue MCU an - dabei ist die "HAL" Lib aber
> durchaus hilfreich. Ich muss da erstmal nicht unbedingt ins Ref Man oder
> die HAL Doku schaun, nur in den Code. Wenn es nicht direkt zur eigenen
> Anwendung passt - dann den relevanten Teil kopieren und anpassen.
> Das ist meist ein recht brauchbarer Startpunkt.

 Genauso machen wir es hier.

> Nein, man muss nicht jedes Register in der MCU auswendig kennen.
> Man darf natürlich wenn man möchte - das bringt aber nur was wenn man
> das Wissen dazu öfter als 1x im Jahr auch nutzt ;-)

 Ich würde sogar wietergehen und behaupten, dass dieses "Wissen"
 schon nach ein paar Wochen oder Monaten weg ist oder man zumindest
 nicht mehr 100% sicher ist.
 Es sei den, man schreibt tagaus, tagein immer wieder die selben,
 stupiden Initsequenzen rein und ist noch stolz darauf...

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


Lesenswert?

Nop schrieb:
> programmieren kann. Mit "ich kann aber in CubeMX was zusammenklicken"
> braucht man da nämlich gar nicht erst anzukommen.

 Wo soll man gar nicht erst ankommen ? Als Anfänger ?


> und das daher im Ernstfall auch kannst. Aber Einsteiger, die gleich den
> bequemen Weg gehen, erwerben durch die Abkürzung diese Fähigkeit nicht.


 Naja, ich sehe das gerade anders.
 Schau dir mal die Initsequenz für z.B. ADC an - 50% davon versteht
 jeder Anfänger, die anderen 50% schreien geradezu nach Manual um zu
 sehen, warum das so ist.
 Ohne irgendeinen Gerüst zum anfangen wird der Neuling von der Menge der
 benötigten Informationen ganz einfach erschlagen.
 So kann er wenigstens Schritt für Schritt vorgehen und sich langsam
 vorarbeiten.

 Und ich kann es nur noch einmal wiederholen:
 Schon bei einfachstem STM32 ist mit: Ich habe alles im Kopf Schluss.

 Das ist einfach lachhaft und unprofessionell.


 Und ob gerade HAL das Nonplusultra ist - da bin ich auch nicht gerade
 begeistert und benutze es kaum noch, ausser für etwas was auf die
 Schnelle ausprobiert werden muss.

 Aber CubeMX ist etwas ganz anderes, nach meiner Meinung gibt es
 zur Zeit nichts besseres.

: Bearbeitet durch User
von Nop (Gast)


Lesenswert?

Marc V. schrieb:

> Wo soll man gar nicht erst ankommen ? Als Anfänger ?

Mit "ich kann keine Datenblätter lesen, embedded programmieren kann ich 
auch nicht, aber ich kann irgendwas zusammenklicken". Damit fliegt man 
im embedded-Bereich schon beim Bewerbungsgespräch raus, auch als 
Einsteiger.

>  So kann er wenigstens Schritt für Schritt vorgehen und sich langsam
>  vorarbeiten.

Nö. Die Folge ist stattdessen eher "ich kann's zusammenklicken, wozu 
diese Datenblätter lesen, nachher beißen die auch noch". Naja, ich will 
mich nicht beschweren, diese Leute werden immerhin keine Konkurrenz. Für 
Hobby ist sowieso alles egal, da kann man meinetwegen auch nen Raspi für 
einen Blinky hernehmen. In Java natürlich.

> Aber CubeMX ist etwas ganz anderes, nach meiner Meinung gibt es
> zur Zeit nichts besseres.

Ausgenommen das Reference Manual natürlich. ;-)

von F. F. (foldi)


Lesenswert?

Marc V. schrieb:
> Um das Lesen der ganzen Manuals wirst du sowieso nicht rumkommen,
>  aber es muss ja nicht gleich am Anfang sein...
>  Erst mal ein paar Erfolgserlebnisse, danach geht alles leichter.

Danke Marc, das sehe ich auch so und ich finde die Idee mit der 
grafischen Software sowieso besser.
Dass man irgendwann auch mal das ganze Datenblatt zum Controller liest, 
das ist wohl der normale Ablauf, aber ich sehe das auch so, dass man 
erst Erfolg braucht, um sinnvoll weiter zu machen.
Um einen Pin als Ausgang zu benutzen einfach einen Schalter benutzen, 
statt kryptische Zeilen zu schreiben, die man im Anfang auch erstmal nur 
abschreibt, ohne sie unbedingt zu verstehen, halte ich für deutlich 
besser.

von Mehmet K. (mkmk)


Lesenswert?

Bei einem solchen Thema haette ich eingenlich den Hinweis, zuerst einmal 
das Errata Manual zu studieren, etwas haeufiger anzutreffen erhofft.
Waehrend andere Hinweise aehnlich einer Endlosspule sich immer wieder 
wiederholten, war dieser wichtige Hinweis nur einmal anzutreffen (Gerd 
E.)
Also: bevor man eine MCU in die engere Wahl nimmt, zuerst einen Blick in 
die Errata werfen. Erst dann die anderen Entscheidungen und Schritte. 
Diese Vorgehensweise sich anzugewönen erspart einem sehr viel Aerger und 
Geld.

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


Lesenswert?

Mehmet K. schrieb:
> Also: bevor man eine MCU in die engere Wahl nimmt, zuerst einen Blick in
> die Errata werfen. Erst dann die anderen Entscheidungen und Schritte.

 Der TO hat sich schon ein Board besorgt, nix mit engere Wahl.
 Es geht um die Programmierung.

von m.n. (Gast)


Lesenswert?

Raphael G. schrieb:
> In meinem Fall habe ich das STM32F4 Discovery Board und habe die
> Möglichkeit, die Discovery Firmware einzusetzten in der die Standard
> Peripheral Libraries vorhanden sind, welche wohl auch nichtmehr
> weiterentwickelt werden.

Dann mache es doch so. Da muß auch nichts weiterentwickelt werden, wenn 
Du Dich weiterentwickelst.
Aufbauend auf dem vorhandenen Code kannst Du Routinen ausklammern und 
eigene Konstrukte hinzufügen, bis Du dann an den Punkt kommst, daß Du 
direkt auf die Register zugreifen möchtest: damit die 
Ausführungsgeschwindigkeit auf 'Sollwert' kommt und Du selber 
entscheiden kannst, wo was wann passiert.

Ansonsten ist ja schon Alles gesagt worden.

von F. F. (foldi)


Lesenswert?

m.n. schrieb:
> Aufbauend auf dem vorhandenen Code kannst Du Routinen ausklammern und
> eigene Konstrukte hinzufügen, bis Du dann an den Punkt kommst, daß Du
> direkt auf die Register zugreifen möchtest: damit die
> Ausführungsgeschwindigkeit auf 'Sollwert' kommt und Du selber
> entscheiden kannst, wo was wann passiert.

Kommt man nicht irgendwann zwangsläufig dort hin?

von m.n. (Gast)


Lesenswert?

F. F. schrieb:
> Kommt man nicht irgendwann zwangsläufig dort hin?

Das hoffe ich doch, wenn man nicht auf Kindergartenniveau stehen bleiben 
möchte. Nur sollte der TO nicht endlos nach dem Stein des Weisen suchen, 
sondern das verwenden, was er hat.
Die entscheidenen Sachen müssen im Kopf passieren!

Wenn hier von HAL und CUBE die Rede ist: ich träume nicht den Traum der 
(Schein-)Kompatibilität zwischen diversen Derivaten eines Herstellers. 
Spätestens wenn ich z.B. wegen Überschneidungen der IO-Pins SPI oder IIC 
per 'Wackelpins' in Software realisieren muß, ist es vorbei mit stupider 
Klickerei.

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


Lesenswert?

m.n. schrieb:
> Wenn hier von HAL und CUBE die Rede ist: ich träume nicht den Traum der
> (Schein-)Kompatibilität zwischen diversen Derivaten eines Herstellers.
> Spätestens wenn ich z.B. wegen Überschneidungen der IO-Pins SPI oder IIC
> per 'Wackelpins' in Software realisieren muß, ist es vorbei mit stupider
> Klickerei.

 Sicher.
 Nur kreierst du die Initsequenz für diesen Pin mit stupider copy &
 paste Methode und die anderen machen es wieder mit stupidem Click.

 Gewaltiger Unterschied, indeed...

: Bearbeitet durch User
von m.n. (Gast)


Lesenswert?

Marc V. schrieb:
> Nur kreierst du die Initsequenz für diesen Pin mit stupider copy &
> paste Methode

Ich brauche keine Initsequenz. Die Eingänge lese ich einfach so aus den 
GPIO-Registern.

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


Lesenswert?

m.n. schrieb:
> Ich brauche keine Initsequenz. Die Eingänge lese ich einfach so aus den
> GPIO-Registern.

 Bravo.
 Ohne Clock ?

von W.S. (Gast)


Lesenswert?

m.n. schrieb:
> Ich brauche keine Initsequenz.

Logo.

Aber du solltest aufhören, dich mit diesem Fanboy zu raufen - es bringt 
nix.

Wenn einer mit allergrößtem Nachdruck sich darauf verlegt, nichts 
anderes zu können und zu wollen als die Benutzung eines 
Hersteller-Tools, dann ist Hopfen und Malz verloren. Rauf dich lieber 
mit mir...


Marc V. schrieb:
> Nur kreierst du die Initsequenz für diesen Pin..

Ah ja, die Initsequenz. Oder die InitStructur, oder oder oder.

Was machst du eigentlich (oder würdest theoretisch machen) wenn du mal 
keinen STM32, sondern einen Chip von Nuvoton oder NXP etc. vor der Nase 
hast? Dann antwortest du deinem Chef, daß du schließlich ein Ingenieur 
für STM32 bist und nicht ein Ingenieur für LPC oder NUC120 - gelle?

Haben wir's jetzt?

W.S.

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


Lesenswert?

W.S. schrieb:
> Was machst du eigentlich (oder würdest theoretisch machen) wenn du mal
> keinen STM32, sondern einen Chip von Nuvoton oder NXP etc. vor der Nase
> hast? Dann antwortest du deinem Chef, daß du schließlich ein Ingenieur
> für STM32 bist und nicht ein Ingenieur für LPC oder NUC120 - gelle?

 Einen von Euch Genies zur Hilfe rufen ?

 Für einen Genie wie dich ist es egal, ob NXP oder ST oder Nuvoton -
 du hast von denen sowieso nur die Bilder gesehen und nicht einmal
 A von Ahnung.

> Haben wir's jetzt?

 Ich hab's schon seit ein paar Jahren - ob du jemals weiter als
 LED blinken mit fertigem Program in BASIC weiterkommst, wage ich
 zu bezweifeln.

von Raphael G. (steggesepp)


Lesenswert?

Wow das läuft hier ja gerade wieder komplett aus dem Ruder. Könnt ihr 
nicht mal beim Thema bleiben? Ich bin ernsthaft nicht interessiert an 
euren Schw**zvergleichen. Jetzt müssen sich wieder interessierte 
querbeet die haufen Beiträge durchlesen. Es interessiert dabei niemanden 
ob ein einzelner alle Register auswendig setzen kann oder nicht. Ich 
hoffe ihr habt verständnis.

Danke an alle, die versuchen, ernsthaft was zum gefragten Thema 
beizutragen.

Es geht hier auch tatsächlich weniger darum, wie man den geeigneten MCU 
auswählt sondern um die von euch empfohlene Herangehensweise beim 
Programmieren bzw. welche Libs ihr nutzt, mehr nicht. In diesem Fall ist 
es eben ein Board von ST, ich nutze es weil ich es eben habe. Es geht 
nicht um ARM > ATMEL. Ich habe nur einzelne Atmel CHIPs und werde für 
mein aktuelles Projekt nicht die Energie aufwenden eine eigene Platine 
zu designen, egal wie einfach und klein sie werden würde. Ich will auch 
die Programmierung von ARM Controllern lernen, egal ob das nun 
überdimensioniert für das aktuelle Projekt ist oder nicht.

: Bearbeitet durch User
von m.n. (Gast)


Lesenswert?

Raphael G. schrieb:
> Ich bin ernsthaft nicht interessiert an
> euren Schw**zvergleichen.
> Danke an alle, die versuchen, ernsthaft was zum gefragten Thema
> beizutragen.

Du hast Meinungen erfragt, und verstehst sie offensichtlich nicht. Auch, 
wenn die Meinungen kontrovers sind, ernst gemeint sind sie trotzdem.
Fang endlich an und warte nicht, daß Mama Dir sagt, was Du zu tun hast.

von Raphael G. (steggesepp)


Lesenswert?

m.n. schrieb:
> Du hast Meinungen erfragt, und verstehst sie offensichtlich nicht. Auch,
> wenn die Meinungen kontrovers sind, ernst gemeint sind sie trotzdem.
> Fang endlich an und warte nicht, daß Mama Dir sagt, was Du zu tun hast.

Interessant woran du dingfest machst, dass ich etwas offensichtlich 
nicht verstehe oder gar nur dasitze und nichts tue. Du verstehst 
scheinbar -meine- Absichten nicht, dann ist es dir auch freigestellt 
nichts zu schreiben. [bearbeitet - reagiere zu empfindlich auf dummes 
geschwätz]. Ich will des einzelnen seine vorangehensweisen kennen lernen 
und nicht die Meinung anderer darüber, ob des anderen Vorangehensweise 
nicht mit seiner eigenen Überzeugung in einklang zu bringen ist.

: Bearbeitet durch User
von Raphael G. (steggesepp)


Lesenswert?

Ich habe doch schon nützliche Antworten erhalten. Es geht ja auch 
garnicht explizit um ein einzelnes Projekt sondern tatsächlich im 
Allgemein (sofern das überhaupt möglich ist) darum, welche Libraries 
(SPL, HAL, eigene..) genutzt werden, ob nur die CMSIS genutzt wird, oder 
ob der geschulte Hobby-/Berufsprogrammierer alles selbst programmiert 
von Startup über HAL bis zum eigentlichen Programm. Dazu hab ich schon 
reichlich antworten erhalten und dafür bin ich dankbar.

Ich sitze hier nicht nur tatenlos herum, mir haben die Antworten schon 
sehr viel gebracht.

: Bearbeitet durch User
von m.n. (Gast)


Lesenswert?

Raphael G. schrieb:
> Interessant woran du dingfest machst,

Deine Reaktion ist ausfallend bezüglich der Wortwahl und anmaßend, da Du 
die angesprochene Problematik noch garnicht verstehen kannst.
Die Textstelle mit dem Idioten hast Du ja wieder entfernt, aber wenn Du 
anderer Leute Meinung als dummes Geschwätz abtust, dann frage doch nicht 
danach. Der STM32 wird Dir schon zeigen, wer der Idiot ist ;-)

von W.S. (Gast)


Lesenswert?

Raphael G. schrieb:
> Es geht ja auch
> garnicht explizit um ein einzelnes Projekt sondern tatsächlich im
> Allgemein...

... um die Herangehensweisen der Leute. Ja, darum geht es.

Manche suchen nach dem allerleichtesten Weg, ohne sich tatsächlich mit 
den Gegebenheiten abgeben zu wollen. Sie wollen das Pferd, was sie 
reiten, auch nicht kennen oder gar verstehen.
Zitat:  "Ich will es gar nicht wissen,.."

Und die Folge dieses Nicht-Wissen-Wollens ist eben das Nichtwissen und 
das tatsächliche Nichtkönnen. Eben der STM32F103-Ingenieur, der sich 
schon beim STM32F302 als nicht zuständig empfindet und nur die 
bereitgestellten Tools "seines" Herstellers kennt. Solche Leute sind 
dann schließlich so hardwarefern, daß sie eben nicht mal mehr die 
vorhandenen Möglichkeiten ihres Chips wirklich kennen und benutzen 
können.

Meine Art ist das nicht. Und es ist auch nicht die Art von anderen 
Geräte- und Hardware-Entwicklern.

So, Raphael, nun kannst du selbst dir deinen Weg suchen.
Denk aber gelegentlich an die diversen Volksmärchen, wo zwischen dem 
breiten und dem steinigen Weg unterschieden wird.

W.S.

von Raphael G. (steggesepp)


Lesenswert?

Danke für deinen abschließenden Kommentar. Ich habe mich wohl 
stellenweise offensichtlich falsch ausgedrückt, so ich das dem Zitat 
entnehmen kann, das tut mir leid. Generell möchte ich mich auch für die 
unangemesse Art und Weise entschuldigen, mit der ich versucht habe, die 
Threadbeiträge freizuhalten von jeglicher Diskussion, ich hab mir damit 
natürlich selbst ins Knie geschossen.

Hätte ich kein Interesse und würde nur oberflächlich programmieren 
wollen, hätte ich mir einen Arduino oder einen RaspberryPI geholt. So 
geht meine Reise nun weiter, erste Ziele habe ich ja jetzt schon 
erreichen können (CubeMX -> HAL, jedoch mag ich die HAL jetzt schon 
nicht mehr, da man letztendlich alles in den docs nochmal nachliest und 
dann alleine schon die Registerbezeichnungen nichtmehr direkt 
nachvollziehbar sind. Beispiel SPI Bidirectional mode, Datenrichtung 
über BIDIOE festgelet, nennt sich in der HAL aber SPI_1LINE_TX / RX. So 
wurde es hier ja auch vorhergesagt, aber man lernt dadurch auch).

In diesem Sinne. Grüße an Alle und schöner Abend.

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

W.S. schrieb:
> den Gegebenheiten abgeben zu wollen. Sie wollen das Pferd, was sie
> reiten, auch nicht kennen oder gar verstehen.
> Zitat:  "Ich will es gar nicht wissen,.."

 Wenn wir schon beim Reiten sind:
 Hör doch endlich auf, darauf rumzureiten.

 TO hat sich ein Entwicklungsboard besorgt und will damit etwas
 anfangen - nicht mit NXP oder Nuvoton - sondern mit STM32.
 Fragt nach Erfahrungen und Meinungen, nicht nach vorhandenem
 Wissen, Können, Diplom, Gehalt usw.
 Ist das so schwer zu verstehen ?

 Niemand, aber auch niemand kann sich alle ARM Modelle merken,
 geschweige denn jeden einzelnen bit in jedem einzelnem Register
 kennen, geschweige denn alle ARM Modelle auf dem Markt auswendig
 bis auf den letzten bit in letztem Register kennen.

 Und genauso wie du (oder jeder andere) im Manual nachsehen muss und
 kann, tue ich (und jeder andere) das auch.

 Aber (im Gegensatz zu dir) lasse ich mir von Cube alle in Frage
 kommenden Modelle und ev. Konflikte zuerst anzeigen und meistens auch
 ein Gerüst erzeugen. Das wird dann je nach verwendeter Library noch
 angepasst (mit Hilfe der entsprechenden Manuals) und als Grundrojekt
 für dieses Modell abgelegt.
 Bei Bedarf wird entsprechendes Verzeichnis kopiert und damit wird
 dann weitergemacht.

 Selbstverständlich wird nach ein paar Wochen das meiste vergessen,
 deswegen mache ich mir gar nicht die Mühe, alles zu behalten.

 Das aber bei ARM jemand immer noch hartnäckig darauf besteht, alle
 Modelle auswendig zu kennen und die alle aus dem Kopf programmieren
 kann, grenzt an Debilität.

: Bearbeitet durch User
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.