Zitat Zitat von White_Fox Beitrag anzeigen
Jetzt hab ich mal aus Spaß einfach die letzten beiden Zeilen meines Vorposters stumpf in die main-Funktion kopiert. Wider Erwarten kommt keine Fehlermeldung was mich jetzt wiederum zu der Frage führt: Brauch ich die GPIO-Dateien um die Pins wackeln zu lassen? (Offenbar ist dem ja aber so.) Wenn ich die GPIO-Bibliothek dafür nicht brauche, wofür sind die dann gut?

Edit:
Gemeint ist natürlich die stm32f4xx_gpio.h.

Habe mich vielleicht ein bisschen unklar ausgedrückt:

Die stm32f4xx_gpio.h brauchst Du nur, wenn Du die - meiner Meinung nach abgrundtief schlechte - ST-Library nutzt. Dann musst Du diesen ganzen Unsinn mit dem Strukturen-Füllen machen.

Wenn Du aber die Register direkt beschreibst, dann kannst Du die ganzen anderen Includes weglassen. Ausschließlich die Definitionen aus der stm32f446xx.h sind nötig, damit Du die Register und Bits mit Namen ansprechen kannst.
Für den reinen Cortex-Kern kannst Du noch die CMSIS-Header einbinden.

Bei meinen Projekten mache ich es grundsätzlich so:
Von ST nutze ich:
- stm32f446xx.h
- Die CMSIS-Includes (also die core_cm4.h includen)
- startup_stm32f446xx.s (Hier stehen die Deklarationen für die Interrupthandler drin sowie der Assemblercode für die Initialisierung der statischen Variable, etc.)

Das war es auch schon.
Die Initialisierung der MCU mache ich komplett selber.
In der startup_stm32f446xx.s wird zuerst die Funktion SystemInit aufgerufen, danach dann die Funktion main.

In der von mir erstellten Funktion SystemInit initialisiere ich die MCU. Also zuerst aktiviere ich die Caches, konfiguriere den Prefetch und die Waitstates.
Anschließend konfiguriere ich die PLLs und schalte auf die entsprechende Taktquelle (meistens HSE, entweder extern -> Nucleo oder Quarz) um.

Ob man dann die Peripherie wie GPIOs, Timer, Systick, etc. in der SystemInit konfiguriert oder erst später, ist dann Geschmackssache.