STM32 + CMSIS + STM32CubeIDE

Ici, je vais vous dire comment créer un projet minimal sur CMSIS en utilisant l'IDE "natif" pour les microcontrôleurs STM - STM32CubeIDE.

Peut-être que STM32CubeIDE présente un certain nombre d'inconvénients, mais il présente, à mon avis, plusieurs avantages - tels que propriétaire et gratuit, pour lesquels, au moins, vous devriez faire attention à cet environnement de développement si vous ne l'avez pas déjà fait auparavant.



Le microcontrôleur STM32F072 avec le noyau ARM Cortex-M0 a été choisi comme objet du firmware pour le STM32F103 plus familier sur l'ARM Cortex-M3, ajusté pour le noyau, le processus est identique.

Toutes les ressources nécessaires peuvent être téléchargées sur st.com , et voici ce dont vous avez besoin:

  • IDE lui - même , j'utilise la version Windows, mais des versions pour Mac et Linux sont également disponibles

  • Bibliothèque CMSIS pour ARM Cortex-M0 , elle est située dans l'archive STM32CubeFx, ventilée par version du noyau. L'archive elle-même, en plus de CMSIS, contient de nombreuses autres ressources allant d'exemples de travail avec des périphériques aux pilotes USB, en fait, cette archive est utilisée si vous créez un projet à l'aide de STM32Cube

  • La fiche technique et le manuel de référence ne feront pas de mal


Après avoir installé, démarré et sélectionné le dossier Workspace, vous pouvez commencer à créer le projet. Actuellement STM32CubeIDE version 1.1.0, donc l'emplacement des différents paramètres doit être basé sur cela.

Création d'un nouveau projet - Fichier / Nouveau / STM32Project . Après réflexion, la fenêtre de sélection du microcontrôleur apparaît, dans mon cas c'est STM32F072RB dans le package LQFP64, je sélectionne la ligne souhaitée, cliquez sur suivant. Il est en outre proposé de sélectionner le nom du projet, l'emplacement, le langage de programmation C / C ++, le fichier exécutable / la bibliothèque statique et si le projet sera généré à l'aide de CubeMX ou avec une moustache. La génération de cube, dans ce cas, n'est pas nécessaire, donc le type de projet Vide est la finition.




À gauche, dans la fenêtre Explorateur de projets , l'arborescence du projet est apparue, bien qu'elle ne soit pas tout à fait vide , comme ordonné. En principe, si la structure de dossiers générée vous convient, vous pouvez y ajouter des fichiers de la bibliothèque CMSIS et y travailler, mais ici je vais montrer comment vous pouvez mettre la structure du projet en harmonie avec mon sens de la beauté, donc tout sauf le script de l'éditeur de liens est supprimé, c'est-à-dire fichier avec l'extension .ld - il sera utile.



Toutes les manipulations avec des dossiers et des fichiers peuvent être effectuées à la fois dans l'Explorateur et à l'intérieur de l'EDI en cliquant avec le bouton droit sur le nom du projet, par exemple: bouton droit -> nouveau -> Dossier . Si la structure du projet a changé en dehors de l'EDI, il vous suffit de mettre à jour le projet: bouton droit -> Actualiser .

Ma version de la structure du projet ressemble à ceci:

  • Démarrage - le script de l'éditeur de liens sera stocké ici, celui restant du projet généré, ainsi que le fichier de démarrage extrait de CMSIS
  • CMSIS \ src et CMSIS \ inc - voici la source, les fichiers avec l'extension .c dans le dossier scr et les fichiers d'en-tête avec l'extension .h dans le dossier inc , respectivement, liés à la bibliothèque CMSIS
  • Core \ src et Core \ inc - le projet lui-même sera situé ici, pour commencer, mettez main.c et main.h là


Vous devez maintenant transférer les fichiers de la bibliothèque CMSIS vers le projet. La bibliothèque se compose de fichiers principaux et de fichiers périphériques. Les fichiers du noyau commencent par core_ ou cmsis_, ils sont communs à tous les microcontrôleurs qui utilisent ce noyau. Les fichiers périphériques contiennent le nom du microcontrôleur stm32 dans le nom et sont spécifiques à un fabricant particulier, dans ce cas, la société STM.

Dans le formulaire décompressé, l'archive contient le dossier STM32Cube_FW_F0_V1.11.0 , tous les chemins sont relatifs à ce dossier. Total, vous devez copier:

Dans CMSIS \ inc :

  • Drivers \ CMSIS \ Include \ cmsis_compiler.h
  • Drivers \ CMSIS \ Include \ cmsis_gcc.h
  • Drivers \ CMSIS \ Include \ cmsis_version.h
  • Drivers \ CMSIS \ Include \ core_cm0.h
  • Drivers \ CMSIS \ Device \ ST \ STM32F0xx \ Include \ stmf0xx.h
  • Drivers \ CMSIS \ Device \ ST \ STM32F0xx \ Include \ stm32f072xb.h
  • Drivers \ CMSIS \ Device \ ST \ STM32F0xx \ Include \ system_stm32f0xx.h

Dans CMSIS \ src :

  • Drivers \ CMSIS \ Device \ ST \ STM32F0xx \ Source \ Templates \ system_stm32f0xx.c

Au démarrage:

  • Drivers \ CMSIS \ Device \ ST \ STM32F0xx \ Source \ Templates \ gcc \ startup_stm32f072xb.s

Voici à quoi ressemble le projet dans sa forme terminée.


Étant donné que certaines manipulations avec les dossiers du projet ont été effectuées, vous devez l'afficher dans les paramètres.

Le bouton droit pour le nom du projet -> Propriétés -> C / C ++ Build -> Paramètres -> Paramètres de l'outil -> MCU GCC Linker -> Général - ici, vous devez spécifier le nouvel emplacement du script de l'éditeur de liens à l'aide du bouton Parcourir ...


Vous devez également spécifier le chemin d'accès aux fichiers de projet

Propriétés -> Général C / C ++ -> Comprend
Propriétés -> Général C / C ++ -> Emplacement source

Dans Comprend les chemins d'accès aux dossiers inc et dans Emplacement source, il serait logique de créer des dossiers src , mais si vous le faites, ces dossiers seront ajoutés séparément à l'arborescence du projet. Afin de ne pas encombrer visuellement l'arborescence, dans l' emplacement source, vous pouvez spécifier les dossiers racine Core , CMSIS et Démarrage .



Pour que le projet soit compilé, vous devez décommenter la ligne avec le nom du microcontrôleur dans le fichier stm32f0xx.h et, bien sûr, ajouter la fonction principale dans main.c.



En fait, tout. Une compilation sans erreur et a immédiatement disparu quelque part jusqu'à un kilo-octet et demi de mémoire RAM est RAM, et immédiatement la pile et le tas sont mémorisés, ils n'ont été mentionnés nulle part dans le processus de création du projet. La taille de la pile et du tas est indiquée dans le fichier de script de l'éditeur de liens, celui avec l'extension .ld, ils peuvent et doivent être modifiés conformément aux exigences du projet. Ces valeurs sont situées au début du fichier sous la forme d'étiquettes _Min_Heap_Size / _Min_Stack_Size avec la taille en hexadécimal.



À titre d'exemple, je vais vous donner un petit projet d'un clignotement LED traditionnel.

La LED clignote sur la carte de débogage STM32F072B-DISCO, la synchronisation est effectuée à partir d'un générateur HSI48 interne avec une fréquence de 48 MHz et le temporisateur SysTick est utilisé comme source de retard, générant des interruptions d'une période de 1 ms, par lesquelles le temps de retard exact est compté. La LED est connectée à la broche 6 du port C, configurée pour la sortie push-pull.

J'espère que ces informations sont utiles à quelqu'un, car À un moment donné, malgré l'abondance de matériel de programmation STM32, j'ai dû pelleter beaucoup de manuels pour réaliser des choses qui semblent maintenant évidentes.

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


All Articles