Das mag wie eine dumme Frage klingen, aber wie lernt man ein STM32 zu programmieren? Wo fängt man an? Man schaut sich ein zwei Beispiele an und dann? Man will ja mehr als nur das was die paar Beispiele zeigen. Wie soll man aus einem Datenblatt wissen welche Befehle wie zu benutzen sind? Man kann doch nicht anhand von ein paar Beispielen, die es im Internet in 100 verschiedenen Varianten gibt, irgendwas wirklich lernen. Langsam habe ich das Gefühl, alle die solche Mikrocontroller benutzen bekommen von ihren Arbeitgebern bezahlte Schulungen. Wieso gibt es kein einziges Buch über die Programmierung mit CMSIS?
The Definitive Guide to ARM® Cortex®-M3 and Cortex®-M4 Processors https://www.amazon.de/gp/aw/d/B00G9856GU/ref=aw_ss_kndl_dp/
Du hast doch schon eine Bibliothek, die man benutzen kann, erwähnt. Dort stehen eigentlich alle grundlegende Sachen wie man es benutzt bzw. ansteuert. Programmiert wird in C, eventuell optimieren manche noch in Assambler.
Schau mal bei http://stm32duino.com Da ist die Idee einfach, dass man seine Arduino Kenntnisse weiternutzen kann. Bleibst in der Arduino IDE usw.
Hugo345 schrieb: > Das mag wie eine dumme Frage klingen, aber wie lernt man ein STM32 zu > programmieren? Die Frage ist wirklich dumm. Denn was soll "programmieren" denn genau bedeuten? In welcher Programmiersprache denn z.B.? Und dann gibt es da ja auch noch jede Menge Einzelschritte: das Programm schreiben, es übersetzen, es auf den µC laden, es evtl. debuggen. Da mußt du schon ein bißchen spezifischer sein, was davon du denn lernen willst. > Wo fängt man an? Auch das hängt wesentlich davon ab, in welcher Programmiersprache man programmieren will. Wenn es Assembler sein soll, dann wird man nicht darum herum kommen, sich mal das programmer model - also die vorhandenen Register und den Befehlssatz - anzusehen. Wenn man C programmieren will, dann ist das optional. Soll heißen, daß es zumindest am Anfang nicht hilft. Was man in jedem Fall braucht, sind Angaben über vorhandene Peripherie und wie man die anspricht. Wobei sich natürlich auch hier die Details wieder wesentlich unterscheiden, je nachdem welche Programmiersprache es denn sein soll. > Man schaut sich ein zwei Beispiele an und dann? Man will ja mehr als nur > das was die paar Beispiele zeigen. Was denn nun wieder für Beispiele? Man kann natürlich ein Tutorial abarbeiten und versuchen die Beispiele daraus nachzuvollziehen. Aber diese Beispiele sind nur ein winziger Teil des Puzzles, mehr so eine Art Hands-on Training. Zuerst mal muß man sich einen groben Überblick über die Architektur und die Toolchain verschaffen. Und dann muß man sich die Details anschauen. Am besten an realen Aufgabenstellungen. Eine LED blinken lassen. Ein echo-Device per UART bauen. Ein Display ansteuern. Was auch immer dir einfällt. > Wie soll man aus einem Datenblatt wissen welche Befehle wie zu benutzen > sind? Diese Frage ist nun wirklich unsinnig. Du hast ein Ziel das du erreichen willst. Und eine Menge an möglichen Befehlen. Da gibt es immer mehrere Wege, wie du zum Ziel kommst. Ähnlich wie wenn du Autofahren lernst. Da lernst du im Prinzip auch nur beschleunigen, bremsen und geradeaus/links/rechts fahren. Damit kannst du dann prinzipiell zu jedem Ziel kommen. Trotzdem wird kein Mensch der Welt die Vorstellung haben, er würde in der Fahrschule lernen, wie er mit dem Auto von Berlin nach München kommt. > Langsam habe ich das Gefühl, alle die solche Mikrocontroller benutzen > bekommen von ihren Arbeitgebern bezahlte Schulungen. Blödsinn. Ich lese bspw. gerade "The Definitive Guide To ARM Cortex M3 And M4 Processors". Außerdem habe ich ein STM32 Evalboard hier liegen (neben einem geschenkt gekriegten XMC2Go). Das Buch habe ich mir gekauft, nachdem die ganzen Einführungen, Tutorials etc. daran gescheitert sind mir einen allgemeinen Überblick zu vermitteln. Statt dessen wollte mir der eine seine Cortexe verkaufen, der andere seine IDE promoten. Ich will aber keinen Codegenerator a'la DAVE und keine IDE die nur unter Windows (würg) läuft. Weil keines dieser Tools mir zeigt (zeigen will) was da unter der Oberfläche passiert. Die verbergen die Details und behaupten gar noch, mir damit etwas Gutes tun zu wollen. Danke, aber NEIN danke. Ich bin schon groß. Ich kann Makefiles schreiben oder den Linker von der Kommandozeile aufrufen. Und ich weiß auch daß der Debugger nicht beißt, auch dann wenn er kein GUI hat. > Wieso gibt es kein einziges Buch über die Programmierung mit CMSIS? Das o.g. Buch streift auch CMSIS. Ansonsten gibts dafür Manuals (fette) sowohl bei www.arm.com als auch von den jeweiligen µC-Herstellern. Denn die müssen ja schließlich eine CMSIS-Implementierung für ihre µC anbieten. Und zumindest ST dokumentiert die auch. Aber natürlich muß CMSIS sowohl zum µC als auch zur Toolchain passen. Die spannende Frage ist also vielmehr: "wo kriege ich CMSIS für meinen µC her und wie binde ich es in meine Toolchain ein". Und nicht "welche Headerfiles gibt es und welche Objekte definieren die?".
Hugo345 schrieb: > Das mag wie eine dumme Frage klingen, aber wie lernt man ein STM32 > zu programmieren? Ganz einfach: Indem man sich einen STM32 besorgt (bevorzugt auf einer funktionierenden Hardwareplattform) und einfach mal anfängt. > Wo fängt man an? Da, wo alle anderen auch anfangen: - eine LED blinken lassen - zwei LEDs gleichzeitig und abwechselnd blinken lassen - drei LEDs blinken lassen, als Lauflicht - den Timer benutzen, um eine LED blinken zu lassen - den Timer benutzen, um zwei LEDs mit verschiedenen Geschwindigkeiten blinken zu lassen - den Timer benutzen, um eine LED langsam faden zu lassen (PWM) - einen Knopfdruck auswerten und die Richtung des Lauflichts umkehren - einen Knopfdruck per Interrupt auswerten - einen Lautsprecher zum Piepen bringen - einen Lautsprecher eine Melodie spielen lassen - einen Lautsprecher eine Melodie spielen lassen und gleichzeitig das Lauflicht spielen lassen - mit der UART eine Verbindung zu einem Computer aufbauen und Zeichen hin- und herschicken - die UART gepuffert und interruptgesteuert benutzen Wenn du das geschafft hast, hast du erstmal genug Grundlagen, dass du du solche Fragen nicht mehr zu stellen brauchst. :-) > Wie soll man aus einem Datenblatt wissen welche Befehle wie zu benutzen > sind? Der aus meiner Sicht beste Trick wäre, einfach einen C-Compiler zu benutzen. Den fütterst du mit C-Code (ist immer sinnvoll, wenn man C einigermaßen kann), und der kümmert sich dann darum, welche Befehle man wie möglichst elegant verknotet. > Man kann doch nicht anhand von ein paar Beispielen, die es im Internet > in 100 verschiedenen Varianten gibt, irgendwas wirklich lernen. Soll man auch nicht. Man soll aus diesen Beispielen lernen, wie man die Grundlagen, die man sowieso schon können sollte, von einem Gebiet auf ein anderes Gebiet transportiert. Normalerweise programmiert man einen Controller nicht, um ihn zu programmieren. Man programmiert ihn, um Probleme zu lösen. > Wieso gibt es kein einziges Buch über die Programmierung mit CMSIS? Keine Ahnung. Mich interessieren vom CMSIS nur die Registerbeschreibungs-Header; der Startup-Code ist eh für jedes Board unterschiedlich, und die riesigen Bibliotheken (egal ob STs Peripheral Library oder Atmels ASF) mag ich nicht besonders. Wobei es nervig ist, die notwendigen Header aus den Bibliotheken rauszupulen, ohne sich den restlichen Mist einzutreten... :-(
Full ACK zu meinem Vorschreiber. Ich kam vom AVR (mit ASM und C-Erfahrung) und habe zuerst mal die Referenz der CPU (also Cortex-Mx) angeschaut (und entschieden diese NICHT in Assembler programmieren zu wollen). Danach die Reference-Manuals des Herstellers zu den Controllern bzw. den Peripherie-Blöcken. Dann einfach mit einem STM32Discovery angefangen kleinere Sachen auszuprobieren mit dem CooCox IDE. Ein bisschen trial und error, diverse "Aha!" Effekte gehabt. Danach auf die emBlocks IDE umgestiegen und ein kleines Projekt gemacht. Mit CMSIS konnte ich mich auch noch nicht anfreunden, leider sind die Definitionen in den Header-Files bei ST nicht ganz so schön wie bei Atmel.
Hugo345 schrieb: > Langsam habe ich das Gefühl, alle die solche Mikrocontroller benutzen > bekommen von ihren Arbeitgebern bezahlte Schulungen. Wie bitte? In welcher Welt lebst du eigentlich? HEUTE ist es so, dass du alles (also fast alles) schon können musst. Die Wirtschaft hat keine Zeit und kein Interesse ihre Angestellten bei solch "banalen" Dingen noch eine Ausbildung zu bezahlen. Wie lehrnt man einen STM32 zu programmieren? Einfach ein Projekt nehmen und dann Schritt für Schritt vorgehen: - LED/Taster setzen und einlesen - Peripherie ansteuern (einfach) - Peripherie mit Zusätzen ansteuern (ADC über Timer triggern, DMA) - Displays, Speicherkarte - USB, LAN ... Such dir ein eigenes Heimprojekt und mach das ganze einfach ganz langsam. Noch eine gute Quelle: http://diller-technologies.de/stm32.html
Hugo345 schrieb: > Das mag wie eine dumme Frage klingen, aber wie lernt man ein STM32 zu > programmieren? > Wo fängt man an? Was sind deine Vorkenntnisse? Aus meiner Sicht sollte man zuerst C gelernt haben, damit man die Beispiele zumindest ansatzweise versteht.
Ich muss da gerade an unseren (älteren) Ausbilder denken: "Programmieren tut man nicht mit dem Rechner sondern mit einem Stift und Block" Ja, er hatte Recht!
Bastler schrieb: > "Programmieren > tut man nicht mit dem Rechner sondern mit einem Stift und Block" > > Ja, er hatte Recht! Dem stimme ich auch uneingeschränkt zu :-) (mit ca. 20 Jahren Programmiererfahrung in C und ASM)
O je. Natürlich kann man hier seine eigene Herangehensweise posten oder mit einem Bonmot kontern: "start at the beginning and go until you come to the end. then stop!" Hugo345 schrieb: > Das mag wie eine dumme Frage klingen, aber wie lernt man ein STM32 zu > programmieren? Du solltest nicht fragen, wie man ihn programmiert, sondern wie man ihn benutzt. Das ist die eigentliche Frage. Programmieren tut man ihn per Programmiersprache eigener Wahl - wobei selbige eher mager ausfällt: die Alternativen kann man an einer Hand abzählen. > Wo fängt man an? Das ist eine wesentlich wichtigere Frage. Fange du mit dem Lesen des Manuals zum konkreten µC an. STM32xxx gibt es viele - und du solltest dich nicht bloß auf die Chips von ST beschränken. Lies auch mal was von vergleichbaren µC von NXP, denn deren Doku ist an vielen Stellen besser les- und anwendbar. Fange bei den Kapiteln über die grundlegenden Chipteile an, also Takt(e) aufsetzen (ja, zumeist gibt es mehrere), Portpins konfigurieren, Memory-Map verstehen, vorgesehene Programmiermethoden verstehen (SWD oder Bootlader oder USB usw.) und so. Laß vorerst die komplizierteren Peripheriecores aus, das liest du später. > Man schaut sich ein zwei Beispiele an und dann? Man will ja mehr als nur > das was die paar Beispiele zeigen. Einfach bloß ein paar Beispiele am Anfang ist mit Abstand das Verkehrteste von allem. Laß das lieber bleiben, denn dort wird man zumeist auf irgend eine blöde Schiene gesetzt, von der man sich später erst wieder lösen muß um nicht drin zu ersaufen. > Wie soll man aus einem Datenblatt wissen welche Befehle wie zu benutzen > sind? Redest du jetzt vom Maschinencode? Bei den Cortexen steht das eigentlich NIE im Manual zum Chip, sondern man muß es bei ARM passend zur jeweiligen Architektur herunteraden. Ja, solltest du auch tun, schon deswegen, daß du einen Begriff bekommst, was für eine CPU du dort auf dem Chip hast und wie sie aus Programmierer's Sicht funktioniert. > Man kann doch nicht anhand von ein paar Beispielen, die es im Internet > in 100 verschiedenen Varianten gibt, irgendwas wirklich lernen. Wirklich lernen kann man aus den jeweiligen Referenzmanuals zum konkreten Chip. Beispiele in 100 Varianten hingegen sind zumeist dubios. > Langsam habe ich das Gefühl, alle die solche Mikrocontroller benutzen > bekommen von ihren Arbeitgebern bezahlte Schulungen. HÄ??? Den Gedanken kannst du gleich wieder beenden. Die allermeisten hier (und anderswo) haben sich das, was sie können, aus eigener Kraft selbst beigebracht - zumeist in ihrer Freizeit. Das ist zumindest für mich auch ein gewisses Kriterium, ob jemand für den Beruf taugt oder nicht. Entweder ist der Beruf eine innere Berufung - oder derjenige sollte lieber Beamter werden. Punkt. > Wieso gibt es kein einziges Buch über die Programmierung mit CMSIS? Weil man diesen Schmonzes im Grunde überhaupt nicht braucht. Was man braucht, ist eine Info über die in der Hardware angeordneten Register, so daß man sie aus seinem Programm heraus erreichen kann. Was man mit diesen Registern tut, liest man im Manual. W.S.
Hallo, >> Wo fängt man an? > Das ist eine wesentlich wichtigere Frage. Fange du mit dem Lesen des > Manuals zum konkreten µC an. STM32xxx gibt es viele - und du solltest > dich nicht bloß auf die Chips von ST beschränken. Lies auch mal was > von vergleichbaren µC von NXP, denn deren Doku ist an vielen Stellen > besser les- und anwendbar. "Lies erstmal 4000 Seiten Dokumentation." :-) Ich wuerde ja ein zum Einstieg Buch empfehlen - da habe ich hier aber nur eins hier liegen ("Embedded Systems with ARM Cortex-M3 Microcontrollers in Assembly Language and C"). Das ist zwar an sich nur mäßig, geht aber einmal von vorne bis hinten durch das STM32L-Discovery durch. (Wurde hier in der Lehre benutzt.) Es hängt natürlich von den Vorkenntnissen ab, wieviel man neu lernen muss. > Fange bei den Kapiteln über die grundlegenden Chipteile an, also Takt(e) > aufsetzen (ja, zumeist gibt es mehrere), Portpins konfigurieren, > Memory-Map verstehen, vorgesehene Programmiermethoden verstehen (SWD > oder Bootlader oder USB usw.) und so. Laß vorerst die komplizierteren > Peripheriecores aus, das liest du später. Gerade den Clock-Tree würde ich erstmal beiseite lassen. Wichtig ist, dass man die Peripheriebausteine mit (irgendeinem) Takt versorgt, sonst funktionieren die Buttons nicht richtig. Wenn man den Controller irgendwie zum LED-Blinken gebracht hat, kann man sich den immernoch vornehmen, um alles schneller zu machen. Gruß, Svenska
W.S. schrieb: > und du solltest > dich nicht bloß auf die Chips von ST beschränken. Das kann man nicht oft genug sagen. Ich werf jetzt zum Beispiel auch nochmal Freescale in die Runde, gerade die kleinen Kinetis z.B. MKL0 sind eigentlich noch sehr übersichtlich und gut zu durchschauen, nach kurzer Zeit genauso spielerisch einfach zu beherrschen wie die beliebten 8-bitter deren Namen ich jetzt nicht nennen mag. Trotz Einfachheit dieser simplen kleinen ARMs bekommst Du einen grundsätzlichen Einstieg in die ARM-Welt und viele Gegebenheiten dort. Eine große Hilfe gerade für die Erlangung eines erstmaligen Einblicks für mich war beispielsweise diese kleine aber äußerst feine Sammlung: https://github.com/0xc0170/kinetis_klxx_gcc Dort findest Du Beispielprojekte für verschiedene Kinetis-Typen und deren (preisgünstige!) Demo-Boards auf das allerwesentlichste eingedampft: * Makefile * Linkerscript * ein Headerfile für die ganzen Register * Startup.s * Systeminit.c * main.c für Blinky Das ist so stark aufs wirklich Essentielle eingedampft, kein Library-Overhead der vom Wesentlichen ablenkt, kein IDE-Zwang, nur der Compiler, der Linker das nackte Silizium und Du (und das Handbuch natürlich), diese handvoll wirklich überschaubaren Dateien kann man wirklich noch an ein zwei Wochenenden erschöpfend verstehen. Und DANN hat man den Einstieg. Und nach dieser low-level Erfahrung hat man dann auch gleich eine ganz andere Einstellung zu der ganzen Sache, dann macht einem auch kein STM32F4 mehr Angst und auch keine monströse CMSIS-HAL, dann kann man denen auf Augenhöhe gegenübertreten.
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.