vendredi 1 novembre 2019

Programmation d'une carte STM32 avec l'IDE Arduino

Maintenant que le "STM32Duino Core" de Roger Clarke a été remplacé par "l'official STM32 Core" mis au point par STMicroelectronics, il semble approprié de rédiger cette nouvelle introduction à la programmation d'une carte STM32 au moyen de l'IDE Arduino.

Une excellent nouvelle, en ce qui me concerne, c'est que le nombre de cartes supportées est beaucoup plus imposant qu'il ne l'était auparavant. En plus de la Blue Pill (STM32F103C8T6), je pourrai dorénavant programmer ma carte Nucleo F030R8 ainsi que mon STM32F030 Demo Board V1.1 en utilisant l'IDE Arduino.

Dans cet article, je vais programmer chacune de ces 3 cartes grâce à l'IDE Arduino, en utilisant un programmateur ST-Link ou un convertisseur USB série.



Installation des cartes STM32 au moyen du gestionnaire de cartes

Tout d'abord, on choisit "Préférences" dans le menu "Fichier".


Dans le bas du dialogue "Préférences", il faut ajouter l'adresse suivante à l'intérieur du champ "URL de gestionnaire de cartes supplémentaires":

https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json

(si ce champ contient déjà d'autres adresses, vous pouvez les séparer par des virgules).



Nous accédons ensuite au gestionnaire de carte (Menu Outils - Type de carte - Gestionnaire de carte).


"STM32 Cores by STMicroelectronics" devrait maintenant être disponible dans le gestionnaire de cartes. Il ne reste plus qu'à cliquer sur le bouton "Installer" et à patienter quelques minutes.



Installation de STM32 Cube Programmer

Si vous devez programmer votre carte avec un programmateur STLink ou un convertisseur USB/Série, il faudra aussi installer le logiciel STM32 Cube Programmer, disponible sur le site ST.com (ce n'est pas nécessaire si vous programmez une carte Nucleo).

Le seul irritant, c'est que ST exige qu'on s'identifie avant de nous laisser télécharger le logiciel. J'ai dû attendre une bonne dizaine de minutes avant de recevoir l'indispensable email de validation.

Pour le reste, le logiciel vient avec un installateur, c'est simple et rapide.


Programmation de ma carte Nucleo F030R8

La seule carte Nucleo que je possède est un modèle bas de gamme que je programmais strictement sur mbed, puisqu'elle n'était pas supporté par le STM32 Duino core de Roger Clarke.

Pour sélectionner cette carte, je commence par choisir la catégorie "Nucleo-64" (menu "Outils - Type de carte - Nucleo-64").


Je peux ensuite sélectionner la bonne carte à l'intérieur de cette catégorie (menu "Outils - Board part number -Nucleo F030R8").


Finalement, réglage de la méthode de téléversement (menu "Outils - Upload Method - Mass Storage").


Il ne reste plus qu'à brancher la carte Nucleo a un port USB, sélectionner le port, et téléverser l'exemple Blink: tout fonctionne à la perfection.

Programmation de la carte STM32F103C8T6 (Blue Pill)


Essayons maintenant la Blue Pill. J'ai sélectionné la catégorie "Generic STM32F1 series" dans "Outil - Type de carte".


J'ai ensuite choisi "BluePillF102C8 (128k)" dans le menu "Outils - Board part number".


Il faut ensuite préciser la méthode de téléchargement (menu "Outils - Upload method"). Si vous programmez votre Blue Pill avec un programmateur STLink, il faut choisir "STM32CubeProgrammer (SWD)". Si vous utilisez un convertisseur USB-Série, vous choisissez plutôt "STM32CubeProgrammer (Serial)".



4 fils sont utilisés pour brancher la carte Blue Pill à l'adaptateur USB-Série:
  • GND de l'adaptateur USB/Série --- GND de la Blue Pill
  • RXD de l'adaptateur USB/Série --- PA9 de la Blue Pill
  • TXD de l'adaptateur USB/Série --- PA10 de la Blue Pill
  • 3V3 de l'adaptateur USB/Série --- 3.3V de la Blue Pill


La carte Blue Pill comporte deux jumpers. Le jumper "Boot0" (celui qui est le plus éloigné du bouton reset) doit être placé en position "1" pour que le téléversement du sketch réussisse en mode série.


Toujours en téléversement série, avant de cliquer sur le bouton "Téléverser", vous devez appuyez sur le bouton "reset" de la carte Blue Pill (mon doigt est trop gros pour atteindre le bouton: je suis obligé d'utiliser un crayon).


Si vous utilisez un programmateur STLink V2, vous le branchez aux 4 connecteurs situés à l'extrémité de la carte.





Avec STLink, il n'est pas nécessaire d'appuyer sur le bouton reset avant le téléchargement, et la position du jumper "Boot0" n'a pas d'importance.

Ici encore, le téléversement de l'exemple Blink vous permettra de confirmer que tout fonctionne correctement.


Programmation de la carte STM32F030 Demo Board V1.1

Il y a quelques années, je m'étais procuré cette carte à cause de son prix ridiculement bas (de l'ordre de 1 euro!), mais je n'avais encore jamais eu l'occasion de la programmer.



Pour ce modèle, je sélectionne la catégorie "Generic STM32F0 series" dans le menu "Outil - Type de carte".



J'ai ensuite choisi "STM32F030F4 Demo board" dans le menu "Outils - Board part number".


Il faut ensuite préciser la méthode de téléchargement (menu "Outils - Upload method". Si vous programmez la carte un programmateur STLink, il faut choisir "STM32CubeProgrammer (SWD)". Si vous utilisez un convertisseur USB-Série, vous choisissez plutôt "STM32CubeProgrammer (Serial)".


À une extrémité de la carte, 4 broches permettent la programmation avec un convertisseur USB-Série, et 4 autres broches sont disponibles pour la programmation avec STLink. Le rôle de chaque connecteur est assez clairement indiqué sur la carte.


Pour la programmation avec un convertisseur USB-série:
  • Broche 3V3 de la carte STM32 - Broche 3V3 du convertisseur USB-série
  • Broche GND de la carte STM32 - Broche GND du convertisseur USB-série
  • Broche TXD de la carte STM32 - Broche RXD du convertisseur USB-série
  • Broche RXD de la carte STM32 - Broche TXD du convertisseur USB-série

Pour la programmation avec un dongle ST-Link:
  • Broche 3V3 de la carte STM32 - Broche 3,3 V du ST-Link
  • Broche DIO de la carte STM32 - Broche SWDIO du ST-Link
  • Broche CLK de la carte STM32 - Broche SWCLK du ST-Link
  • Broche GND de la carte STM32 - Broche GND du ST-Link
Lorsqu'on programme avec le convertisseur USB-série, il faut appuyer sur le bouton "reset" avant le téléchargement. Le jumper BOOT0 doit être placé à 3,3 V lors du téléversement du programme, et à GND lors de son exécution.

Bilan

Pour l'instant, mes tests se sont limités à faire clignoter la LED de la carte, communiquer avec le moniteur série, etc. Reste à voir si la majorité des bibliothèques Arduino sont compatibles avec les cartes STM32 (c'est souvent là que ça coince un peu). Je devrai aussi vérifier si tous les sketches que j'ai écrits pour la Blue Pill sous l'ancien core demeurent fonctionnels, sans modifications, sur le nouveau core.

Je suis assez optimiste.

À lire également

Vous trouverez sur cette page tous les articles concernant les cartes STM32, qu'elles soient programmées avec l'IDE Arduino ou avec mbed.

Yves Pelletier   (TwitterFacebook)


5 commentaires:

  1. Bonjour Yves et merci pour vos articles très pertinents

    Bernard

    RépondreSupprimer
  2. Bonjour,
    Merci pour cet article détaillé.
    Une question toutefois, depuis sa rédaction un petit bilan sur ce qui fonctionne, ou pas, des anciens progs écrits avec le SDK de R. Clarke ?
    J'ai franchement mis de coté mes blue pills depuis qu'il a abandonné le SDK et le forum, faute de place/bande passante chez son hébergeur.
    Le "cube" de STM m'a toujour rebuté, vraient trop usine à gaz...
    Et mbed j'ai jamais vraiment accroché.

    Bonne continuation

    RépondreSupprimer
  3. Bonjour,
    Merci pour le tuto. Je vais essayer. Je suis d accord avec vous que CubeMx est une usine à gaz, par contre MBED, c est pas mal. J ai un groupe de jeunes du niveau de CM2 au 4e, ils codent bien avec MBED. La raison pour laquelle je suis plus MBED que Arduino, bien que Arduino a plus de choses disponibles, c est parce que j ai les cartes Nucleos STM32 offertes. Bonne journee.

    RépondreSupprimer
  4. cest tres intéressant merci beaucoup de toutes les renseignements

    RépondreSupprimer
  5. Bonjour, j'ai connecté la nucle à la bluepill mais Est ce qu'il faut changer de place les jumpers de la bluepill ou de la nucleo?

    RépondreSupprimer