Hallo Zusammen,
In den Vorüberlegungen für ein vmtl. doch recht umfangreich werdendes
Projekt mit nem STM32 hat sich mir die Frage aufgeworfen, ob man besser
die HAL (aus dem STM32Cube-Bündel) oder libopencm verwendet oder direkt
in den Registern rumstochert.
HAL
+ Umfassende Unterstützung aller Peripherieeinheiten
- gewöhnungsbedürftige API (wenn man POSIX gewöhnt ist)
1 | GPIO_InitTypeDef GPIO_InitStruct;
|
2 | GPIO_InitStruct.Pin = GPIO_PIN_0;
|
3 | GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
4 | GPIO_InitStruct.Pull = GPIO_NOPULL;
|
5 | HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
- Fragwürdige Lizenz im Zusammenhang mit OSS-Projekten (auf einigen
Seiten von ST steht was von wegen BSD, in den Quellen selber nicht)
- Nur mit dem CubeMX-Codegenerator gut zu verwenden
- Abstraktion, ein Problem mehr (Feature im Datenblatt gefunden,
wie mach ich's mit der HAL?)
libopencm
+ schöne API
- eigene Registerdefinitionen
- nicht vollständige Unterstützung aller Peripherieeinheiten
Registerzugriff
+ sehr gute Dokumentation (Reference Manual)
- umständlich
Für große Peripherieeinheiten, wie z.B. USB führt natürlich kein Weg an
der HAL und der Middleware von ST vorbei.
Was sind eure Meinungen und Erfahrungen dazu?
Lukas