STM32F4 und HAL

23

Ich habe also eine Weile mit dem STM32F407 experimentiert (ich bin neu in ARM) und mich dazu entschlossen, eine einfache App mit den HAL-Bibliotheken zu schreiben, da es den Anschein hat, als hätte ST die Standard-Peripheriebibliotheken eingestellt. Meine Frage ist also, worum geht es in HAL? Hat StdPeriph seine Arbeit nicht gemacht? Warum sollten sie es für HAL einstellen? Für mich sieht es so aus, als wäre HAL ein komplettes Durcheinander.

Die Dokumentation ist AWFUL, zumindest für StdPeriph gibt es eine vollständige Referenz, die gut genug organisiert ist, um leicht zu finden, was Sie wollen ( http://stm32.kosyak.info/doc/ ). Für HAL gibt es ein beschissenes PDF ( http://www.st.com/st-web-ui/static/active/jp/resource/technical/document/user_manual/DM00105879.pdf ) mit scheinbar zufälliger Struktur. Wenn ich einen Abschnitt lese, zum Beispiel in Bezug auf ein Peripheriegerät, kann ich anscheinend die Anforderungen für dessen Konfiguration und Anpassung nicht verstehen. Es sieht eher nach persönlichen Notizen von jemandem aus, der Dinge nicht vergessen möchte, als nach einer Referenz.

Ich weiß, dass ich mit CubeMX GPIO initialisieren und Peripheriegeräte konfigurieren kann, aber mein Ziel ist es, dies selbst zu tun, damit ich deren Funktionsweise besser verstehe, und nicht, dass eine Software alles für mich erledigt. Mache ich etwas falsch? Ist es der ARM-Neuling in mir, der mich verwirrt? Oder ist die verfügbare Dokumentation so schlecht?

John
quelle
Wäre etwas wie ChibiOS besser für Sie? Sie haben ein RTOS, aber auch eine sehr gute HAL, die Sie ohne das RTOS verwenden können.
IgorEE
ST hat die Standard Peripherals Libraries nicht genau eingestellt, wird jedoch keine neuen Versionen für neuere Familien veröffentlichen. Sie haben erklärt (irgendwo in ihrem Forum, aber ich kann es anscheinend nicht finden), dass sie die SPL für die Familien, für die sie freigegeben wurde (einschließlich STM32F4), weiterhin unterstützen würden. Da Sie neu bei ARM sind, ist es wahrscheinlich am besten, sich für HAL zu entscheiden. Ich habe sehr viele Module, die bereits mit SPL geschrieben wurden, so dass der Übergang schmerzhaft sein wird, und ich habe ihn verschoben. Das ist schlimm, denn sobald ich mich für eine neue Familie entscheide, wird es umso mehr Code geben, der auf HAL portiert werden kann
Dienstag,
Dieses eBook: leanpub.com/mastering-stm32 ist eine gute Einführung für Anfänger (aber auch für Profis) in die STM32-Welt.
Lorenzo Melato

Antworten:

13

Das Erstellen eigener Bibliotheken ist ganz einfach. Die Dokumentation der Registerspezifikationen ist ziemlich gut, die meisten, wenn nicht alle Peripheriegeräte sind einfach einzurichten. Ich finde es viel schmerzhafter, ihre Bibliotheken zu benutzen. aber vielleicht bin das nur ich. Dies gilt für st, nxp, ti, atmel, um nur einige zu nennen (weniger für Intel und Mikrochip).

Warum wechseln sie Bibliotheken, könnte eine Reihe von Gründen haben, ein neuer Chef übernahm, eine Abteilung wurde geschlossen, eine andere übernahm. Das Marketing wollte ein neues Image für das Produkt. Wie ElectronS bereits erwähnte, könnte dies ein Versuch sein, sich von der Hardware zu lösen, um Benutzer anzulocken, die nicht bereit oder in der Lage sind, Bare-Metal zu betreiben. Ich würde noch weiter gehen und sagen, dass sie wahrscheinlich versuchen, mit dem Arduino-Phänomen zu konkurrieren. Was mbed und alle anderen immer versucht haben und gescheitert sind (noch vor Arduino).

In jedem Fall wird es mit zunehmender Entfernung von der Hardware aufgeblähter und langsamer. Je mehr Geld Sie pro Einheit für ROM, RAM und MHZ ausgeben müssen. Nur damit Sie genauso viel Zeit mit Programmieren verbringen können? Einfach anders machen?

Sie sagen, Sie kommen aus der PIC-Welt, jetzt haben sie gute Arbeit mit Werkzeugen geleistet, ihre Chip-Dokumente waren jedoch schrecklich, einige der schlimmsten. Sie kompensierten mit Bibliotheken und Sandkästen.

Probieren Sie am Ende des Tages die verschiedenen Optionen und die Konkurrenzprodukte aus, um zu sehen, wie sich ihre Tools vergleichen lassen. Vieles davon kannst du kostenlos tun, nur um zu sehen, ob es Sinn macht und um Dinge zu kompilieren. Vielleicht sogar einen Befehlssatzsimulator verwenden. Finden Sie diejenige, die zu Ihnen passt.

Beachten Sie, dass die Option ohne Bibliotheken IMMER für Sie verfügbar ist. Sie sind nicht darauf beschränkt, welche Toolchain Sie verwenden können, welches Host-Betriebssystem, welche Idee, welcher Editor usw. Sie können sich beim Programmieren der Teile daran halten, wenn ihre Optionen in dieser Hinsicht extrem eingeschränkt sind. Wechseln Sie zu einem anderen Chip oder Verkäufer, wenn Sie können.

Um ein solches Chip-Produkt zu verkaufen, müssen sie eine Entwicklungsumgebung bereitstellen, ganz gleich, ob es sich um ihre eigenen oder um kostenlose Produkte handelt, die sie zusammengeklebt haben. Und sie neigen dazu, eine Bibliothek zusammenzustellen. Es muss nur gerade gut genug aussehen und das Blinken des LED-Beispiels muss gerade gut genug funktionieren, um entweder Ihr Management oder Ihr Hardwareteam dazu zu bringen, ein Produkt zu entwerfen kommt an oder kommt nicht an Wenn es fast funktioniert, aber nicht ganz, ist das ein großer Gewinn für den Chiphersteller, da Sie jetzt für den technischen Support für das letzte bisschen bezahlen. Es ist also in ihrem besten Interesse, fast da zu sein, aber nicht ganz.

Die Chiphersteller müssen nur gut genug aussehen, um den Designgewinn zu erzielen. Sie müssen das Produkt ständig verbessern (? Verändern), um neue und alte Kunden anzulocken. Sie werden also Probleme haben, wie weit voneinander entfernt und wie viele frühere Bibliotheken weiterhin unterstützt werden. Fast jede Bibliothek, an die Sie sich gewöhnt haben, wird irgendwann verschwinden. Lerne also, dich anzupassen (oder benutze ihre Sachen nicht und gehe deine eigenen, die du auf unbestimmte Zeit unterstützen kannst). Zugegeben, im Idealfall müssen Sie die Anwendung nur einmal pro Produkt entwickeln, Ihre Firmware perfektionieren (viel Glück, wenn Sie Bibliotheken von Drittanbietern verwenden), und Sie müssen nicht zurückgehen und einen Computer suchen, der ihre Toolchain lädt, wenn Sie eine finden Kopieren Sie es, und denken Sie daran, wie Sie diese alte Bibliothek verwenden. Denken Sie daran, dass Sie nicht nur Ihren Quellcode speichern sollten, sondern auch alle zugehörigen Tools und Dokumente.

Ihre Bibliotheken werden in der Regel nur in einer Toolchain, unter einer oder zwei IDEs und manchmal nur unter Windows sowie in bestimmten Versionen unterstützt. Auch hier haben Sie keine dieser Einschränkungen, ganz sicher nicht für ARM, wenn Sie Ihr eigenes Ding machen. Sie können immer alle ihre Bibliotheken lesen, um zu sehen, wie sie Dinge tun. Aber das ist oft sehr beängstigend. Sie verwenden ihre A-Team-Entwickler nicht für Bibliotheken. Ich habe ein paar Codezeilen extrahiert, um die Interviewkandidaten zu fragen, was mit diesem Code nicht stimmt.

Um Zeit und Mühe zu sparen, recyceln sie sowohl auf der Silicon- als auch auf der Softwareseite häufig dieselbe IP. Wenn Sie also sehen, wie die Peripherie auf einem ihrer Chips funktioniert, funktioniert dies auf vielen anderen Chips oft auf dieselbe Weise. Ja, die Uhrensysteme können mit oder ohne ihre Bibliotheken knifflig sein. Hohe Wahrscheinlichkeit, dass der Chip gemauert wird. Dort ist der größte Teil meines Chip- / Board-Mauerwerks passiert. Hilft zu verstehen, wie ihre Chips funktionieren, zum Beispiel, dass die AVRs, die meisten, wenn nicht alle, neu programmiert werden können, während der Chip zurückgesetzt wird Egal, Sie können diese Chips neu programmieren. Einige dieser Anbieter (st is one) haben einen internen Bootloader, den Sie mit einem Gurt auswählen können (BOOT0 zum Beispiel in der st-Welt).

Eine Größe passt allen und niemand passt gut. Dies gilt insbesondere für Software. Jeder Versuch, die Hardware zu abstrahieren, macht sie nur langsam und aufgebläht. Könnte auch einen größeren Chip bekommen und Linux darauf laufen lassen, wenn es das ist, was du wirklich suchst. Ein Großteil davon ist jedoch auf die Entwickler zurückzuführen, die sich nicht die Hände schmutzig machen wollen. Deshalb haben wir im Grunde darum gebeten, und sie versuchen, es zu liefern.

Auch hier sollten Sie sich nicht an st oder einen anderen Anbieter binden (es sei denn, es ist zu spät und das Management und das Hardwareteam haben es Ihnen angetan, beachten Sie, dass die stm32-Produkte nett und einfach zu bedienen sind). Einkaufsbummel. TI legt eine Menge Eier in den Cortex-M4-Korb. Sie können die mbed-Funktion für eine Reihe dieser Armprodukte sowie für die vom Anbieter unterstützten Lösungen ausführen.

Eine Sache, auf die Sie sich immer verlassen können, ist, dass sie von Zeit zu Zeit die Bibliotheken wechseln und schließlich aufhören, die zu unterstützen, an die Sie sich gewöhnt haben.

Oldtimer
quelle
Tolles Argument für die Entwicklung eigener Bibliotheken, fast überzeugt, und ich würde das gerne ausprobieren. Was bräuchte ich Ihrer Meinung nach außer dem Referenzhandbuch für stm32fxx? soll ich auch das arm core handbuch lesen? verwende ich CMSIS? Wie greife ich auf Register und Speicher zu? Könnten Sie mehr ausarbeiten oder ein Beispiel dafür geben, wie Sie anfangen sollen
ElectronS
noch ein paar Dinge zum Nachdenken. Jede Codezeile erhöht das Risiko. Erklären Sie Ihrem Chef, dass Sie vorhaben, Zehntausende von Zeilen mit anderem Code zu verwenden, ohne jedes Bit zu überprüfen, das Sie verwenden. Codeebenen, insbesondere beim Abstrahieren, bewirken, dass die Binärdateien größer werden und die Leistung sinkt. Erklären Sie Ihrem Chef noch einmal, dass die 10 Millionen Einheiten des Produkts zusätzliche 35 Cent pro oder 3,5 Millionen Dollar kosten werden, weil Sie sich entschieden haben, eine Bibliothek zu benutzen, weil Sie faul sind.
old_timer
Ihr Chef könnte eine Armee von Leuten einstellen, die Sie für diese Art von Geld ersetzen. Lassen Sie jede Codezeile überprüfen, damit sie nicht 10.000 Einheiten einsammeln und feststellen, dass sie alle über einen Softwarefehler hinwegwerfen müssen, der durch den Einsatz riskanter Software verursacht wurde. und verwenden Sie ein kleineres Teil, das bei einer langsameren Taktrate, die weniger Strom verbraucht und mit einer Akkuladung länger läuft, weniger kostet. manchmal lohnt sich die mühe. und sicher manchmal nicht.
old_timer
Vielen Dank für die weiteren Punkte, die Sie angegeben haben. Können Sie meine Frage am besten beantworten, um anzufangen? Verwenden von CMSIS- und HAL .h-Dateien für Registernamen und Speicherorte?
ElectronS
Es gibt kein "Bestes", wenn man dieses Wort verwendet, ist es eine persönliche Meinung, keine Tatsache. Wählen Sie einfach eine und beginnen Sie, oder tun Sie es wie ich, versuchen Sie eine, bis Sie auf eine Straßensperre stoßen, dann versuchen Sie eine andere und eine andere und schieben Sie jede Straßensperre zurück zur nächsten Straßensperre, bis eine oder alle durchbrechen.
old_timer
14

Lassen Sie mich Ihnen sagen, dass viele von uns die gleiche Enttäuschung haben wie HAL-Bibliotheken. Sie sind in der Tat schlecht und vage dokumentiert und immer noch neu und enthalten viele Fehler.

Die Beantwortung Ihrer Frage, warum sich ST für HAL entschieden hat, ist ganz einfach:

  1. Sie möchten eine Hardwareabstraktionsschicht erstellen, was im Klartext bedeutet, dass Softwareentwicklung und Code unabhängig vom Mikrocontroller sein sollen. Wenn Sie also heute einen Code für stm32f4 schreiben und nach ein paar Jahren auf stm32f7 migrieren müssen wird einfach sein und Code wird sehr modular sein.

  2. Dies ermöglicht auch mehr Entwicklern wie Software-Programmierern, mit dem Mikrocontroller zu arbeiten, ohne wirklich zu verstehen oder sich eingehend mit den Details zu befassen, wie die Hardware eine Aufgabe erfüllt. Unternehmen wie ST und TI versuchen, die Embedded-Entwicklung der PC-Code-Entwicklung ähnlich zu machen, bei der Sie High-Level-Treiber verwenden, um Code FAST zu entwickeln. Die Ungeschicklichkeit und fehlende Optimierung der Treiber und Bibliotheken wird durch die hohe Leistung der ARM-Geräte kompensiert.

  3. Ich denke, STM32cubeMX ist ein großartiges Tool, wenn Sie HAL - Bibliotheken verwenden, da die Initialisierung von Peripheriegeräten die zeitaufwändigste Aufgabe ist und Sie dies jetzt in sehr kurzer Zeit tun können. Die visuelle Oberfläche kann einfach geändert werden, ohne den Benutzercode zu beeinflussen (sofern zutreffend) Sie schreiben Ihren Code an der richtigen Stelle.) Sie können Stm32cubeMx verwenden und dann den Code überprüfen und versuchen zu verstehen, wie und warum die einzelnen Funktionen verwendet werden. Auf diese Weise versuchen Sie, eine Aufgabe zu lösen und haben ein Lösungshandbuch zur Korrektur in der Nähe tolle IMO.

  4. Der ARM-Kern ist recht komplex, so dass die alten Methoden, die wir auf 8-Bit-Mikrocontrollern angewendet haben, wie die direkte Behandlung von Registern (Schreiben von C in Assembler-Form), nicht durchführbar sind, viel Zeit in Anspruch nehmen und die Pflege des Codes aufgrund der komplexen Architektur erschweren (überprüfen Sie die Uhreinstellung zum Beispiel)

Elektronen
quelle
6
Das ist alles sehr verständlich, aber all dies gilt auch für StdPeriph, nicht wahr? Ich meine, es ist bereits eine Hardware-Abstraktionsbibliothek. Was bringt es also, eine neue zu erstellen, anstatt die alte zu verbessern? Ich bin wirklich neugierig, ich bin sehr neu in ARM, ich benutze PICs seit vielen, vielen Jahren.
John
Dies gilt umso mehr für die CMSIS-konformen Bibliotheken
Scott Seidman,
1
@john, soweit ich das verstehe, ist die HAL abstrakter und weniger hardwareabhängig als Standardbibliotheken.
ElectronS
12

Ich weiß, dass dies lange dauern wird, aber da wir gerade (erfolgreich) unser neues Produkt mit dem HAL veröffentlicht haben, denke ich, dass es sich lohnt, darüber nachzudenken. Außerdem arbeite ich nicht für ST, ich habe jeden Teil der HAL gehasst, fast das Projekt mit StdPeriph neu gestartet, ich habe den Schmerz gespürt - aber jetzt verstehe ich warum.

Zunächst ein bisschen Hintergrund. Wir entwickeln Ultra-Low-Power-Telemetriesysteme und unser Produkt wird von einem STM32L1 angetrieben. Als wir mit der Arbeit an der Firmware begannen, hatten wir die üblichen Möglichkeiten für (Bare-Metal-) ST-Geräte: Tun Sie alles von Hand, verwenden Sie die StdPeriph-Bibliotheken oder gehen Sie mit der HAL. Die ST-Leute haben uns überzeugt, mit der HAL zu gehen - so haben wir es gemacht. Es war schmerzhaft, wir mussten Fehler in der Software umgehen (der I2C-Teil hat uns für einige Zeit verrückt gemacht) und ich mag die gesamte Architektur immer noch nicht. Aber es funktioniert.

Als ich vor etwas mehr als einem Jahr von Desktop zu Embedded wechselte, war ich fassungslos über etwas Seltsames, das ich weder benennen noch verstehen konnte. Im Laufe der Zeit konnte ich verstehen, was vor sich geht - oder vielmehr, was vor sich geht: Die eingebettete Welt befindet sich im Übergang. Silizium wird jeden Tag billiger und MCUs sind leistungsfähiger und vielseitiger. Unabhängig von Größe und Strombedarf setzen immer mehr Geräte auf generische MCUs. Immer mehr Unternehmen schließen sich dem Spiel an und bringen eine Horde neuer Entwickler mit unterschiedlichen Hintergründen mit. Die "gemeine" Kultur wandelt sich vom traditionellen "EE-Typ mit Programmierkenntnissen" zum "SW-Typ mit vagen Hardware-Kenntnissen".

Ob dies gut oder schlecht ist, ist unerheblich. Es passiert einfach. Tatsächlich ist es auch der Software-Welt mehr als einmal passiert. Der Web-Boom im Jahr 2000 zog PHP / MySQL-Neulinge an - sagen Sie ihnen, dass es Register in der CPU gibt. Sie werden antworten: "Ich verwende Linux, es gibt also keine Registry in meinem Betriebssystem." Früher ermöglichten Mehrbenutzer-Betriebssysteme, die im geschützten Modus ausgeführt wurden, faulen Entwicklern, in ihrer gesamten Karriere niemals einen ISR einzurichten und in Ordnung zu sein . Noch früher sind Tastaturen und Bildschirmkartenstanzen sowie Druckerhersteller verrückt geworden.

Und ja, die aktuellen Trends machen mich persönlich traurig, da ich ignorante Entwickler mit den neuesten glänzenden Technologien in Ehrfurcht versetze und sie dennoch nicht mit der Geschichte in Verbindung bringen kann. Wenn ich sehe, dass ein Jünger 2015 ein Spiel in Javascript mit WebGL programmiert, möchte ich sagen: "Es gibt nichts Neues! Ich habe das gleiche 1995 mit C ++ und dem 3Dfx SDK getan!" Was die Geschichte nicht erzählt, ist, dass sein Spiel auf meinem Handy läuft, während meines einen Spieler-PC benötigte (und einen Installer, und ich konnte keine Updates über das Web veröffentlichen). Die Wahrheit ist, dass er das Spiel in einem Monat entwickeln könnte, wo ich dasselbe in sechs oder zwölf gemacht habe.

Offensichtlich wollen weder ST noch TI oder Intel oder wer auch immer Chips herstellt, die Wende verpassen. Und sie haben recht. Der HAL ist die Antwort von ST und tatsächlich ziemlich solide, nicht nur auf der Geschäfts- oder Marketingseite, sondern auch auf der technischen Seite. Der Grund, warum es Klang ist, liegt im Namen:

Hardware Abstraction Layer -

Wenn überhaupt, sollten Sie sich daran erinnern. Die HAL ist ein Versuch, sich von der Hardware zu entfernen. Es ist eine gute Technik, weil wir so die Funktionalität von den Details entkoppeln können. Layering ermöglicht die Entwicklung komplexer Programme - eine Abstraktion über der anderen, bis hin zur Hardware. Abstraktion ist das mächtigste Werkzeug, um Komplexität zu managen . Ich bezweifle sehr, dass irgendjemand auf diesem Planeten in der Lage wäre, einen Webbrowser in der Baugruppe für eine bestimmte CPU zu programmieren.

Der kulturelle Wandel ist in der Tat schwer zu verdauen, aber da ich davon ausgehen muss, dass man Knuths Kunst der Computerprogrammierung nicht gelesen haben muss, um Webanwendungen zu entwickeln, muss die EE-Welt zugeben, dass es Neulinge gibt, die eingebetteten Code entwickeln können (und werden!) ohne das Fucking Holy Reference Manual gelesen zu haben .

Die gute Nachricht ist, dass neue Spieler nicht weniger Arbeit für ältere Spieler bedeuten - im Gegenteil, IMHO. Wen werden sie anrufen, wenn die Dinge "nicht funktionieren"? Wenn Sie RTFM haben (im Gegensatz zu ihnen) und wissen, was jedes Bit dieses undurchsichtigen Konfigurationsregisters tut, haben Sie einen Vorteil.

Gehen Sie zwischen Ihren Lesungen und Experimenten einfach mit der HAL. Neue MCU? Kein Problem. Neue MCU-Linie? Auch kein Problem (ich habe einen Test auf einem STM32F4 Nucleo in nur einem Tag mit CubeMX codiert und ihn dann einfach auf unser Gerät portiert ... es fühlte sich einfach richtig an ). Verspotten für Unit-Tests? Kein Problem. Die Liste geht weiter und weiter, denn Abstraktion ist gut.

Natürlich ist die HAL selbst nicht 100% OK. Es ist Dokumentation schrecklich ist (aber Sie haben RT F HRM, nicht wahr?), Gibt es Fehler, ST abgeladen nur eine Beta - Version bei uns (scheint in diesen Tagen ziemlich Standard) und ihre öffentliche Unterstützung ist ein Witz. Aber die HAL nicht freizugeben wäre noch schlimmer gewesen.


quelle
Ich sehe, woher du kommst. Soweit ich weiß, laufen die Dinge (leider) nach Arduino-Art und versuchen, einen Großteil der Realität vor dem Programmierer zu verbergen, um mehr hochrangige Software-Leute in die Hardware-Programmierung zu locken, und dies ist der Grund für Bibliotheken wie HAL. Angesichts der schlechten Dokumentation und des großen Durcheinanders glaube ich nicht, dass es ihnen bald gelingen wird.
John
@ John: HAL versteckt keine "Realität". Alles ist für Sie da, um zu optimieren. Alle Teile sind optional - z. B. möchten Sie möglicherweise nur die Makros verwenden, um auf die Register zuzugreifen, oder nur einen bestimmten Treiber (z. B. I2C) oder alles, einschließlich ISRs und Uhrenkonfiguration. Deine Entscheidung. Ich bin jedoch der Meinung, dass die Dokumentation sehr zum Kotzen ist. (Ich habe ST gesagt und sie versprochen, dass sie BTW daran arbeiten)
Wir wiederholen dasselbe mit neuen Werkzeugen. Weil neue Werkzeuge versprechen, die Arbeit einfacher und schneller zu machen und somit kosteneffizient zu sein. Aber wir machen immer noch dasselbe, denn die Menschen sind immer noch die gleichen, egal ob es 2095 oder 1995 war. Die Wahl bleibt uns, ob wir den neuen Werkzeugen folgen oder bei unseren bereits vertrauten Werkzeugen bleiben.
Jony