Eclipse + GNU ARM + STM32 - HAL oder SPL

10

Ich werde mit der ARM-Entwicklung beginnen (nach 2 Jahren AVR) und habe die STM DISCOVERY-Karte mit dem Mikroprozessor stm32f4 darauf aufgenommen.

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

Im Anschluss an die Tutorials habe ich Eclipse zusammen mit gcc ARM Tools + openocd + make utils usw. installiert.

Meine Frage betrifft das 'Pakete'-Plugin. Wie jeder Anfänger bin ich verwirrt, ob ich neues STM HAL oder das ältere SPL verwenden soll.

Mein Verständnis ist, dass HAL die Abstraktion auf eine Ebene implementiert hat, auf der sie als Arduino-Äquivalent für Arm bezeichnet werden kann. SPL hingegen bietet gerade genug Abstraktion, um das Codieren zu beschleunigen, aber Sie müssen sich immer noch auf Chipebene befassen.

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 zur Verwendung von HAL? Wenn ja, kann mich jemand darauf hinweisen, wie SPL mit meinem Setup verwendet wird?

Ankit
quelle
1
"the tutorials" ist etwas vage, daher weiß ich nichts über "the 'packages' plugin" und habe keine Ahnung, was SPL (STM Periphery Library?) 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 ...
Arsenal
2
SPL ist Standard Peripheral Library , andererseits kenne ich SPCL auch nicht.
Bence Kaulics
2
Der heute bevorzugte und unterstützte STM-Weg ist die Verwendung des STM32CubeMX, der Code basierend auf HAL generiert. Und ich muss zugeben, dass es ziemlich praktisch ist, obwohl ich kein Fan von automatisierten Tools bin, da sie wichtige Dinge verbergen.
Eugene Sh.
1
Obwohl es größtenteils mit anderen STM32-Prozessor-SPL-Versionen kompatibel sein sollte, glaube ich nicht, dass ST SPL für STM32F7 hat.
Tut
Entschuldigung für das SPCL-Bit. Das war ein Fehler. Ich gewöhne mich immer noch an die Akronyme. Auch nur doppelt überprüft und mein Board ist stm32f4 Variante. Ein weiterer Fehler. Dennoch bleiben die allgemeinen Fragen offen: Wie verwende ich die Standard-Peripheriebibliothek mit Eclipse?
Ankit

Antworten:

6

Die SPL hat, wie ich sehe, nichts mit der von Ihnen verwendeten IDE zu tun. Sie können einfach die relevanten Module (z. B. stmf4xx_dma.c und stmf4xx_dma.h) in Ihr Projekt aufnehmen und die Funktionen verwenden, die in den Dateien .c und .h verfügbar gemacht (und sehr gut beschrieben) sind. Tatsächlich habe ich auf dem stmf411-Nucleo mit gcc, openocd und SPL nur über die Windows-Eingabeaufforderung gelernt. keine IDE. Pakete in Eclipse würden Sie wahrscheinlich zwingen, die HAL zu verwenden (da im heruntergeladenen Ordner "Pakete" für Eclipse nur HAL-Module angezeigt werden).

Die HAL selbst IMO scheint vielschichtiger als nötig. Der direkte Zugriff auf die Register wird lästig und ist kaum lesbar. Die SPL scheint genau richtig zu sein. clive1, der Guru im st.com-Forum, bevorzugt auch die SPL gegenüber HAL. Hier ist meine Frage in diesem Forum ... könnte hilfreich sein.

Benötigen Sie Hilfe mit USART auf Nucleo stmf411

Sohail
quelle
1
Da stimme ich Ihnen voll und ganz zu. HAL scheint mit dem gesamten Abstraktionskonzept über Bord gegangen zu sein. 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 wesentlich ist. Als Test habe ich ein Projekt in uvision erstellt und anstelle von Softwarepaketen Legacy-Unterstützung ausgewählt, und das scheint die SPL-Dateien enthalten zu haben. Danke auch für den Link!
Ankit
1

Ich habe keine Erfahrungen mit HAL, habe aber SPL oft verwendet, um meine Zeit zu sparen. Meiner Meinung nach besteht die Zielgemeinschaft dieser eingebetteten Prozessoren aus zwei Gruppen: der ersten Gruppe, die nicht daran interessiert ist, sich mit Hardwareschichten zu befassen. Softwareprogrammierer, übliche Hobbyisten und Arduino, Himbeeranbeter. Wenn Sie in dieser Gruppe sind, scheint HAL eine gute Wahl für Sie zu sein. Sekunden, die von der Elektronik- und Hardware-Community kommen, die es vorziehen

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

zu

LED_On(1)

zum Einschalten der LED und möchten wissen, was sie im Grunde tun. Wenn Sie in dieser Gruppe sind und genügend Zeit haben, um das Referenzhandbuch und das Programmierhandbuch Ihrer MCU zu lesen, ist möglicherweise eine Programmierung auf Registerebene eine andere Wahl. Wenn Sie sich jedoch zwischen nur einer Option über 2 entscheiden möchten: HAL hat aufgrund der Unterstützung von ST eine bessere Zukunft, aber SPL ist für einen neuen Starter eine einfachere Methode zum Verständnis. Vielleicht kann dies helfen http://www.eevblog.com/forum/microcontrollers/stm32-and-their-hal-library/

Mahmoud Hosseinipour
quelle
1
Danke für den Link, interessante Lektüre! Sie haben Recht, für Anfänger scheint SPL der bessere Weg zu sein, um zu lernen (und das ist der Weg, den ich auch gewählt habe). Übrigens in Ihrer Antwort sollte es LED_Off
Ankit
1

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

Und zu Bibliotheken: Neben SPL und HAL gibt es jetzt LL. Jeder hat einige Vor- und Nachteile, und Sie müssen wählen, was Sie brauchen. Und so wie ich es verstehe , haben alle einen experimentellen Status für ST. Unter meinen Noten für jeden von ihnen:

  • SPL: alt, umständlich, keine zusätzliche RAM-Nutzung, flexibel
  • HAL: tatsächliche, umständliche, zusätzliche RAM-Nutzung, nicht flexibel
  • LL: aktuell, leicht, keine zusätzliche RAM-Nutzung, flexibel

Kurzbeschreibung für meine 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 verfügt über eine Kopie des Peripheriestatus in RAM-Strukturen und wird überall und jederzeit verwendet
  • nicht flexibel - und wieder über HAL, es hat viele Funktionen für verschiedene Fälle, aber! Die meisten von ihnen sind nicht für echte Geräte verwendbar (Leute versuchen, HAL neu zu initialisieren >_<, um Byte für Byte von usart zu empfangen , alle Funktionen für TIM + DMA sind für das Umschreiben des TIM-Registers implementiert und keine anderen ...)

Für eine kleine Rehabilitation von HAL: Es hat einen großen Vorteil für Neulinge - es wird von STMCubeMX unterstützt.

BEARBEITEN:

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

imbearr
quelle