STM32 + CMSIS + STM32CubeIDE

Hier erkläre ich Ihnen, wie Sie mit der "nativen" IDE für STM-Mikrocontroller - STM32CubeIDE - ein Minimalprojekt auf CMSIS erstellen.

Vielleicht hat STM32CubeIDE eine Reihe von Nachteilen, aber meiner Meinung nach hat es mehrere Vorteile - wie proprietär und kostenlos, für die Sie zumindest dieser Entwicklungsumgebung Aufmerksamkeit schenken sollten, wenn Sie dies noch nicht getan haben.



Der STM32F072-Mikrocontroller mit dem ARM Cortex-M0-Kern wurde als Gegenstand der Firmware für den bekannteren STM32F103 auf dem ARM Cortex-M3 ausgewählt, korrigiert für den Kern, der Vorgang ist identisch.

Alle erforderlichen Ressourcen können von st.com heruntergeladen werden. Folgendes benötigen Sie:

  • IDE selbst , ich benutze die Windows-Version, aber Versionen für Mac und Linux sind auch verfügbar

  • Die CMSIS-Bibliothek für ARM Cortex-M0 befindet sich im STM32CubeFx-Archiv, aufgeschlüsselt nach Kernel-Version. Das Archiv selbst enthält neben CMSIS eine Vielzahl weiterer Ressourcen, von Beispielen für die Arbeit mit Peripheriegeräten bis hin zu USB-Treibern. Dieses Archiv wird tatsächlich verwendet, wenn Sie ein Projekt mit STM32Cube erstellen

  • Datenblatt und Referenzhandbuch werden nicht schaden


Nach der Installation, dem Starten und Auswählen des Arbeitsbereichsordners können Sie mit dem Erstellen des Projekts beginnen. Derzeit ist STM32CubeIDE Version 1.1.0, daher sollte der Speicherort der verschiedenen Einstellungen darauf basieren.

Erstellen eines neuen Projekts - Datei / Neu / STM32Project . Nach einiger Überlegung erscheint das Fenster zur Auswahl des Mikrocontrollers. In meinem Fall ist es STM32F072RB im LQFP64-Paket. Ich wähle die gewünschte Zeile aus und klicke auf Weiter. Es wird weiterhin vorgeschlagen, den Projektnamen, den Speicherort, die C / C ++ - Programmiersprache, die ausführbare Datei / statische Bibliothek und die Angabe zu wählen, ob das Projekt mit CubeMX oder mit einem Schnurrbart generiert werden soll. Die Cube-Generierung ist in diesem Fall nicht erforderlich, daher ist der Projekttyp Leer das Ende.




Links im Projekt-Explorer- Fenster wurde der Projektbaum angezeigt, obwohl er nicht ganz leer ist. Wenn die generierte Ordnerstruktur Ihren Vorstellungen entspricht, können Sie dort Dateien aus der CMSIS-Bibliothek hinzufügen und bearbeiten. Hier werde ich jedoch zeigen, wie Sie die Projektstruktur mit meinem Sinn für Schönheit in Einklang bringen können, sodass alles außer dem Linker-Skript gelöscht wird, d. H. Datei mit der Endung .ld - es wird sich als nützlich erweisen.



Alle Manipulationen mit Ordnern und Dateien können sowohl im Explorer als auch in der IDE durch einen Rechtsklick auf den Projektnamen durchgeführt werden, zum Beispiel: Rechte Maustaste -> Neu -> Ordner . Wenn sich die Projektstruktur außerhalb der IDE geändert hat, müssen Sie nur das Projekt aktualisieren: Rechte Maustaste -> Aktualisieren.

Meine Version der Projektstruktur sieht folgendermaßen aus:

  • Startup - Hier wird das Linker-Skript gespeichert, das aus dem generierten Projekt übrig bleibt, sowie die Startdatei, die aus CMSIS stammt
  • CMSIS \ src und CMSIS \ inc - Hierbei handelt es sich um die Quelle, Dateien mit der Erweiterung .c im Ordner scr und Header-Dateien mit der Erweiterung .h im Ordner inc , die sich auf die CMSIS-Bibliothek beziehen
  • Core \ src und Core \ inc - das Projekt selbst befindet sich hier. Für den Anfang geben Sie main.c und main.h ein


Jetzt müssen Sie die CMSIS-Bibliotheksdateien in das Projekt übertragen. Die Bibliothek besteht aus Kerndateien und Peripheriedateien. Kerneldateien beginnen mit core_ oder cmsis_ und sind allen Mikrocontrollern gemeinsam, die diesen Kernel verwenden. Peripheriedateien enthalten den Namen des Mikrocontrollers stm32 im Namen und sind herstellerspezifisch, in diesem Fall die Firma STM.

In der entpackten Form enthält das Archiv den Ordner STM32Cube_FW_F0_V1.11.0 , alle Pfade sind relativ zu diesem Ordner. Insgesamt müssen Sie kopieren:

In CMSIS \ inc :

  • Treiber \ CMSIS \ Include \ cmsis_compiler.h
  • Treiber \ CMSIS \ Include \ cmsis_gcc.h
  • Treiber \ CMSIS \ Include \ cmsis_version.h
  • Treiber \ CMSIS \ Include \ core_cm0.h
  • Treiber \ CMSIS \ Gerät \ ST \ STM32F0xx \ Include \ stmf0xx.h
  • Treiber \ CMSIS \ Gerät \ ST \ STM32F0xx \ Include \ stm32f072xb.h
  • Treiber \ CMSIS \ Gerät \ ST \ STM32F0xx \ Include \ system_stm32f0xx.h

In CMSIS \ src :

  • Treiber \ CMSIS \ Gerät \ ST \ STM32F0xx \ Source \ Templates \ system_stm32f0xx.c

Im Startup:

  • Treiber \ CMSIS \ Gerät \ ST \ STM32F0xx \ Source \ Templates \ gcc \ startup_stm32f072xb.s

So sieht das Projekt in seiner fertigen Form aus.


Da einige Manipulationen an den Projektordnern vorgenommen wurden, müssen Sie diese in den Einstellungen anzeigen.

Die rechte Schaltfläche für den Projektnamen -> Eigenschaften -> C / C ++ Build -> Einstellungen -> Werkzeugeinstellungen -> MCU GCC Linker -> Allgemein - hier müssen Sie den neuen Speicherort des Linker-Skripts über die Schaltfläche Durchsuchen ... angeben


Sie müssen auch den Pfad zu den Projektdateien angeben

Eigenschaften -> C / C ++ Allgemein -> Includes
Eigenschaften -> C / C ++ Allgemein -> Quellspeicherort

In Includes- Pfade zu Inc- Ordnern und im Quellspeicherort wäre es logisch, src- Ordner zu verwenden. Wenn Sie dies jedoch tun, werden diese Ordner dem Projektbaum separat hinzugefügt. Um den Baum optisch nicht zu überladen , können Sie im Quellverzeichnis die Stammordner Core , CMSIS und Startup angeben.



Damit das Projekt kompiliert werden kann, müssen Sie die Zeile mit dem Namen des Mikrocontrollers in der Datei stm32f0xx.h auskommentieren und natürlich die Hauptfunktion in main.c hinzufügen.



Eigentlich alles. Eine fehlerfreie Kompilierung und das sofortige Verschwinden von bis zu eineinhalb Kilobyte RAM ist RAM, und sofort, wenn der Stack und der Heap gespeichert werden, wurden sie bei der Erstellung des Projekts nirgendwo erwähnt. Die Größe des Stacks und des Heapspeichers wird in der Linker-Skriptdatei angegeben, die die Erweiterung .ld hat. Sie kann und sollte entsprechend den Anforderungen des Projekts geändert werden. Diese Werte befinden sich am Anfang der Datei in Form von Beschriftungen _Min_Heap_Size / _Min_Stack_Size mit der Größe in hexadezimaler Schreibweise .



Als Beispiel gebe ich ein kleines Projekt eines traditionellen LED-Blinkens.

Die LED auf der STM32F072B-DISCO-Debug-Karte blinkt, die Taktung wird von einem internen HSI48-Generator mit einer Frequenz von 48 MHz ausgeführt und der SysTick-Timer wird als Verzögerungsquelle verwendet, wodurch Interrupts mit einer Dauer von 1 ms generiert werden, mit der die genaue Verzögerungszeit gezählt wird. Die LED ist an Pin 6 von Port C angeschlossen, der für den Gegentaktausgang konfiguriert ist.

Ich hoffe, diese Informationen sind für jemanden nützlich, weil Trotz der Fülle an STM32-Programmiermaterialien musste ich früher viele Handbücher schaufeln, um Dinge zu realisieren, die jetzt offensichtlich erscheinen.

Source: https://habr.com/ru/post/de481478/


All Articles