Je fais un petit retour d'expérience sur la programmation des microcontrôleurs STM32 de STMicroelectronics. Sait-on jamais, cela serra peut être utile à quelqu'un.

J'ai réalisé toutes les manipulations sur une carte intégrant un STM32F103C8T6. La carte est communément appelée Bluepill sur internet et coûte environ 2$. Pour connaitre les détails de cette carte, vous pouvez jeter un œil sur le wiki de STM32Duino.

Je n'ai utilisé que deux debugger différents :

Pour chaque nouvel environnement de développement, j'ai vérifier le fonctionnement de ces deux debugger.


System Workbench for STM32

ac6_logo.png

J'ai d'abord commencé par utiliser l'environnement System Worbench for STM32 parce qu'il est gratuit et donné comme étant simple et rapide à mettre en œuvre. Ce dernier est basé sur eclipse (ceci est important pour la suite).

Sous windows, je n'ai eu aucun problème pour l'utiliser. Le logiciel STM32CubeMX est directement compatible avec cet environnement. L'utilisation d'un ST-Link (clone ou non) avec est immédiate et vous pouvez commencer à programmer rapidement.

Pour faire fonctionner un debugger J-Link, il faudra installer GNU MCU Eclipse. Pour ma part, l'installation depuis le Marketplace Eclipse ne fonctionnait pas et j'ai du effectué une installation manuelle en suivant les instructions de la page d'installation.

Mon système d'exploitation principal étant ArchLinux, j'ai essayer d'y installer cet environnement. Il existe un paquet AUR nommé SW4STM32 mais son mainteneur ne semble pas le mettre à jour souvent. Cependant le principal problème que j'ai eu sous ArchLinux est la mauvaise compatibilité du logiciel avec l'OpenJDK 8, la dernière implémentation Open Source de Java SE. Le logiciel est lent et il devient impossible de s'en servir correctement.

Je n'ai pas trouvé de solution pour résoudre ce problème et j'ai donc abandonné cette solution.


Eclipse + GNU MCU Eclipse plug-ins

eclipse-oxygen-september-2017+gnu-mcu-eclipse_logos.png

System Workbench for STM32 est basé sur Eclipse et il est nécessaire d'installer le plug-in GNU MCU Eclipse pour faire fonctionner le debugger J-Link, alors pourquoi ne pas partir sur un Eclipse non modifié ? C'est que j'ai essayer ensuite.

Après avoir installé Eclipse et les plug-ins GNU MCU Eclipse depuis le marketplace (ça a fonctionné cette fois), j'ai pu programmer et debugger ma carte. Pour faire fonctionner le ST-LINK il faut juste faire un fichier de configuration OpenOCD, ce qui m'a pris pas mal de temps. Mais pour le J-Link tout fonctionne directement.

Dans le cas de cet environnement de programmation, il faut choisir l'option Makefile lors de la génération du code avec STM32CubeMX. Et le projet peut ensuite être importé dans Eclipse en tant que projet Makefile.

J'ai utilisé cet environnement pendant un bon moment avant qu'une mise à jour d'Eclipse casse la compatibilité avec GNU MCU Eclipse. J'avais également beaucoup de mal avec Eclipse notamment sur le fait que toutes les configurations se font dans des menus disséminés un peu partout. Ce qui me semblait difficilement compatible avec l'utilisation d'un Makefile et me rendait fou au moindre problème de compilation non dépendant de mon code.


QT Creator + Bare Metal Plug-in

Qt_Creator_Icon.png

Après un petit temps de recherche sur internet, j'ai vu qu'il était possible d'utiliser QT Creator pour programmer des microcontrôleur ARM. Ayant déjà utiliser cet environnement pour écrire des programmes et ayant été conquis par sa simplicité, je partais plutôt confiant. Et je n'ai pas été déçu.

Pour l'installation et la configuration du logiciel, il suffit de suivre les instructions données sur cette page Github (en anglais). Le debug des microcontroleurs se fait au travers de OpenOCD, quel que soit le debugger et de même que pour Eclipse, la compilation se fait au moyen des fichiers Makefiles.

Ce que j'aime avec cette solution, c'est sa simplicité et sa clarté. Toute la configuration se fait dans le fichier .config du projet QTCreator et dans le Makefile. Il faut juste un peu d’entraînement pour savoir lire et modifier les Makefiles mais une fois assimilé quelques bases tout est clair et regroupé au même endroit. Et pas besoin de cases à cocher, de menus et d'onglets dans tous les sens.

J'utilise maintenant QTCreator pour programmer mes cartes STM32 et j'en suis satisfait. Je ne compte pas revenir à Eclipse mais je ne suis jamais contre essayer un autre environnement si vous en avez un à proposer. Alors qu'est ce que vous utilisez de votre côté ?

Edit du 07/05/2018 : Avec QTCreator, il n'est pour le moment pas possible d'avoir une vue des registres des périphériques. Je suis cependant tombé sur ce logiciel qui se connecte à l'instance d'OpenOCD en cours et affiche l'état des registres, pour peu d'avoir le bon fichier de description .svd. A tester !