STM32F4 - CMSIS- und Board-spezifische Bibliotheken

Ich habe kürzlich ein STM32F4-Board gekauft, um die ARM-Architektur zu lernen. Ich bin mit der Embedded-Programmierung ziemlich vertraut, nachdem ich etwa ein Jahr lang mit der AVR-Serie gearbeitet habe.

Ich habe dieses Tutorial hier durchgesehen

Darin hat der Autor erwähnt, dass Sie in der Welt der ARM-Boards normalerweise zwei Bibliotheken haben:

  1. Cortex M Software Interface Standard (CMSIS) – allgemeine HAL-Schicht/Schnittstelle für Cortex M-spezifische Funktionen
  2. STM32-Bibliotheken - speziell für die Onboard-Peripherie auf dem STM-Entwicklungsboard (I2C, SPI, CAN usw.)

Der Autor erwähnt auch, dass der Zweck dieser wie bei jeder HAL-Schicht darin besteht, schnell zu entwickeln, anstatt Zeit mit der Einrichtung von Dingen zu verschwenden.

Von der AVR-Seite kommend, wo ich minimale/keine Bibliotheken verwende und alles von Hand einrichte (z. B. Spi-Konfiguration, rx- und tx-Interrupt-gesteuerte Funktionen usw.), finde ich das etwas seltsam. Wäre man durch die Verwendung der STM-spezifischen Bibliotheken nicht darauf beschränkt, nur ihre Mikrocontroller zu verwenden? Wenn ich dann in Zukunft Chips anderer Anbieter verwende, muss ich lernen, ihre spezifische Bibliothek zu verwenden

Ich würde gerne eine Meinung einholen, ob dies der richtige Weg ist. Sollte ich als ARM-Neuling vorerst nur diese Bibliotheken verwenden, bis ich mich wohler fühle, oder sollte ich mir von Anfang an angewöhnen, alles selbst zu machen?

Die Idee ist, ARM unabhängig von herstellerspezifischen Boards oder Mikrocontrollern zu lehnen.

Antworten (3)

Ich empfehle die Bibliotheken. Ein großer Vorteil von Cortex M besteht darin, dass Sie Ihren Code problemlos auf andere Mitglieder derselben Familie (z. B. STMF0 bis STMF4) oder sogar auf andere Hersteller übertragen können, und Sie verlieren diesen Vorteil, wenn Sie die Bibliotheken nicht verwenden.

Übrigens sind viele herstellerspezifische Bibliotheken CMSIS-kompatibel.

Ich habe Familien vermieden, die keine CMSIS-kompatiblen Bibliotheken bereitstellen. Außerdem habe ich STM Cube aus den gleichen Gründen nicht ausprobiert.

Also haben die Anbieter grundsätzlich die Möglichkeit, ihre Bibliotheken CMSIS-konform zu machen? Was mich verwirrt, ist die Tatsache, dass Sie, wie im Fall von STM erwähnt, den CMSIS-Teil haben (der bei verschiedenen Anbietern gleich sein könnte, wenn sie sich, wie Sie sagten, für CMSIS-konform entscheiden), aber dann gibt es die STM-spezifischen Bibliotheken (für Peripheriegeräte ), von denen ich annehme, dass sie bei verschiedenen Anbietern unterschiedlich sind. richtig? Wenn ich es richtig verstanden habe, bietet die CMSIS-Bibliothek die HAL-Schicht für die Kernfunktionalität und die herstellerspezifische einen Zugriff auf die Peripheriegeräte, die der Hersteller in sein Board aufgenommen hat
Nein, es gibt einen Kern, und darin gibt es wahrscheinlich auch einige Herstellerspezifika - aber periphere Bibliotheken können CMSIS-kompatibel sein, ebenso STM-Peripheriebibliotheken sind konform, aber nicht Cube.
Das CMSIS befasst sich also im Grunde mit der Kernfunktionalität. Da der Anbieter den Kern von ARM lizenziert hat, wäre CMSIS bei allen Anbietern ziemlich gleich (obwohl es einige anbieterspezifische Anpassungen haben könnte). Es ist wahrscheinlicher, dass die Peripheriebibliothek von Anbieter zu Anbieter unterschiedlich ist, da sie möglicherweise bestimmte Peripheriegeräte ihrer Wahl verwenden.
Nein, das CMSIS verwaltet den Kern und die Peripherie.
Perfekt. Dieser Link hat alles erklärt!

Ich stimme Scott und der Aussage zu: "Der Zweck dieser ist es, sich schnell zu entwickeln, anstatt Zeit mit der Einrichtung von Dingen zu verschwenden."

Es hängt letztendlich davon ab, was Sie unter dem Erlernen von ARM verstehen. Die Verwendung der Bibliotheken hindert Sie nicht daran, unter die Haube zu gehen und Ihre eigenen Treiber zu schreiben, aber der STM32F4 (den ich gerade erst verwendet habe) ist nur einer von über 2000 Prozessoren von 16 Herstellern, die den ARM-Kern verwenden.

Für mich bieten die Treiber die Flexibilität, mich weiterzuentwickeln, ohne mich in Details zu verzetteln. Das bedeutet nicht, dass ich mir die Details nicht anschaue oder versuche, sie zu optimieren.

Um auf einen anderen Prozessor mit kompatiblen Peripheriegeräten zu migrieren, sollten Sie lediglich die Treiber wechseln.

Vielen Dank für die hilfreiche Antwort. Darf ich fragen welche IDE du verwendest? Es gibt so viele von ihnen
Ich verwende Keil uVision5.

Wenn ich Sie wäre, würde ich die herstellerspezifischen Peripheriebibliotheken verwenden. Es kostet viel Zeit, sich um die Register zur Konfiguration der Peripherie zu kümmern. Ich würde sagen, es dauert viel länger, als die Nutzung von Bibliotheken anderer Anbieter zu lernen. Sie sind ziemlich ähnlich, so dass es nicht viel Zeit braucht, um die Verwendung einer anderen Mikrocontroller-Bibliothek zu lernen.

Auf der anderen Seite finden Sie viel mehr Tutorials und Unterstützung für die Peripheriebibliotheken, da sie weiter verbreitet sind.