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 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 STM32 Utiliser le ST-LINK V2 d'une carte Nucléo avec un autre STM32 Hello, 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

Coder en C sur un Lopy (Pycom)

Présentation du matériel Hello ! Dans cet article je vais vous parler de mes premiers pas en développement embarqué d'ESP32 en utilisant du matériel de chez Pycom. N'hésitez pas à me faire part de vos remarques et suggestions dans les commentaires ! Voici le sommaire : Présentation du matériel Cartes de développement Cartes d'extension Pourquoi ? Matériel utilisé Installation du framework ESPRESSIF pour ESP32 Démarrer un projet existant Liaison série Câblage du module Configuration du projet Flasher le programme Monitor Conclusions Présentation du matériel Cartes de développement Lopy est un microcontrôleur qui embarque un micro système Python, finement appelé MicroPython . Ce système léger permet de faciliter l'accès au développement embarqué, en utilisant un langage de programmation facile d'accès et qui possède une communauté importante (ce qui permet de trouver facilement de l'aide), j'ai nommé Python !