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.
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
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.
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 :-)
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.
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.
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.
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.
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).
Hallo, die Cypress PSOC sind cool, jede Menge Tutorials,... fix und fertige IDE. Grüsse, Seppel
Was würde denn gegen einen M4 oder M7 sprechen ist das fürs Hobby zu übertrieben?
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.
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 :-)
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
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
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
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.
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.
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.
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
Klasse danke, dann mache ich mir keine Gedanken drum, lasse aber dennoch etwas Vorsicht walten :-)
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.
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.
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.
> 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.
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.
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 :(
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.
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 |
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.