Guide STM32CubeIDE

De Polybot Grenoble
Sauter à la navigation Sauter à la recherche
Suite STM32Cube

Installation

Créer un nouveau projet

À faire

Importer un projet existant

Pour importer un projet existant (après avoir cloner un dépot Git par exemple), il est facile de l'importer sous STM32CubeIDE.

Pour cela, accédez à File>Open project from File System.

Rechercher le projet sur votre ordinateur et cliquez sur Terminer

Tutoriels

Balises STM32CubeMX

Lors de la génération (ou regénération) du fichier main.c, STM32CubeMX ajoute des balises de la forme <syntaxhighlight lang="C" inline>/* USER CODE BEGIN X */</syntaxhighlight> et <syntaxhighlight lang="C" inline>/* USER CODE END X */</syntaxhighlight>. Lorsque vous ajoutez du code dans ce fichier, veillez à le faire entre ces balises, sinon votre code sera supprimé si vous regénérez ultérieurement votre projet avec STM32CubeMX.

Si vous devez ajouter du code à un endroit ou aucune balise n'est disponible, c'est sûrement que vous ne vous y prenez pas de la bonne manière...

Projet C et C++

Explication

Lors de la création d'un projet, nous avons la possibilité de sélectionner le langage cible en tant que C++. Malheureusement, STM32CubeMX ne supporte actuellement pas ce langage. Les fichiers générés par ce dernier seront en C et en particulier le fichier main.c.

Lorsque l'on veut utiliser, ou produire du code C++, il est nécessaire que le fichier main soit en C++. La solution est alors de renommer le fichier main.c en main.cpp. Si le langage cible du projet a bien été réglé sur C++, alors le projet compilera avec succès.

Le problème se produit quand on veut regénerer le projet avec STM32CubeMX. Il va recréer un nouveau fichier main.c à coté de notre fichier main.cpp. Le nouveau code généré sera donc dans le fichier main.c et non main.cpp.

Résolution du problème

  • Fusionner les deux fichiers de manière manuelle dans main.cpp: garder la génération de STM32CubeMX présente dans le fichier main.c et garder le code présent entre toutes les balises du fichier main.cpp.
  • Exclure le fichier main.c du build: clic droit sur main.c > Ressource Configurations > Exclude from build. Ceci indiquera au compilateur de ne pas compiler ce fichier. Il compilera néanmoins main.cpp et ne trouvera pas de conflit.

Notes

Il est possible que ce problème ne soit plus suite à des futures mises à jour de STM32CubeMX. Lors de la rédaction de ce guide, les projets C++ ne sont pas supportés pleinement.

UART: utilisation du printf

Afin de rediriger le printf sur une liaison série (et afficher des messages dans une console par exemple) il est nécessaire de réaliser quelques modifications:

1. Aller dans le fichier Core/Src/main.c/cpp.

2. Ajouter entre les balises <syntaxhighlight lang="cpp" inline>/* USER CODE BEGIN 0 */</syntaxhighlight> et <syntaxhighlight lang="cpp" inline>/* USER CODE END 0 */</syntaxhighlight> la fonction suivante:

<syntaxhighlight lang="cpp"> int __io_putchar(int ch) { uint8_t c = ch & 0x00FF; HAL_UART_Transmit(&huart2, &c, 1, 10); return ch; } </syntaxhighlight>

3. Ajouter entre les balises <syntaxhighlight lang="cpp" inline>/* USER CODE BEGIN Includes */</syntaxhighlight> et <syntaxhighlight lang="cpp" inline>/* USER CODE END Includes */</syntaxhighlight> l'include suivant: <syntaxhighlight lang="cpp">

  1. include <stdio.h>

</syntaxhighlight>

Lors de l'utilisation du printf, ayez le réflexe d'ajouter systématiquement \n à la fin de chaque trame afin de vider le buffer et bien réaliser la communication.

Dans ce guide, j'utilise le handler sur UART nommé huart2, pour une carte Nucleo F446RE, c'est la liaison utilisée par le ST-Link. Si vous voulez utiliser une autre liaison, pensez à le remplacer. Pour configurer une nouvelle liaison série, voir ce guide.

Exemple d'ajout d'une liason UART

Nous prendrons ici l'exemple d'une liaison série. La logique reste la même pour tout ajout dans STM32CubeMX. Évidemment, les spécificités liées aux différentes fonctionnalités dépendront.

Configuration d'une liaison UART

Ajouter une interruption

Porter une bibliothèque existante

À faire