Démarrage rapide STM32. Partie 1 Logiciel, matériaux, Cube MX

Récemment, je rencontre de plus en plus souvent des holivars sur le sujet de Cube MX et HAL, appliqués aux contrôleurs STM32.

D'une part, il y a des défenseurs qui aiment la facilité de configuration et la lisibilité du code.

D'un autre côté, les adhérents écrivent tout avec leurs mains, pour lesquels la vitesse de travail et l'utilisation prudente des ressources sont importantes.

Afin de pointer tous les i - essayez d'écrire «Bonjour tout le monde» avec les trois chemins les plus couramment utilisés CMSIS, LL, HAL. Nous allons estimer les coûts (ressources du contrôleur, volume du fichier exécutable et bien sûr le temps du développeur).

L'article comprendra plusieurs parties:

Démarrage rapide STM32. Partie 1 logiciel, matériaux, Cube MX.
Démarrage rapide STM32. Partie 2 Hello World sur HAL, configuration du débogage dans Atollic TrueSTUDIO
Démarrage rapide STM32. Partie 3 Hello World sur LL
Démarrage rapide STM32. Partie 4 Hello World sur CMSIS
Démarrage rapide STM32. Résumé de la partie 5, comparaison de HAL, LL, CMSIS.

Tout d'abord, décidons de ce que nous allons réellement programmer, c'est-à-dire trouver le bon matériel.

Une option idéale serait une carte budgétaire sur le microcontrôleur STM32F103C8T6.

image

Ces frais peuvent être trouvés sur l'ensemble du site bien connu au prix de 100 roubles russes.

Recherche par mots clés: STM32F103C8T6 BRAS STM32 Minimum

https://en.aliexpress.com/af/STM32F103C8T6-ARM-STM32-Minimum.html?SearchText=STM32F103C8T6+ARM+STM32+Minimum

Afin de remplir le firmware et de jouer avec le débogage, un programmeur est également requis
Pour les débutants et pour une utilisation future, le clone chinois du programmeur ST-LINK V2 est idéal.

Vous pouvez acheter sur le même site au prix de 120 roubles russes.

image

Recherche par mots clés ST LINK Stlink ST 252dLink V2 Mini STM8 STM32:

https://en.aliexpress.com/af/ST-LINK-Stlink-ST%25252dLink-V2-Mini-STM8-STM32.html?SearchText=ST+LINK+Stlink+ST%252dLink+V2+Mini+STM8+ STM32

Pour développer un logiciel pour STM32, vous pouvez utiliser différents IDE.

Les plus populaires sont IAR, Keil, Coocox (Eclipse).

Nous suivrons le chemin qui a récemment été totalement gratuit et entièrement fourni par ST lui-même.

Nous utiliserons Atollic TrueSTUDIO pour STM32 ou dans les gens ordinaires Tolik.

Quels sont les avantages de ce logiciel: absolument gratuit, il n'y a pas de limite sur la taille du code, il y a un bon débogueur, une installation et une configuration faciles.

Inconvénients: pas de complétion automatique du code.

Des versions pour Windows et Linux sont disponibles.

Téléchargez ici https://atollic.com/resources/download/
Il ne devrait pas y avoir de problèmes avec l'installation de ce logiciel, tout est intuitivement clair, nous choisissons où le mettre et cliquons sur "Suivant" tout le temps.

Après l'installation, vous ne pouvez pas l'exécuter, car en plus de l'IDE lui-même, vous avez besoin d'autre chose.

Si vous l'avez toujours démarré, fermez-le.

Étant donné que TrueSTUDIO est un outil de développement et de débogage, je voudrais ne pas assembler le projet à la main (connecter les bibliothèques requises et prescrire les chemins), mais obtenir un fichier préconfiguré dans lequel vous pouvez immédiatement écrire du code sans problèmes inutiles.

Pour ce faire, utilisez le programme générateur de code Cube MX ou dans les gens du commun «Kalokub».
Ce logiciel est la première pierre d'achoppement dans les holivars sur ce qu'il faut écrire sous STM: sur les registres et CMSIS ou sur HAL.

Les défenseurs de la première idéologie avancent les arguments suivants: Cube MX génère une énorme quantité de code inutile, ce qui ralentit également le travail de MK.

Les défenseurs de la seconde - disent que le code généré automatiquement réduit le temps de développement, permettant au développeur de passer rapidement à la partie gouttière de l'appareil (à la logique principale), donnant la routine périphérique au logiciel spécialisé (Cube MX).

Curieusement, ces deux idéologies sont vraies et applicables dans la pratique, mais seulement chacune dans ses propres conditions.

Regardons quelques exemples:

Exemple n ° 1: Il est nécessaire de développer un appareil aussi bon marché que possible, car il est prévu de produire par lots de 100 500 pièces par an. Naturellement, chaque rouble supplémentaire du prix de l'appareil entraînera des centaines de milliers de roubles de dépenses sur l'appareil final. De plus, dans le développement prévu, il y a quelques calculs lourds et travailler avec des périphériques (ADC, SPI, UART) à des vitesses maximales.

L'appareil est un produit entièrement autonome, à l'avenir, il est prévu d'apporter des modifications minimales pour toute la période de production de cet équipement. La période de développement jusqu'à ce que l'échantillon fini soit de 1 à 2 ans.

Exemple n ° 2: Un prototype d'appareil est requis, ce qui peut intéresser le client et il commandera 100 pièces d'appareils similaires pour la conversion de son installation. Le premier lot prévu doit être expédié au client dans 2 mois. La taille du premier lot de test de 10 pièces.

Les spécifications techniques exactes seront ajustées au cours du travail sur le projet, mais il est connu qu'à l'avenir plusieurs révisions du matériel sont prévues, pour lesquelles il est nécessaire d'ajuster rapidement toute la logique appliquée.

Dans le premier exemple, l'option idéale serait de sélectionner le contrôleur le moins cher et d'écrire un code dépendant du matériel, mais optimal, où le travail avec les périphériques sera organisé grâce à l'accès aux registres appropriés (CMSIS). Le développeur impliqué dans ce projet doit avoir une bonne ou une excellente connaissance de la périphérie d'une famille MK particulière. Idéalement - en essayant de le réveiller la nuit - il devrait immédiatement nommer l'adresse du vecteur requis dans la table des vecteurs d'interruption.

Dans le deuxième exemple, le choix du contrôleur est déterminé par le matériel disponible, ainsi que par le temps requis pour écrire les fonctionnalités requises par le client. Par conséquent, la vitesse et l'optimalité du logiciel lui-même s'effacent en arrière-plan. Il n'y a pas de temps pour l'initialisation manuelle, tout comme il n'y a pas de temps pour déterminer les dépendances matérielles.

Dans ce cas, un contrôleur est sélectionné qui peut être rapidement mis en production dans la région actuelle, il est initialisé à l'aide de Cube MX, la logique d'application est écrite en HAL et le prototype est transféré au client pour test. Un tel projet peut être mené par tout développeur moyen qui a acquis des compétences pour travailler avec le langage de programmation cible. Une compréhension des subtilités du travail de la périphérie n'est pratiquement pas nécessaire.

Aussi triste que cela puisse paraître - dans la réalité du développement d'appareils modernes en Russie - l'exemple n ° 1 devient moins courant, passant le relais à l'exemple n ° 2.

Nous reviendrons sur la discussion des exemples n ° 1 et n ° 2 à la toute fin de la série d'articles, et nous allons maintenant poursuivre la préparation de l'espace de travail.

À ce stade, faites une petite pause, rendez-vous sur my.st.com et enregistrez un compte dessus, car la politique de la société ST ne vous permet pas de télécharger le matériel nécessaire sans inscription.

Après avoir accédé au site - téléchargez STM32 Cube MX.

Tout en bas de la page, il y a un bouton de sélection de version, nous avons besoin de la version 5.0.0

image

En cours de route, jusqu'à ce que nous partions d'ici, nous téléchargeons deux autres choses qui vous seront utiles à l'avenir
https://www.st.com/en/development-tools/stsw-link008.html

Pilote ST-LINK V2

image

et https://www.st.com/en/development-tools/stm32cubeprog.html
Programme clignotant.

image

L'installation du pilote, du pilote flash et de Cub lui-même ne pose aucun problème, nous sommes juste d'accord avec tout et cliquez sur.

Après une installation complète du logiciel nécessaire, nous pouvons commencer à créer un projet.
Pour ce faire, exécutez Cube MX.

Dans la fenêtre qui apparaît, cliquez sur le bouton «ACCÈS AU SÉLECTEUR MCU».

image

Le microcontrôleur STM32F103C8T6 est installé sur notre carte cible.

Entrez son nom dans la barre de recherche et double-cliquez pour sélectionner la seule option trouvée.

Dans le même tableau, vous pouvez voir le remplissage principal de notre MK (64 kilo-octets de flash, 20 kilo-octets de RAM, etc.).

image

Devant nous est apparu un boîtier de contrôleur schématisé avec les jambes écartées dans différentes directions.

À ce stade, vous devez absolument choisir la méthode de connexion du débogueur.

Pour ce faire, sélectionnez l'élément SYS dans l'onglet Pinout & Configuration du menu de gauche et définissez la valeur du câble série dans la liste déroulante sous le nom "Debug".

En même temps, nous remarquons du coin de l'œil que le programme a réservé deux broches pour le débogage sur le mnémonique du contrôleur.

image

Encore une fois, nous rappelons que nous voulons faire clignoter une LED sur notre carte.

Pour ce faire, vous devez d'abord savoir à quelle jambe particulière il est connecté.

En cela, nous allons aider le schéma de circuit électrique:

image

ou brochage de carte plus coloré et plus facile à comprendre

image

La LED souhaitée se trouve sur le pied du PC13.

En conséquence, il est nécessaire de configurer cette sortie pour fonctionner en mode sortie.

Pour ce faire:

  1. On retrouve la conclusion sur le schéma mnémonique
  2. Nous faisons un clic droit dessus, dans le menu déroulant, sélectionnez l'élément "GPIO_Output"
  3. Allez dans le menu GPIO,
  4. Dans la liste, sélectionnez PC13
  5. Nous remplissons le tableau de configuration PC13-TAMPER-RTC conformément à la capture d'écran, nous sommes particulièrement intéressés par le mode GPIO et les paramètres d'étiquette utilisateur

image

Nous continuons de configurer le projet, allez dans l'onglet Configuration de l'horloge.

En fait, c'est l'un des onglets les plus importants qui vous permet de configurer les paramètres d'horloge périphérique, mais pour l'instant nous ne toucherons à rien ici, car l'objectif principal pour le moment n'est pas celui-ci.

image

Accédez à l'onglet Gestionnaire de projets, sous l'onglet Projet.

Assurez-vous de remplir les paramètres suivants:

  1. Nom du projet (il est préférable d'utiliser uniquement des lettres latines)
  2. Le répertoire dans lequel le projet sera créé (il est également préférable de n'utiliser que l'alphabet latin)
  3. IDE dans lequel nous prévoyons de travailler sur le projet (nous prévoyons d'utiliser TrueSTUDIO)

image

Nous descendons ci-dessous, sous l'onglet Générateur de code.

Ici, nous notons certainement l'option Générer l'initialisation périphérique comme paire ...

Ainsi, nous obtenons un projet plus structuré, dans lequel pour chaque type de périphérie il y a une paire de fichiers C et H.

image

La dernière étape est restée. Sous-onglet Paramètres avancés.

  1. Choisissez le type de bibliothèque HAL pour tous les modules périphériques
  2. Nous collectons le projet avec les paramètres actuels

image

Lors du lancement initial, vous devrez peut-être télécharger la version actuelle de la bibliothèque pour la famille MK sélectionnée.

Nous acceptons de télécharger des fichiers:

image

Nous allons réchauffer la bouilloire ou faire du café:

image

Après la fin du travail du générateur de code, nous l'ouvrons immédiatement:

image

Choisissez n'importe quel dossier où Atollic stockera l'espace de travail:

image

Une fois l'ouverture réussie, nous verrons la fenêtre principale d'Atollic TrueSTUDIO for STM.

Les informations générales nous intéressent peu, alors allez immédiatement dans l'arborescence des fichiers.

image

Trouvez le fichier main.c et la fonction int main (void) ici:

image

Pour l'auto-test - essayez de collecter un projet vide

  1. Dans le menu Projet -> Reconstruire le projet
  2. Ci-dessous, sélectionnez l'onglet Console
  3. Une fois l'assemblage réussi - devrait recevoir l'inscription Build Finished

image

Suite dans la partie suivante.

PS: J'ai déjà publié l'article sur mon blog personnel .

Source: https://habr.com/ru/post/fr442162/


All Articles