Eclipse + GNU ARM + STM32 - HAL oder SPL

Ich werde mit der ARM-Entwicklung beginnen (nach 2 Jahren AVRs) und habe das STM DISCOVERY-Board mit dem stm32f4-Mikroprozessor darauf aufgegriffen.

Ich habe mich für Eclipse + ARM gcc entschieden, da mir das Code-Limit auf Keil nicht gefällt und ich nicht das Geld habe, um eine kostenpflichtige Version zu bekommen.

Nach den Tutorials habe ich Eclipse zusammen mit gcc ARM-Tools + openocd + make utils usw. installiert.

Meine Frage bezieht sich auf das Plugin "Pakete". Wie jeder Anfänger bin ich verwirrt, ob ich den neuen STM HAL oder den älteren SPL verwenden soll.

Mein Verständnis ist, dass HAL die Abstraktion auf einer Ebene implementiert hat, auf der sie als Arduino-Äquivalent für Arm bezeichnet werden kann. SPL hingegen bietet gerade genug Abstraktion, um die Codierung schneller zu machen, aber Sie müssen immer noch auf Chipebene arbeiten.

Mit diesem Verständnis möchte ich bei SPL bleiben, um die Dinge besser zu verstehen, anstatt HAL zu verwenden.

Was ich gerne wissen würde, ist, zwingt mich die Verwendung von Paketen für STM implizit dazu, HAL zu verwenden? Wenn ja, kann mir jemand zeigen, wie ich SPL mit meinem Setup verwenden kann?

"Die Tutorials" sind etwas vage, daher weiß ich nichts über "das 'Packages'-Plugin" und ich habe keine Ahnung, was SPL (STM-Peripheriebibliothek?) Oder SPCL ist. Vielleicht bin ich für diese Frage einfach nicht qualifiziert, aber die Arbeit mit STM32 seit über zwei Jahren hat mich gefragt ...
SPL ist Standard Peripheral Library , SPCL hingegen kenne ich auch nicht.
Die heute von STM bevorzugte und unterstützte Methode ist die Verwendung von STM32CubeMX, das auf HAL basierenden Code generiert. Und ich muss zugeben, dass es ziemlich praktisch ist, obwohl ich kein Fan von automatisierten Tools bin, da sie wichtige Dinge verstecken.
Obwohl es größtenteils mit anderen STM32-Prozessor-SPL-Versionen kompatibel sein sollte, glaube ich nicht, dass ST SPL für STM32F7 hat.
Entschuldigung für das SPCL-Bit. Das war ein Fehler. Ich muss mich immer noch an die Akronyme gewöhnen. Auch gerade noch einmal überprüft und mein Board ist die stm32f4-Variante. Ein weiterer Fehler. Bleibt noch die allgemeine Frage, wie verwende ich die Standard-Peripherie-Bibliothek mit Eclipse?
@EugenSch. Ich schätze und verstehe, dass es praktisch ist, aber ich denke, dass es für mich als Anfänger gut wäre, den tatsächlichen Details ausgesetzt zu werden, damit ich lernen kann. Sobald ich mich wohl fühle und weiß, was hinter den Kulissen vor sich geht, würde die Verwendung von HAL eine gute Zeitersparnis sein.

Antworten (3)

Wie ich sehe, hat die SPL nichts damit zu tun, welche IDE Sie verwenden. Sie können einfach die entsprechenden Module (z. B. stmf4xx_dma.c und stmf4xx_dma.h) in Ihr Projekt einbinden und die in den .c- und .h-Dateien bereitgestellten (und sehr gut beschriebenen) Funktionen verwenden. Tatsächlich habe ich auf dem stmf411 nucleo mit gcc, openocd und SPL gelernt, indem ich nur die Windows-Eingabeaufforderung verwendet habe. keine IDE. Pakete in Eclipse würden Sie wahrscheinlich dazu zwingen, die HAL zu verwenden (da ich im heruntergeladenen Ordner „Packages“ für Eclipse nur HAL-Module sehe).

Die HAL selbst scheint meiner Meinung nach viel vielschichtiger als nötig zu sein. Wohingegen der direkte Zugriff auf die Register mühsam und kaum lesbar wird. Der SPL scheint genau richtig zu sein. clive1, der Guru im st.com-Forum, bevorzugt ebenfalls SPL gegenüber HAL. Hier ist meine Frage in diesem Forum ... könnte hilfreich sein.

Benötigen Sie Hilfe mit USART auf Nucleo stmf411

Da stimme ich dir vollkommen zu. HAL scheint es mit dem ganzen Abstraktionskonzept übertrieben zu haben. Obwohl man damit Programme schneller entwickeln würde, würde man nicht wirklich lernen, was genau passiert, was meiner Meinung nach für das Lernen und die Zukunftssicherheit unerlässlich ist. Als Test habe ich ein Projekt in uvision erstellt und Legacy-Unterstützung anstelle von Softwarepaketen ausgewählt, und das scheint die SPL-Dateien enthalten zu haben. Auch danke für den Link!

Ich habe keine Erfahrungen mit HAL, habe aber SPL oft verwendet, um meine Zeit zu sparen. Meiner Meinung nach besteht die Zielgemeinschaft dieser Embedded-Prozessoren aus 2 Gruppen: Die erste Gruppe, die nicht daran interessiert ist, sich mit Hardwareschichten zu beschäftigen. Softwareprogrammierer, übliche Bastler und Arduino, Himbeeranbeter. Wenn Sie zu dieser Gruppe gehören, scheint HAL eine gute Wahl für Sie zu sein. Sekunden, die aus der Elektronik- und Hardware-Community stammen, die es bevorzugen

GPIO_A->PIN &= ~(1 << 15);

zu

LED_On(1)

für das Einschalten der LED und wollen wissen, was sie im Grunde tun. Wenn Sie in dieser Gruppe sind und genügend Zeit haben, das Referenzhandbuch und das Programmierhandbuch Ihrer MCU zu lesen, ist die Programmierung auf Registerebene möglicherweise eine andere Wahl. aber wenn Sie sich nur zwischen den beiden oben genannten Optionen entscheiden möchten: HAL hat eine bessere Zukunft, da ST' unterstützt wird, aber SPL ist ein einfacherer Weg zum Verständnis für einen Neuling. Vielleicht kann das helfen http://www.eevblog.com/forum/microcontrollers/stm32-and-their-hal-library/

Danke für den Link, interessant zu lesen! Sie haben Recht, für Anfänger scheint SPL der bessere Weg zu sein, um zu lernen (und diesen Weg habe ich auch gewählt). Übrigens sollte es in Ihrer Antwort LED_Off sein

Holen Sie sich diese IDE: System Workbench für STM32 - sie ist kostenlos, basiert auf Eclipse und hat sowohl arm-gcc als auch openocd in einem Paket.

Apropos Bibliotheken: Neben SPL und HAL gibt es jetzt LL. Jeder hat einige Vor- und Nachteile, und Sie müssen auswählen, was Sie brauchen. Und soweit ich weiß , haben alle von ihnen experimentellen Status für ST. Nachfolgend meine Noten zu jedem von ihnen:

  • SPL: alt, umständlich, keine zusätzliche RAM-Nutzung, flexibel
  • HAL: tatsächlich, umständlich, zusätzliche RAM-Nutzung, nicht flexibel
  • LL: aktuell, leicht, kein zusätzlicher RAM-Verbrauch, flexibel

Kurzbeschreibung meiner Noten:

  • umständlich - große Flash-Nutzung, "super" universelle Funktionen für die Arbeit mit Peripherie
  • zusätzliche RAM-Nutzung - es geht um HAL, es hat eine Kopie des Peripheriezustands in im RAM befindlichen Strukturen und verwendet es überall und jederzeit
  • nicht flexibel - und noch einmal zu HAL, es hat viele Funktionen für verschiedene Fälle, aber! Die meisten von ihnen sind für echte Geräte nicht verwendbar (Leute versuchen, HAL neu zu initialisieren, um Byte für Byte von usart zu empfangen >_<, alle Funktionen für TIM + DMA sind implementiert, um das TIM-Register neu zu schreiben und keine anderen ...)

Für ein wenig Rehabilitierung von HAL: Es hat einen großen Vorteil für Neulinge - es wird von STMCubeMX unterstützt.

BEARBEITEN:

Ich habe libopencm3 vergessen - es ist eine alternative Bibliothek. Ich habe es nicht benutzt.