STM32 : Environnement de développement

18 février 2020 rdorigny 0 commentaires

STMicroelectronics propose un environnement de développement afin de rendre accessible la programmation de leurs microcontrôleurs STM32. En effet, le STM32 présente de nombreuses fonctionnalités qui peuvent rendre le code source assez indigeste.

Par ailleurs, STMicroelectronics propose un framework pour faciliter l'écriture du code et mieux maîtriser cette complexité au vu des nombreux paramètres à mettre en oeuvre.





1)Le framwork ODE

Le framework ODE fournit plusieurs choses:
  • des cartes de développement comme la Nucleo-64 que je vous ai présenté dans l'article précédent, mais aussi des cartes d'extensions dédiées à des développements spécifiques ;
  • le STMCube qui est une solution logiciel pour configurer le STM32 en tenant compte des fonctionnalités demandées et disponibles;
  • le Function Pack qui sont des librairies d'exemples mises à disposition.


  • STM32Cube est une initiative originale de STMicroelectronics visant à améliorer considérablement la productivité des développeurs en réduisant les efforts de développement, le temps et les coûts. STM32Cube couvre l'ensemble du portefeuille STM32.

    STM32Cube comprend STM32CubeMX, un outil de configuration logicielle graphique qui permet la génération de code d'initialisation C à l'aide d'assistants graphiques. Il comprend également le package MCU STM32CubeF4 composé de la couche d'abstraction matérielle (HAL) STM32Cube et des API de la couche inférieure (LL), ainsi qu'un ensemble cohérent de composants middleware (RTOS, USB, système de fichiers FAT, graphiques et TCP / IP). La pile logicielle graphique TouchGFX est également incluse dans le package MCU STM32CubeF4 en tant que partie de l'écosystème STM32Cube. Il est disponible gratuitement pour la production et la redistribution sur les microcontrôleurs STM32. Tous les utilitaires logiciels intégrés sont livrés avec un ensemble complet d'exemples fonctionnant sur des cartes STMicroelectronics.

    Ce logiciel est téléchargeable (gratuitement donc) sur le site de STMicroelectronics. Il nécessite un JRE Java 64 bits à jour sur Windows 10.

    Le STM32Cube HAL est une couche logicielle intégrée au STM32 qui garantit une portabilité maximisée à travers le portefeuille STM32, tandis que les API LL constituent une couche rapide, légère et orientée vers les experts, plus proche du matériel que le HAL. Les API HAL et LL peuvent être utilisées simultanément avec quelques restrictions.


    Les functions pack:
    STM propose des package STMCubeXX, XX pour la version du ARM, pour moi F4 soit le STM32CubeF4. Dans la suite ce sera la version étudiée.

    STM32CubeF4 rassemble dans un seul package tous les composants logiciels intégrés génériques requis pour développer une application sur les microcontrôleurs STM32F4. Cet ensemble de composants est portable, non seulement au sein de la série STM32F4 mais également vers d'autres séries STM32. Les API HAL et LL sont disponibles en licence BSD open source.


    Seuls les sous-répertoires de Projects peuvent être modifiés par l’utilisateur. Ils se décomposent en plusieurs sous-répertoires dont :
  • Applications fournit des cas d’utilisation typiques pour chacun des middlewares disponibles pour le STM32 cible ;
  • Demonstrations contient des applications qui nécessitent souvent une carte d’extension ;
  • Examples utilise exclusivement la bibliothèque STM32L1xx_HAL_Driver et présente des exemples de mise en oeuvre de chacun des périphériques du STM32 cible ;
  • Templates contient un projet vide mais déjà créé pour chaque environnement de développement supporté.

  • Dans STM Cube vous pouvez télécharger les packs correspondants à vos environnements avec le Menu Help > Manage embedded software packages, par exemple pour le F4:


    2)Création d'un projet

    Dans le STM32 Cube, on va dans l'onglet Project manager pour renseigner le nom du projet et son emplacement sur le disque. Ensuite, on fait Generate code, ce qui va générer dans le dossier qui va bien un code générique que l'on pourra compléter. L'avantage de cette méthodologie est que tous les paramètres génériques sont pris en compte dans ce template.



    L’onglet Pinout sert à configurer les broches du microcontrôleur. En effet, les broches présentent de nombreuses fonctionnalités qu'il faut sélectionner (ADV, UART, I2C, ...). Le STM32 permettant à une même broche d’être utilisée par différents périphériques pour plusieurs fonctions, STM32CubeMX recherche la configuration de brochage optimale pour les périphériques sélectionnés par l’utilisateur, les conflits sont représentés par des couleurs. L’outil utilise un code de couleurs pour les éventuels conflits sur un périphérique :
  • noir lorsque le périphérique n’est pas utilisé ;
  • vert lorsque le périphérique a toutes ses broches correctement configurées ;
  • jaune lorsque le périphérique ne pourra pas être utilisé dans sa totalité car certaines de ses broches sont utilisées par un autre périphérique ;
  • rouge lorsque le périphérique ne peut pas être utilisé car ses broches sont en conflit avec celles d’un autre périphérique.

  • L’onglet Clock Configuration permet de gérer les horloges.

    3)L'interface de développement Keil μVision

    3.1)Installation

    Il existe plusieurs Integrated Development Environments (IDE) pour travailler comme Keil μVision, IAR, SW4STM32, MBED, ...
    Personnellement, j'ai choisi Keil μVision qui est gratuit jusqu'à un programme de 32Ko (ce qui sera largement suffisant pour moi).

    L'installation se fait assez facilement, un formule d'inscription est à renseigner pour pouvoir télécharger le logiciel. Ensuite rien de difficile pour l'installation. Une fois l'installation terminée, ce n'est pas tout, maintenant il faut installer les différents package liés à votre configuration avec le PackInstaller (dans le dossier UV4/PackInstaller.exe). Il suffit alors de sélectionner la carte Nucleo est de sélectionner les package à installer.



    Dans le STM32CubeMX, dans Project Manager, il faut préciser la Toolchain/IDE pour être compatible avec Keil μVision, c'est dire MDK-ARM et prendre la dernière version (pour moi V5.27).



    Une fois la génération du code terminée, il faut choisir l'option ouvrir le projet. Ainsi, Keil μVision s'ouvre sur le projet généré. On a ainsi l'environnement IDE ouvert et configuré avec les bonnes options de la carte Nucleo-64.



    Dernière chose, il est nécessaire d’installer le driver USB de la carte Nucléo. Vous le trouverez ici.

    Ya plus qu'à! On l'a vu, le STM32CubeMX a simplement généré le code générique du modèle de carte (ou MCU) selon les options choisies et préparé le code pour être compatible avec l'IDE de votre choix.

    3.2)Débogage d'un programme

    Prenons l'exemple Blinky, proposé par le packInstaller



    On exécute le projet dans Keil en double-cliquant sur le fichier Blinky.uvprojx.


    On peut vérifier sous Project>Options for Target… que nous avons sélectionné la bonne carte. Pour compiler le projet, il suffit d’appuyer sur le bouton Rebuild. Pour charger le programme sur la carte est configurer le STM32, appuyer sur le bouton LOAD ou DOWNLOAD. Et donc, le programme s’exécutera. A noter, qu'il est parfois utile pour certaine carte de faire un reset afin de relancer le programme.

    Pour initier un débogage, il faut passer par le menu Debug>Start/Stop Debug Session (ou cliquer sur l’icône Start/Stop Debug Session).


    L'interface de Keil s'adapte alors au mode débogage en terme d'ergonomie. Les registres sont présentés à gauche. (Le registre R15 donne l'adresse courante du programme en cours.) Les fenêtres du milieu visualisent le code assembleur et le code source du programme en C. Sur la fenêtre du code source, un indicateur bleu (flèche) indique la ligne en cours d’exécution. Le programme en mode debug est comme figé, c'est le développeur qui fait avancer lui même l’exécution de son programme (pas à pas, séquentiellement, ...). La flèche jaune indique le curseur du code assembleur exécuté en cours. Pour lancer notre programme, il suffit de cliquer sur Debug>Run (ou sur l’icône Run). La LED clignote et le message Hello World s’affiche sur un terminal. (Je ne vais pas m'attarder sur le programme dans cet article, nous verrons cela plus tard).


    Il et possible placer des points d'arrêts (bouton droit, Insert breakpoint) et d'avancer pas en observant les valeurs des registres ou des variables. Pour mettre une variable sous surveillance, double-cliquer sur la variable, bouton droit Add 'var' to > Watch1.

    Conclusion

    Voila une petite présentation de l'environnement de développement du STM32 avec le STM32CubeMX et l'IDE KEIL UVision. Cet IDE propose de nombreuses fonctionnalités, impossible de tout évoquer ici. Je vous laisse les découvrir, l'interface est assez intuitive.

    Par la suite, nous allons voir comment réaliser un petit programme autour des entrées/sorties GPIO et surtout mettre en oeuvre un peu en pratique dans cet environnement.









    Pseudonyme (obligatoire) :
    Adresse mail (obligatoire) :
    Site web :




    © 2020 www.doritique.fr par Robert DORIGNY