Um zu lernen, wie es funktioniert, möchten Sie keines der oben genannten verwenden. Holen Sie sich einen Arm Cross Compiler und die Dokumentation von st, fertig. Starten Sie die Codierung. Diese Chips sind in der Regel sehr einfach zu programmieren. In der Dokumentation erfahren Sie, welche Bits in welchen Registern was bewirken.
Alle diese Bibliotheken sollen Ihnen das Verständnis / die Last / die Arbeit nehmen und das Gefühl vermitteln, eine API-ähnliche Anwendungsprogrammiererfahrung zu haben. Welches ist, was viele Leute wollen. Sie können den gesamten Quellcode für diese Bibliotheken verwenden, um das Verständnis zu verbessern. Wenn Sie jedoch besser werden, finden Sie Lücken und Probleme in den Bibliotheken, manchmal sehr beängstigenden Code. Code wurde zusammen geworfen, generisch geschrieben und grob von einem Chip auf einen anderen portiert. Möglicherweise werden Funktionen unterstützt, die Ihr Chip nicht hat usw. Und alle haben einen übermäßigen Overhead. 10- bis 100-mal zu viel Code für die Aufgabe, sicher, dass viel davon wegoptimiert wird, aber warum ist er überhaupt da?
Unabhängig davon, ob Sie eine eigene oder eine dieser Bibliotheken verwenden, sollten Sie sich die Quelle der von Ihnen verwendeten Bibliotheken ansehen, um festzustellen, ob Sie mit ihren Funktionen vertraut sind, ob sie sinnvoll sind, mit der Dokumentation des Chips übereinstimmen usw. Wenn etwas schief geht, müssen Sie wahrscheinlich so viel durch ihre Sachen wie Ihre graben, um herauszufinden, warum.
Beachten Sie, dass die Chip-Dokumente auch nicht perfekt sind, das ist ein Teil des Spaßes.
Ich verstehe nicht, warum Baugruppen in einer Diskussion über Bare-Metal-Programmierung auftauchen. Sie kommen mit sehr wenig Montage aus. Für diese Cortex-M-Chips benötigen Sie technisch gesehen nur so viel Asm, um gebootet zu werden:
.globl _start
_start:
.word 0x20001000
.word main
Sie können sich weder auf Daten noch auf BSS verlassen, und Sie können nicht mit einem Minimum an Asm von Main zurückkehren. Aber das ist alles, was Sie für die Barest of Bare Metal brauchen. Wenn Sie nun Interrupts ausführen möchten, benötigen Sie weitere Einträge in der Vektortabelle. mehr .word Zeilen. Ich empfehle mehr asm, aber vielleicht 10 oder 20 Zeilen mehr.
Das ist normalerweise alles, was ich benutze.
.cpu cortex-m0
.thumb
.thumb_func
.global _start
_start:
stacktop: .word 0x20001000
.word reset
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.word hang
.thumb_func
reset:
bl notmain
b hang
.thumb_func
hang: b .
.align
.thumb_func
.globl PUT16
PUT16:
strh r1,[r0]
bx lr
.thumb_func
.globl PUT32
PUT32:
str r1,[r0]
bx lr
.thumb_func
.globl GET32
GET32:
ldr r0,[r0]
bx lr
.thumb_func
.globl GET16
GET16:
ldrh r0,[r0]
bx lr
.thumb_func
.globl dummy
dummy:
bx lr
.end
Ja, es heißt Cortex-m0, aber dies ist der eigentliche Bootstrap für meinen M4-Code. Ich bevorzuge es, daumen nicht daumen2 zu sein. Und ich verwende diesen Code einfach von einem Kortex-m zum anderen und ändere die Stapelzeigeradresse nach Bedarf, sodass er für m0, m3 und m4 funktioniert. Ich habe noch kein m7 und habe auch nicht viel recherchiert.
Für die Aktivierung der fpu sind möglicherweise einige Zeilen mehr erforderlich, da spezielle Anweisungen erforderlich sind. Aber der Punkt ist nicht zu verwechseln Low-Level-Programmierung und asm. C hat alles, was Sie brauchen, um den Chip zu konfigurieren und eine Anwendung zu schreiben. Die Bibliotheken, von denen Sie sprechen, sind in C und nicht in asm geschrieben, daher müssen sie offensichtlich auch nicht asm verwenden.
Wenn Sie das Innenleben lernen möchten, schreiben Sie Ihren eigenen Code. Verwenden Sie diese Bibliotheken nur als Referenz. Manchmal ist es einfacher, es einfach zu hacken, als zu versuchen, ihren Code zu lesen. (Nicht nur ST, sondern alle Anbieter. Einer der Anbieter hatte eine Codezeile, die so alarmierend ist, dass ich sie als Interviewfrage verwende, dass ich sie hier nicht veröffentlichen werde.)
Um Strom zu sparen, haben aber definitiv auch andere Hersteller Taktfreigaben für Teile des Chips. Bevor Sie also hineingehen und versuchen, eine LED zu blinken, müssen Sie das Freigabebit für diesen GPIO-Block finden und sehen, ob es herauskommt of reset enabled, wenn nicht, aktivieren Sie es. Wenn Sie mit dieser gpio-Logik sprechen, ohne dass eine Uhr aktiviert ist, hängt sie den Prozessor einfach auf, während er auf eine Antwort von der Logik wartet, die niemals antwortet. Sie erzählen nicht immer von diesen Möglichkeiten. Einmal aktiviert, werden Sie manchmal durch das Init für ein bestimmtes Peripheriegerät geführt. ST-Dokumente sind ziemlich gut. Wenn Sie von einem Mikrochip kommen, der eine ziemlich schlechte Bewertung für die Dokumentation erhält, sollten Sie kein Problem haben.
Libraries/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
oder inDrivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
.