Accéder au contenu principal

MicroPython sur NUCLEO-F411RE

MicroPython sur NUCLEO-F411RE

MicroPython sur NUCLEO-F411RE

Aujourd'hui, j'ai décidé de tester MicroPython sur une carte STM32 que j'avais sous la main : la Nucleo-64 version STM32F411. Pour les spécifications :

  • ARM Cortex M4 à 100 MHz
  • 512k de mémoire flash, 128k de SRAM
  • 2 extensions de connecteurs aux formats Arduino Uno et ST morpho.

Quand je penses que c'est la fréquence d'horloge d'un de mes premiers ordinateurs... 😥 Nostalgie, quand tu nous tiens. Bref, voyons voir comment fait-on tourner un MicroPython sur la bête !

Flasher la carte

En mode DFU

⚠️ Attention ⚠️ cette manipulation nécessite soit une carte type USB breakout, soit de sacrifier un câble USB en dénudant la partie opposée à celle connectée sur l'ordinateur, soit de faire un peu de soudure avec une prise USB vierge et en y soudant des câbles Dupont.

Il faut tout d'abord récupérer le dernier firmware disponible sur la page de téléchargement. À l'heure actuelle, il s'agit de la version 1.10 (pour F411RE).

Comme le firmware fourni est au format DFU, pour le déposer sur la carte, nous allons utiliser l'outil dfu-util. Il est disponible pour Windows, Mac (notamment avec Homebrew) et Linux (dans les dépôts de pas mal de distributions).

On met la carte Nucleo en mode DFU : on connecte ensemble les pins VDD et BOOT0 (sur le connecteur CN7, pins 5 et 7) puis on relie les fils D+ et D- de notre câble USB de la manière suivante (sur le connecteur CN10, à droite) :

D+ PA12
D- PA11

On vérifie que notre carte est reconnue avec : dfu-util --list :

dfu-util 0.9
[...]
Deducing device DFU version from functional descriptor length
Found Runtime: [05ac:828f] ver=0150, devnum=4, cfg=1, intf=3, path="20-3.3", alt=0, name="UNKNOWN", serial="UNKNOWN"

(Chez moi je n'ai pas le matériel donc ça ne fonctionne pas. Vous devriez avoir un numéro qui doit être utilisé après dans le paramètre -d)

On peut alors flasher la carte : dfu-util -a 0 -d xxxx:xxxx -D NUCLEO_F411RE-20190407-v1.10-265-gfd523c53c.dfu

En mode hexadécimale

Ici, on va pouvoir utiliser le câble USB d'origine qui sera simplement connecté sur la carte (via le ST-LINK donc). Mais, ça va être à nous de compiler notre firmware. Allez, c'est parti 😎

On a besoin du compilateur arm-none-eabi-gcc (facile selon votre OS, moi sous Mac, c'est avec Homebrew). On a également besoin de stlink. Il y a des versions Windows, Linux, Mac (via Homebrew), tout est expliqué sur le dépôt.

On peut alors récuperer l'ensemble du code via git :

git clone https://github.com/micropython/micropython.git

Suivi d'un cd micropython puis : git submodule update --init.

Toutes les informations sont données sur la page des portages. On suit donc la "recette", on active la cross compilation : make -C mpy-cross.

On se place maintenant dans le répertoire dédié aux cartes STM32 : cd ports/stm32. Puis on compile avec un make BOARD=NUCLEO_F411RE. Normalement, ça devrait bien se passer si vous avez bien installer les dépendances 😎.

Pour déployer le code, on peut le faire manuellement avec stlink (avec st-flash) mais le plus simple c'est de compiler avec make BOARD=NUCLEO_F411RE deploy-stlink, ce qui va compiler ET flasher la carte Nucleo (qui soit être branchée sur le port USB).

La compilation est toujours un peu plus délicate à mettre en oeuvre mais le résultat est un plus large choix de possibilité. Ça nous permet ici de nous passer du mode DFU qui nécessite un câble ou du matériel supplémentaire. On va pouvoir tester notre installation maintenant 😉.

Utiliser MicroPython sur STM32

C'est parti pour quelques petits tests de bon fonctionnement 😎 :

Connexion série

J'utilise pour ma part l'utilitaire screen sous Linux ou Mac :

screen /dev/cu.usbmodem14103 115200

C'est bien sûr à adapter à votre système : pour moi usbmodem14103 est le port où est connecté ma carte Nucleo. Normalement vous devriez obtenir un shell Python :

MicroPython v1.10-265-gfd523c53c on 2019-04-07; NUCLEO-F411RE with STM32F411xE
Type "help()" for more information.
>>>

Parfait ! 🤗 🤗 🤗. Essayez un help() pour voir un peu ce que cette carte a dans le ventre.

LED

Si vous avez fait un help() vous avez peut-être vu une fonction led(). On va faire un petit essai :

>>> led = pyb.LED(1) #déclare une variable 'led' avec l'argument '1'
>>> led.on() # allume la led
>>> led.off() # éteint la led
>>> led.toggle() # change l'état la led

Conclusion

J'ai utilisé le mode compilation pour flasher ma carte. C'est un peu long mais je n'ai pas eu à sacrifier un câble USB ^^. J'ai rapidement tester (un pseudo blink tellement classique) mais j'espère avoir le temps de "jouer" un peu plus avec, notamment ajouter une librairie, développer un peu de code, etc.

La suite à un prochain épisode 🤩 !

Commentaires

Posts les plus consultés de ce blog

Utiliser un raspberry pi en mode headless

20191016-headless_raspberry_piUn raspberry pi sans tête 😱(C'est à dire sans écran ni clavier)Pourquoi faire ça ? En fait, parfois (ou même souvent), on a bien envie que notre petit Raspberry à tout faire soit mis dans un coin et qu'il fasse ce qu'on lui demande. Ça marche souvient bien, mais quand même, des fois, il faut bien s'y connecter pour mettre à jour le système ou voir pourquoi ça ne fait pas ce qu'on veut. Et si vous êtes un peu feignant comme moi (comme tout bon informaticien qui se respecte en fait), vous avez forcément la flemme de sortir l'écran, le câble HDMI et de tout connecter. Nous allons donc voir deux méthodes qui permettent de s'en passer.Matériel nécessaireun raspberry pi (voire un kit raspberry pi)une carte SDun adaptateur USB-TTLquatre câbles dupond (pour connecter le raspberry pi à l'adaptateur USB-TTL)Utiliser un raspberry pi en mode headlessMatériel nécessaireSSHJe connais mon adresse IPJe ne connais pas mon adresse IPConnexi…

Utiliser le ST-LINK V2 d'une carte Nucléo avec un autre STM32

Utiliser le STLINK-V2 d'une carte Nucléo avec un autre STM32Utiliser le ST-LINK V2 d'une carte Nucléo avec un autre STM32Hello,
Comme c'était Noël, je me suis offert un lot de STM32f103c8t6, également appelée Blue Pill (acheté sur Amazon pour bénéficier de la livraison Prime mais vous l'aurez pour moins cher sur eBay, à condition d'attendre le délai de livraison de plusieurs semaines...), ainsi que le livre Beginning STM32 qui explique comment mettre en oeuvre ces petites cartes avec des outils uniquement Open Source.Dès le premier chapitre, l'auteur nous explique qu'il nous faut un ST-Link V2 pour programmer la Blue Pill. Argh ! Dans ma précipitation à passer ma commande, je n'ai pas vu cette subtilité... Qu'à cela ne tienne, j'ai déjà une carte Nucleo qui, comme toute les cartes de ce type, intègre un programmateur ST-Link V2.Voyons comment mettre en oeuvre tout ça.Utiliser le ST-LINK V2 d'une carte Nucléo avec un autre STM32Présentation …

Débuter avec Lopy 4

Débuter avec Lopy 4 Débuter avec Lopy 4 Je profites de cette période de confinement pour ressortir de mon placard mon Lopy4 qui trainait dans un tiroir. J'ai avec une carte d'extension Pytrack. A noter qu'il est bien pratique d'avoir une des cartes d'extension pour pouvoir s'y connecter facilement. Les barbus pourront toujours s'y connecter directement avec un adaptateur USB-série, mais ici on fait la méthode simple, on prend une des cartes d'extension.
Mettre à jour la carte d'extension Bon, comme je ne sais plus dans quel état j'ai laissé mon matos, une (re)mise à jour s'impose. On commence par le Pytrack, la page officielle est bien faite. Je résume pour tous ceux (comme moi) qui auront la flemme de tout lire, surtout si ça se passe bien.
Installer dfu-util : sudo apt install dfu-util Mettre à jour :
Débranchez le câble de la carteAppuyez et maintenez le bouton (S1 pour l'expansion board)Branchez le câble USB et attendez une seconde av…