Guten Tag, Kleine Verständnisfragen. Arbeite derzeit mit einem STM32F3 Nucleo Board. Nun habe ich ein paar Fragen zu den Headern: 1. Es gibt eine CMSIS Datei. Laut Doku wird diese von dem Halbleiterhersteller und von ARM erstellt um eine standardisierte Schnittstelle für Programmierer zu erstellen. Die CMSIS ist aber für jeden uC unterschiedlich. Ist das richtig? 2. Habe im Projekt noch eine "stm32f3xx_hal.c" Datei. Ist dies die HAL Bibliothek? Also eine Bibliothek für die Peripherie des Boards? 3. Was hat es mit dem STM32CubeMX aufsich? Habe gelesen es ist eine Ablösung des Standard Peripherie Library? Wie ihr seht bin ich etwas verwirrt mit den ganzen Bibliotheken. Könnte mich bitte jemand aufkären?
:
Verschoben durch User
Und was ist der Unterschied zwischen HAL und CMSIS? Sind doch beides eine Hardware Abstraction Layer?
Student schrieb: > Die CMSIS ist aber für jeden uC unterschiedlich Jein. CMSIS steht für "Cortex Microcontroller Software Interface Standard" und stammt als Konzept erst einmal von ARM selbst. Da gibt es einerseits generische Abstraktionen für die Prozessor-Cores und deren von ARM spezifizierte Standard-Peripherie (System control block, Nested vectored interrupt controller, Systick timer). Andererseits gibt es unter diesem Titel noch weitere zentrale Vereinheitlichungen wie das Debug-Interface (CMSIS-DAP) oder eine DSP-Library. Andererseits sortiert typischerweise jeder Hersteller in diese Hierarchie auch seine controllerabhängigen Headerfiles ein, die die jeweilige Peripherie des Controllers zugreifbar machen und beschreiben. Diese includieren dann in der Regel auch die core-spezifischen Details aus dem allgemeinen CMSIS-Teil. Mit passenden -I-Optionen des Compilers brauchst du dann nur noch sowas wie:
1 | // STM
|
2 | #include "stm32f4xx.h" |
3 | #include "system_stm32f4xx.h" |
4 | |
5 | // Atmel/Microchip
|
6 | // use e.g.-D__ATSAME70Q21__ to define exact device type
|
7 | #include "sam.h" |
… und hast alle nötigen Definitionen zusammen.
Was du da mit CMSIS genannt hast, ist nur die CMSIS-Core. Darin befinden sich die Namen und Strukturen der I/O Register, sowie eine kleine Menge Hilfsfunktionen zum Konfigurieren des ARM Kerns. Darauf aufbauend gibt es diverse CMSIS-xxxx Libraries (z.B. CMSIS-RTOS), die du vermutlich nicht vorliegen hast. ST hatte früher die SPL Library verbreitet wleche auf CMSIS-Core aufbaut und Hilfsfunktionen zur Nutzung der Peripherie bereit stellt, die ST um den ARM Kern herumg gebaut hat. Seit etwa 2012 wurde die SPL durch die Cube-HAL abgelöst. Diese basiert ebenfalls auf CMSIS-Core und erfüllt den gleichen Zweck. CubeMX ist ein Desktop-Programm, welches Quelltext-Projekte generiert, die auf Cube-HAL aufbauen. In CubeMX kannst du in einer grafischen Ansicht den I/O Pins Namen geben, die Takt-Versorgung konfigurieren und I/O Funktionen konfigurieren. Auf Knopfdruck wird dann ein Quelltext-Projekt erzeugt, dass entsprechenden Startup-Code enthält. Mir gefällt diese Entwicklungsmethode nicht. Ich lese lieber Referenzhandbücher und programmiere selbst auf Basis der CMSIS. Ich verspreche mir davon, meine Projekte und Arbeitsweise nicht zu sehr an die Produkte von ST zu binden.
Stefanus F. schrieb: > Ich verspreche mir davon, meine Projekte und Arbeitsweise nicht zu sehr > an die Produkte von ST zu binden. Kann ich bestätigen. Wir bauen eine Software auf Basis vorrangig von Atmel-ARMs, wobei wir deren Pendant (ASF) auch nicht oder nur zu ganz kleinen Teilen benutzt haben. Portierung auf einen STM32(F4) war dann kein übertriebener Kraftakt. Am weitesten divergierend sind Port-Interrupts: bei Atmel (und vermutlich auch anderen) gruppieren sie sich nach der jeweiligen PIO (also PA0 und PA1 triggern den gleichen Vektor), bei STM dagegen nach der Bitnummer (also PA0 und PB0 triggern den gleichen Interruptvektor).
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.