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 ++ -> ComprendPropriétés -> Général C / C ++ -> Emplacement sourceDans
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.