Eclipse + GNU ARM + STM32 - HAL ou SPL

10

Je vais commencer par le développement ARM (après 2 ans d'AVR) et j'ai choisi la carte STM DISCOVERY avec le microprocesseur stm32f4 dessus.

J'ai décidé d'aller avec eclipse + ARM gcc car je n'aime pas la limite de code sur Keil et je n'ai pas l'argent pour obtenir une version payante.

En suivant les tutoriels, j'ai installé eclipse avec les outils gcc ARM + openocd + make utils etc.

Ma question concerne le plugin «packages». Comme tout débutant, je ne sais pas s'il faut utiliser le nouveau STM HAL ou l'ancien SPL.

Ma compréhension est que HAL a implémenté l'abstraction à un niveau où elle peut être appelée équivalent Arduino pour arm. SPL, d'autre part, fournit juste assez d'abstraction pour accélérer le codage, mais vous devez toujours traiter au niveau de la puce.

Avec cette compréhension, je voudrais m'en tenir à SPL pour mieux comprendre les choses plutôt que d'utiliser HAL.

Ce que j'aimerais savoir, est-ce que l'utilisation de packages pour STM me force implicitement à utiliser HAL? Si oui, quelqu'un peut-il m'indiquer comment utiliser SPL avec ma configuration?

Ankit
la source
1
"les tutoriels" est un peu vague, donc je ne connais pas "le plugin" packages "" et je n'ai aucune idée de ce qu'est SPL (bibliothèque périphérique STM?) ou SPCL. Peut-être que je ne suis tout simplement pas qualifié pour cette question, mais travailler avec STM32 depuis plus de deux ans me fait maintenant me demander ...
Arsenal
2
SPL est une bibliothèque périphérique standard , par contre je ne connais pas non plus SPCL.
Bence Kaulics,
2
Aujourd'hui, la méthode préférée et prise en charge par STM consiste à utiliser le STM32CubeMX, qui génère du code basé sur HAL. Et je dois admettre que c'est assez pratique, même si je ne suis pas un fan des outils automatisés car ils cachent des choses importantes ..
Eugene Sh.
1
Bien qu'il devrait être principalement compatible avec les autres versions SPL du processeur STM32, je ne pense pas que ST ait SPL pour STM32F7.
Tut
Désolé pour le bit SPCL. C'était une erreur. Je m'habitue toujours aux acronymes.Vérifiez également que ma carte est une variante stm32f4. Une autre erreur. La question générale reste posée, comment utiliser la bibliothèque périphérique standard avec eclipse?
Ankit

Réponses:

6

Le SPL, comme je le vois, n'a rien à voir avec l'IDE que vous utilisez. Vous pouvez simplement inclure les modules appropriés (par exemple stmf4xx_dma.c et stmf4xx_dma.h) dans votre projet et utiliser les fonctions exposées (et très bien décrites) dans les fichiers .c et .h. En fait, j'ai appris sur le nucléo stmf411 avec gcc, openocd et SPL en utilisant simplement l'invite de commande windows; pas d'IDE. Les packages dans eclipse vous forceraient probablement à utiliser le HAL (puisque dans le dossier 'Packages' téléchargé pour eclipse, je ne vois que les modules HAL).

Le HAL lui-même IMO semble beaucoup plus en couches que nécessaire. Alors que l'accès direct aux registres devient fastidieux et difficilement lisible. Le SPL semble juste. clive1, le gourou du forum st.com, préfère également le SPL à HAL. Voici ma question sur ce forum ... pourrait être utile.

Besoin d'aide avec USART sur Nucleo stmf411

Sohail
la source
1
Je suis totalement d'accord avec vous là-dessus. HAL semble être allé trop loin avec tout le concept d'abstraction. Bien qu'avec cela, on développerait des programmes plus rapidement, on n'apprendrait pas vraiment ce qui se passe exactement, ce qui je pense est essentiel pour l'apprentissage et pour être à l'épreuve du temps. Comme test, j'ai créé un projet dans uvision et sélectionné le support hérité au lieu des packs logiciels et qui semble avoir inclus les fichiers SPL. Merci aussi pour le lien!
Ankit
1

Je n'ai aucune expérience avec HAL, mais j'ai utilisé SPL plusieurs fois pour gagner du temps. À mon avis, la communauté cible de ces processeurs intégrés comprend 2 groupes: le premier groupe qui n'est pas intéressé à s'engager avec les couches matérielles. Programmeurs de logiciels, amateurs habituels et Arduino, adorateurs de framboises. si vous êtes dans ce groupe, HAL semble être un bon choix pour vous. Secondes provenant de la communauté électronique et matérielle, qui préfèrent

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

à

LED_On(1)

pour allumer la LED et voulez savoir ce qu'ils font fondamentalement. alors si vous avez dans ce groupe et avez assez de temps pour lire le manuel de référence et le manuel de programmation de votre MCU, peut-être que la programmation au niveau du registre est un autre choix. mais si vous voulez décider entre seulement au-dessus de l'option 2: HAL a un meilleur avenir grâce au support de ST 'mais SPL est un moyen plus facile à comprendre pour un nouveau démarreur. Peut-être que cela peut aider http://www.eevblog.com/forum/microcontrollers/stm32-and-their-hal-library/

Mahmoud Hosseinipour
la source
1
Merci pour le lien, lecture intéressante! Vous avez raison, pour les débutants SPL semble être la meilleure façon d'apprendre (et c'est la voie que j'ai également choisie). Dans votre réponse, ce devrait être LED_Off
Ankit
1

Obtenez cet IDE: System Workbench pour STM32 - c'est gratuit, basé sur Eclipse et avez à la fois arm-gcc et openocd dans un seul paquet.

Et sur les bibliothèques: en plus de SPL et HAL existent maintenant LL. Chacun a ses avantages et ses inconvénients, et vous devez choisir ce dont vous avez besoin. Et si je comprends bien , tous ont un statut expérimental pour ST. Ci-dessous mes notes à chacun d'eux:

  • SPL: ancien, encombrant, pas d'utilisation supplémentaire de bélier, flexible
  • HAL: réelle, encombrante, utilisation supplémentaire de RAM, pas flexible
  • LL: réel, léger, sans utilisation supplémentaire de bélier, flexible

Brève description de mes notes:

  • encombrant - grande utilisation du flash, fonctions universelles "super" pour travailler avec la périphérie
  • utilisation supplémentaire du ram - il s'agit de HAL, il a une copie de l'état périphérique dans les structures situées dans le ram et l'utilise partout et à chaque fois
  • pas flexible - et encore sur HAL, il a beaucoup de fonctions pour différents cas, mais! la plupart d'entre eux ne sont pas utilisables pour de vrais appareils (les gens essaient de réinitialiser HAL pour recevoir octet par octet de usart >_<, toutes les fonctions pour TIM + DMA sont implémentées pour réécrire le registre TIM et pas d'autre ...)

Pour un peu réhabiliter HAL: il a un gros avantage pour les débutants - il est soutenu par STMCubeMX.

ÉDITER:

J'oublie libopencm3 - c'est une bibliothèque alternative. Je ne l'ai pas utilisé.

imbearr
la source