Forum: Mikrocontroller und Digitale Elektronik ARM Cortex M3 für Dummies


von Dennis (Gast)


Lesenswert?

Hi Leute! Viel habe ich rumüberlegt ob ich mit Atmels avr oder doch 
gleich mit 32 Bit Arms loslegen soll. Ich frage jetzt einfach mal hier 
:-) Kennt ihr ein Buch oder Tutorial das wirklich bei NULL beginnt einem 
den M3 zu erklären? Programmierung soll in C oder C++ gemacht werden 
(idealerweise letzteres weil ich da ein bisschen bewandert bin).

Das hier habe ich selbst gefunden, klar kann ich zum Inhalt nichts 
sagen, aber vielleicht kennt jemand das Buch und kann was zu sagen:

Programming with STM32: Getting Started with the Nucleo Board and C/C++

https://www.amazon.de/Programming-Stm32-Getting-Started-Nucleo/dp/1260031314/ref=pd_sbs_14_4/258-5924846-0692958?_encoding=UTF8&pd_rd_i=1260031314&pd_rd_r=06a93ce7-8e32-4a65-b045-fa3e5396cf95&pd_rd_w=GKOwr&pd_rd_wg=TSb4r&pf_rd_p=74d946ea-18de-4443-bed6-d8837f922070&pf_rd_r=EWS8HCB69HGV1A2N0ST0&psc=1&refRID=EWS8HCB69HGV1A2N0ST0

Mit Arduino will ich nicht beginnen, das steht schonmal fest.

von M4_Benutzer (Gast)


Lesenswert?

Cortex M3 ausgerechnet von ST ist nicht so toll. ST baut seit geraumer 
Zeit nur noch M4 (und größer und M0+). Die wenigen M3 Chips sind aus der 
ersten Generation und man merkt, dass sie seit dem dazu gelernt haben.

Außerdem: wieso bei Null beginnen wenn du C++ kannst?

Hier gleich um die Ecke gibt's einiges zum Lesen:
https://www.mikrocontroller.net/articles/Kategorie:ARM

Der Klassiker:
https://www.elsevier.com/books/the-definitive-guide-to-arm-cortex-m3-and-cortex-m4-processors/yiu/978-0-12-408082-9

von Dennis (Gast)


Lesenswert?

M4_Benutzer schrieb:
> Außerdem: wieso bei Null beginnen wenn du C++ kannst?

Ich meine damit, dass ich bei 0 beginnen muss die Architektur kennen zu 
lernen. Programmiert habe ich nur auf richtigen PCs. Vielen Dank für die 
zwei Empfehlungen.

von Dennis (Gast)


Lesenswert?

M4_Benutzer schrieb:
> Cortex M3 ausgerechnet von ST ist nicht so toll

Ok dann sattle ich um auf den neueren M4, toll, dass du mich darauf 
hinweist :-)

von Christopher J. (christopher_j23)


Lesenswert?

Ich würde dir dieses Tutorial empfehlen:
http://www.pomad.fr/node/2

Ist für einen STM32F0, also Cortex-M0, wobei die Prozessorarchitektur 
mMn erstmal sowieso nicht die große Rolle spielt. Das Tutorial ist 
relativ low-level, also optimal um zu verstehen wie so ein 
Mikrocontroller und dessen Peripherie funktioniert.

M4_Benutzer schrieb:
> Der Klassiker:
> 
https://www.elsevier.com/books/the-definitive-guide-to-arm-cortex-m3-and-cortex-m4-processors/yiu/978-0-12-408082-9

Den würde ich als Begleitliteratur unbedingt empfehlen bzw. dann die 
Edition für M0 und M0+.

Dennis schrieb:
> Programming with STM32: Getting Started with the Nucleo Board and C/C++

Klingt mir zu sehr nach "Malen nach Zahlen mit STM32 und CubeMX/HAL" 
dabei lernst du nichts.

Dennis schrieb:
> Mit Arduino will ich nicht beginnen, das steht schonmal fest.

Arduino ist ganz ok um schnell erste Erfolge in der Mikrocontrollerwelt 
zu haben. Um zu lernen was die Welt im Innersten zusammen hält ist es 
halt eher nicht geeignet. Spreche da aus eigener, bitterer Erfahrung.

Dennis schrieb:
> C oder C++

Ich würde Mikrocontroller-Hardware und Programmiersprache als zwei 
getrennte Projekte betrachten. Quasi alle Tutorials abseits der 
Arduino-Welt sind in C und nicht in C++, also würde ich das erstmal 
nehmen. Später kannst du das Schritt für Schritt auf C++ umstricken.

von Dennis (Gast)


Lesenswert?

Christopher J. schrieb:
> Ich würde dir dieses Tutorial empfehlen:
> http://www.pomad.fr/node/2
>
> Ist für einen STM32F0, also Cortex-M0, wobei die Prozessorarchitektur
> mMn erstmal sowieso nicht die große Rolle spielt. Das Tutorial ist
> relativ low-level, also optimal um zu verstehen wie so ein
> Mikrocontroller und dessen Peripherie funktioniert.

Habe mich in die ersten Kapitel grob eingelesen, genau nach so etwas 
habe ich gesucht. Zuerst habe ich mich gewundert, dass direkt Adressen 
angesprochen werden. Aber ab Kapitel 1.4 werden dann Header eingebunden, 
die Definitionen der vorher verwendeten Adressen enthalten, sodass man 
nunmehr Namen verwenden kann statt Adressen - ich habe dadurch kapiert 
warum diese Header überhaupt gebraucht werden.

Super Tutorial, danke Christopher.
Super Buchempfehlung, danke Christopher und M4_Benutzer.

von Stefan F. (Gast)


Lesenswert?

Dennis schrieb:
> Kennt ihr ein Buch oder Tutorial das wirklich bei NULL beginnt einem
> den M3 zu erklären

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

Da hast du ein Anfänger-Tutorial für M3, sowie vergleichbare 
Codeschnipsel für M0, M3 und M4. Du wirst sehen, dass die Unterschiede 
in den kleinen Details stecken.

von W.S. (Gast)


Lesenswert?

Dennis schrieb:
> Das hier habe ich selbst gefunden, klar kann ich zum Inhalt nichts
> sagen,...

Das sieht aus wie ein Werbe-Buch für die Nucleo-Boards von ST.

Aber du hast überhaupt nicht geschrieben, was du denn so an eigentlichen 
Vorkenntnissen hast.

Daß du ein bissel C++ kannst, läßt schließen, daß du nur auf dem PC 
bislang etwas programmiert hast.

Da halte ich es für ziemlich falsch, sich gleich zu Anfang auf die doch 
recht aggressive Firmenpolitik von ST einzulassen. Das ist ein echtes 
Problem, da gerade ST mit Gewalt versucht, die Leute, die sich auf deren 
vermeintlich hilfreiche Hilfestellung in Form von diverser Software auf 
ihre Produkte festzunageln.

Dieses Problem greift tief: Der Markt an µC ist seit jahren verarmt, es 
gibt hauptsächlich nur noch Arm-Cortex und nicht mehr eine Typenvielfalt 
wie noch vor 15 Jahren. Alle Hersteller verbauen die gleichen 
Prozessortypen und suchen deshalb nach Mitteln, ihre Kunden so zu 
beeinflussen, daß sie es möglichst schwer haben, auf einen anderen 
Hersteller zu wechseln. Und ST ist da mMn. am aggressivsten.

Also lies ganz einfach mal ein wenig in den Dokumenten von ARM - muß ja 
nicht gleich alles sein. Das kostet nix und zeigt dir auf alle Fälle 
etwas über die grundlegend Architektur der Cortex-M Prozessoren.

Danach dürfte es am sinnvollsten sein, dir mal die Datenblätter und 
Referenz-Manuals von kleineren µC verschiedener Hersteller 
anzuschauen.

Relativ gut gemachte Manuals gibt es mMn. von NXP für die LPCxxx und von 
ST für die STM32Fxxx. Auch ganz gut aber eben 'chinesisch' im Stil sind 
die Manuals von Nuvoton. Atmel's Manuals sind mir zu laberig, die von 
Freescale (bei NXP) zu überformalistisch. Infineon mag ich nicht, die 
versuchen, ihre Kunden an DAVE festzunageln.

Aber es sollten die Manuals von kleineren µC sein, damit du bei den 
größeren nicht von der Fülle an Peripherie erschlagen wirst. Und sowas 
braucht man sich nur herunterzuladen.

Von allen Büchern a la "Alles zum XYZ" oder "XYZ für Dummies" rate ich 
dir dringend ab. Mit sowas versuchen Autoren als Trittbrettfahrer den 
ahnungslosen Anfängern das Geld aus der Tasche zu ziehen - ohne daß sie 
den Lesern einen wirklich lesenswerten Nutzwert verkaufen.

W.S.

von Christopher J. (christopher_j23)


Lesenswert?

Dennis schrieb:
> Super Tutorial, danke Christopher

Nichts zu danken. Ich habe es selber erst kürzlich durch einen anderen 
Beitrag hier in diesem Forum entdeckt ;)

Wenn dir das Tutorial zusagt und du mit einem F0 anfängst würde ich 
zusätzlich zum Tutorial noch die "STM32 F0 Snippets" anschauen, dass 
sind Beispiele für die Peripheriekonfiguration, ähnlich dem Tutorial, 
also nur mittels beschreiben der Register. Die gibts direkt auf der 
Seite von ST zum Download (einmal für F0 und einmal für L0).

von Seppel (Gast)


Lesenswert?

Hallo,

die Cypress PSOC sind cool, jede Menge Tutorials,... fix und fertige 
IDE.

Grüsse, Seppel

von Dennis (Gast)


Lesenswert?

Was würde denn gegen einen M4 oder M7 sprechen ist das fürs Hobby zu 
übertrieben?

von Axel S. (a-za-z0-9)


Lesenswert?

Dennis schrieb:
> Was würde denn gegen einen M4 oder M7 sprechen

Nichts. Gegenfrage: was spricht dafür?

> ist das fürs Hobby zu übertrieben?

Die Frage ist falsch gestellt. Es geht nicht darum, ob Hobby oder nicht, 
sondern darum ob es für die Aufgabe angemessen ist. Ein M4 ist im 
Prinzip ein M3 mit zusätzlicher Fließkomma- und DSP-Einheit. Wenn die 
Anwendung das nicht braucht, ist es sinnlos von M3 auf M4 zu gehen.

Für dich als Einsteiger ist es wichtiger, einen Pfad zu wählen, auf dem 
Lernkurve nicht zu steil wird. Von Null an mit einem M7 einzusteigen, 
wird dich fast sicher überfordern. Mein Rat wäre deswegen: ein Schritt 
nach dem anderen. Ein M0 oder M0+ ist für den Anfang genug. Dann ein M3, 
dann ein M4. Und immer nur dann, wenn du eine Aufgabe hast, die die 
neuen Fähigkeiten auch benötigt. Und keine Sorge, das Wissen das du dir 
für den M0 angeeignet hast, ist später nicht nutzlos.

von Dennis (Gast)


Lesenswert?

Axel S. schrieb:
> Ein M0 oder M0+ ist für den Anfang genug. Dann ein M3, dann ein M4. Und
> immer nur dann, wenn du eine Aufgabe hast, die die neuen Fähigkeiten
> auch benötigt.

Klingt absolut vernünftig, danke für den Schubser :-)

von MartinC (Gast)


Lesenswert?

Hallo,

muss der Einstieg auf einem Cortex M7 denn unbedingt komplizierter sein, 
wenn man dessen Spezialitäten nicht nutzt ?
Programme laufen doch auch ohne FPU, TCM oder Cache sofort.

Und die Peripherie muss man doch auch bei den kleineren Prozessoren 
beherrschen lernen.
Mir hat die Peripherie beim Atmel/Microchip SAME70 am meisten Mühe 
gemacht wegen Umstieg von NXP. TCM und Cache habe ich erst später 
aktiviert.

Gruß,
Martin

von Christopher J. (christopher_j23)


Lesenswert?

Dennis schrieb:
> Was würde denn gegen einen M4 oder M7 sprechen ist das fürs Hobby zu
> übertrieben?

Da spricht nichts gegen. Du könntest das oben genannte Tutorial 
vermutlich fast 1:1 mit einem F303 statt einem F072 durcharbeiten, also 
einem M4F statt einem M0. Es wird aber hier und da eben nicht 
funktionieren und dann stehst du da wie der Ochse vorm Berg. Das 
Wichtigste ist erstmal sich mit der Peripherie und deren Funktionen 
vertraut zu machen und dafür ist der F0 eben absolut ausreichend. Kannst 
dir ja parallel auch einen F3 zulegen. Auf der Seite von Stefan findest 
du eine gute Übersicht von F3-Boards.

MartinC schrieb:
> muss der Einstieg auf einem Cortex M7 denn unbedingt komplizierter sein,
> wenn man dessen Spezialitäten nicht nutzt ?

Den Kern halte ich tatsächlich für ziemlich irrelevant, so lange man 
nicht in ASM programmieren will. Der Clock-Tree eines F0 ist aber um 
einiges übersichtlicher als der eines F7. Hat mit dem Kern nichts zu 
tun, ist aber ein Argument für die "kleineren" Controller, zumindest für 
absolute Neueinsteiger.

: Bearbeitet durch User
von Bauform B. (bauformb)


Lesenswert?

Wenn du eigene Platinen verwenden willst: die M0(+) gibt es in kleineren 
Gehäusen, vom M7 gibt einen einzigen mit 100 Pins, Auswahl gibt's mit 
176 oder mehr. Vom M4 gibt es immerhin 2 oder 3 im LQFP-32, mit 0.8mm 
Pitch das bastlerfreundlichste Gehäuse. Okay, das gilt nur für ST, 
andere Hersteller gibt's auch noch.

Der M7 kann double, der M4 "nur" float in Hardware. Andererseits haben 
die M0 nicht einmal einen Befehl für Integer-Division. Ansonsten gibt es 
zwischen M7 und M4 vor allem kleine, subtile Unterschiede, z.B.
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka16867.html

https://en.wikipedia.org/wiki/ARM_Cortex-M

von Stefan F. (Gast)


Lesenswert?

Zu M7 kann ich nicht sagen.

Für den Anfang sind die Unterschiede zwischen den Cortex M0, M3 und M4 
marginal - kaum wahrnehmbar.

Wesentlich größer sind die Unterschiede der STM32 spezifischen Periherie 
um den Kern herum. Es fängt schon mit der Taktkonfiguration und GPIO 
Pins an.

Jede Serie ist da etwas anders, aber nur in den Details. Insofern lernst 
du nicht vergebens, wenn du mit irgendeiner Serie anfängst.

Auf meiner Homepage (die ich oben verlinkt hatte) kannst du die 
Codeschnipsel vergleichen, da siehst die großen Ähnlichkeiten und die 
kleinen Unterschiede.

von Johannes S. (Gast)


Lesenswert?

Aus Kostengründen ist es für Hobby ziemlich egal ob M3 oder M4, ST wirft 
die Komponenten billig in den Markt. Ein Bluepill ähnliches Board mit 
F401 oder F411 kostet auch nur ca. 3€, etwas größer wo direkt ein TFT 
draufgesteckt werden kann kostet <10€. Beide haben nur keinen STLink 
drauf, deshalb sind für den Anfang die Nucleo besser. Auch wenn W.S. da 
immer rumheult, kein anderer bietet soviel HW und SW für kleines Geld 
und was will der Hobbyist mehr?
Für kleine Steuerungen/Ledblinker/Sensoren sind M0(+) interessant weil 
es die in kleineren Gehäusen gibt.

von Dennis (Gast)


Lesenswert?

Mein STM32F072 Nucleo Board ist heute angekommen, das Board ist 
sozusagen zweigeteilt, vorne soll anscheinend der ST-Link sein und 
hinten der Controller. Habe gelesen, dass man den ST-Link abbrechen 
kann? Es sieht arg unstabil aus, so als könnte es leicht abbrechen.

von Harry L. (mysth)


Lesenswert?

Dennis schrieb:
> Habe gelesen, dass man den ST-Link abbrechen
> kann?

Ja, "kann" man - ist aber gerade für Anfänger nicht empfehlenswert, da 
der ST-Link u.A. den Systemtakt liefert.

Dennis schrieb:
> Es sieht arg unstabil aus, so als könnte es leicht abbrechen.

Keine Sorge!
Das ist deutlich stabiler als du denkst.

: Bearbeitet durch User
von Dennis (Gast)


Lesenswert?

Klasse danke, dann mache ich mir keine Gedanken drum, lasse aber dennoch 
etwas Vorsicht walten :-)

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Bauform B. schrieb:
> Der M7 kann double, der M4 "nur" float in Hardware.

Japp, dabei ist double aber ein optionales Feature.
Die STM32F7xx können daher nur float.
Die STM32H7xx können dann double.

von Stefan F. (Gast)


Lesenswert?

Dennis schrieb:
> Es sieht arg unstabil aus, so als könnte es leicht abbrechen.

Ja, finde ich auch. Deswegen lasse ich das Board in der 
Originalverpackung und habe mir doch Löcher rein geschnitten, wo ich 
welche brauche. Zum Experimentieren mit fliegendem Aufbau ist das so 
sicherer.

Wenn er abbricht, ist kein Beinbruch, denn auf beiden Boards sind alle 
Pins (außer Takt) auf die Stiftleisten herausgeführt. Einen Quarz kann 
man nachrüsten, wenn man nicht den R/C Oszillator benutzen will/kann.

von Christopher J. (christopher_j23)


Lesenswert?

Mw E. schrieb:
> Die STM32F7xx können daher nur float.
> Die STM32H7xx können dann double.

Ich meine so allgemein kann man das nicht sagen. Wenn ich mich recht 
erinnere kann z.B. ein F767 auch double precision mittels FPU.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

> Core: Arm® 32-bit Cortex®-M7 CPU with DPFPU

Die ganz großen habens dann also doch.
Gleuchzeitig dazu noch: 765/768/769/777/778/779

Ein 730/750 kanns nämlich nicht.

von Axel S. (a-za-z0-9)


Lesenswert?

Christopher J. schrieb:
> Mw E. schrieb:
>> Die STM32F7xx können daher nur float.
>> Die STM32H7xx können dann double.
>
> Ich meine so allgemein kann man das nicht sagen. Wenn ich mich recht
> erinnere kann z.B. ein F767 auch double precision mittels FPU.

Wenn man in C programmiert (werden wohl 99% der hier Mitlesenden tun) 
dann wird daraus ein reines Geschwindigkeitsproblem. Wenn die Hardware 
kein floating point kann, dann linkt man eben die passende Lib dazu. Das 
Programm bleibt dabei zu 100% gleich. Das ist mal ein ganz klarer Punkt 
für C.

von Bauform B. (bauformb)


Lesenswert?

Axel S. schrieb:
> Wenn die Hardware kein floating point kann, dann linkt man eben
> die passende Lib dazu. Das Programm bleibt dabei zu 100% gleich.

Eben nicht, weil eine fette Lib zusätzlich drin steckt. Na gut, Flash 
hat man ja, aber für mich wäre das die erste und einzige fremde Lib. Ich 
müsste mich mit Lizenzen beschäftigen und Linker Script und crt0 und 
was-weiß-ich werden viel komplizierter :(

von Stefan F. (Gast)


Lesenswert?

Bauform B. schrieb:
> für mich wäre das die erste und einzige fremde Lib.

Ich wette, dass du auch die libc (oder avr-libc) implizit eingebunden 
hast.

von Bauform B. (bauformb)


Lesenswert?

Stefanus F. schrieb:
> Bauform B. schrieb:
>> für mich wäre das die erste und einzige fremde Lib.
>
> Ich wette, dass du auch die libc (oder avr-libc) implizit eingebunden
> hast.

Leider verloren ;)
1
CFLAGS += -mthumb -mcpu=cortex-m3 -ffreestanding -falign-functions=4
2
LDFLAGS += -nostdlib

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Bauform B. schrieb:
> Ich
> müsste mich mit Lizenzen beschäftigen

Die Lizenz der Standard-Bibliothek erlaubt so ziemlich alles, außer die 
Urheber in Haftung zu nehmen...

Bauform B. schrieb:
> und Linker Script und crt0 und
> was-weiß-ich werden viel komplizierter :(

Nö, das kann man alles 1:1 übernehmen. Du musst nur mit "-lm" linken.

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.