table des matières
  1. Créer un projet à partir du template mbed-os-example-blinky
    1. Ouvrir le projet dans vscode
    2. Compiler le programme
    3. Matériel nécessaire
    4. Connexion des éléments
      1. Détail de connexion de la cible Zest Core et la nappe
      2. Détail de connexion de la sonde JLink et la nappe
      3. Elements connectés au PC de développement
      4. Vérification
    5. Téléverser (flasher) votre programme sur la cible
  2. Programme mbed-os-template-blinky et sortie écran
  3. Ajouter une librairie ou une classe à votre projet
    1. Cas d’une nouvelle librairie/classe
    2. Cas d’une librairie existante
  4. Fichiers du projet mbed-os-template
    1. Arborescence
    2. main.cpp
    3. mbed_app.json
      1. Exemple - Activation de l’affichage des nombres réels
    4. mbed-os.lib
  5. TroubleShooting
    1. Si vous avez ce problème de compilation

Cette page détaille l’utilisation de VsCode et de mbed pour générer un exécutable pour ARM CortexM.

VS code est l’IDE utilisé dans le BTS pour développer pour les cibles Zest Core STM32. Afin qu’il soit fonctionnel pour notre chaîne de développement, un certain nombre de paramètres doivent être personnalisés.

Nous allons synthétiser l’utilisation de Vscode et détailler la configuration du projet template proposé

Créer un projet à partir du template mbed-os-example-blinky

Maintenant que la chaîne de compilation est installée, vous allez pouvoir tester la compilation, le téléversement et l’exécution de votre projet

Dans un premier temps, vous allez importer un projet template fourni par Mbed, le configurer pour votre target et votre chaîne de compilation.

Ensuite, vous l’ouvrirez dans VsCode pour le compiler et flasher votre carte

  1. Importer le projet template mbed-os-example-blinky
mbed import mbed-os-example-blinky
  1. Se déplacer dans le dossier
cd mbed-os-example-blinky
  1. Ajouter la custom target zest-core-stm32l4a6rg
mbed add https://github.com/catie-aq/mbed_zest-core-stm32l4a6rg.git zest-core-stm32l4a6rg
  1. Copier la définition de la custom target pour le projet
cp zest-core-stm32l4a6rg/custom_targets.json .
  1. Définir la target et la toolchain du projet
mbed target ZEST_CORE_STM32L4A6RG
mbed toolchain GCC_ARM

Ouvrir le projet dans vscode

  • Ouvrir le dossier contenant votre projet mbed-os-example-blinky

Fichier -> Ouvrir un dossier

Compiler le programme

Dans Vscode

  • Ouvrir un terminal

Terminal -> New terminal

  • Compiler le projet
mbed compile

Le projet se compile cela prends plusieurs minutes la première fois.

Matériel nécessaire

Maintenant que votre programme est compilé, vous aller pouvoir le téléverser sur la cible.

Avant cela, il faut connecter physiquement les éléments ensembles

  • Voici le matériel dont vous avez besoin

De gauche à droite

  1. Une sonde de débogage JLink
  2. Un cable USB pour alimenter votre sonde (relié entre la sonde et le PC)
  3. Une carte Zest Core
  4. Une nappe plate pour communiquer avec votre Zest Core (reliée entre la cible et la sonde)
  5. Un cable USB pour alimenter votre Zest Core (relié entre la cible et le PC)

Zest1

Connexion des éléments

Attention à correctement connecter les éléments ensemble. Si vous vous trompez, soit votre programme ne sera pas téléversé, soit, dans le pire des cas, vous endommagerez le matériel.
En cas de doute, appeler l’enseignant

Détail de connexion de la cible Zest Core et la nappe

Comme sur la photo ci-dessous, l’encoche de la nappe doit être vers le haut et le repère rouge à gauche

Zest2

Comme sur la photo ci-dessous, seule la moitié de la nappe est connectée, et il faut que ce soit la partie avec le repère rouge.

Zest3

Elements connectés au PC de développement

Voici une photo de l’ensemble des éléments connectés au PC de développement

Zest4

Vérification

  • La LED de la sonde est verte et allumée
  • La LED de la cible Zest Core est rouge et allumée

Téléverser (flasher) votre programme sur la cible

Les éléments correctement connectés, vous êtes prêt à flasher la cible.

  • Flasher la carte
sixtron_flash

Lors du premier téléversement, une fenêtre s’ouvre pour confirmer que vous voulez utiliser JLink. Cocher la case “Do not show this message again” et cliquer sur Accept

Jlink

  • Le programme s’exécute sur la carte. la LED verte s’allume et s’éteint toutes les secondes.

Programme mbed-os-template-blinky et sortie écran

La sonde intégrée Jlink permet de rediriger des sorties écrans vers un terminal (/dev/ttyUSB0)

Pour cela,

  • Cliquer sur l’onglet terminal de VSCODE.
  • Entrer la commande suivante
mbed sterm --port /dev/ttyUSB0
  • Sortie écran
[mbed] Working path "/.../mbed-os-example-blinky" (program)
[mbed] Opening serial terminal to the specified COM port "/dev/ttyUSB0"
--- Terminal on /dev/ttyUSB0 - 9600,8,N,1 ---

Dans le programme, les printf() seront redirigés vers ce terminal série.

printf("LO CIEL \n");

Ajouter une librairie ou une classe à votre projet

Cas d’une nouvelle librairie/classe

Pour que votre classe soient correctement compilée, vous devez indiquer son chemin depuis la racine de votre projet.

Exemple : classe CMoteur

  1. Créer un dossier CMoteur à la racine de votre projet
  2. Créer un fichier CMoteur.h et CMoteur.cpp dans le dossier CMoteur
  3. Inclure la classe CMoteur dans le fichier concerné (main.cpp par exemple)

    #include "CMoteur/Cmoteur.h"
    

Cas d’une librairie existante

Si vous ajoutez une librairie de composant avec mbed add, elle est immédiatement fonctionnelle.

La page Librairie de composants détaille l’installation de librairies existantes

Fichiers du projet mbed-os-template

Arborescence

├── CMakeLists.txt  -> Le fichier contenant les directives de compilation
├── CONTRIBUTING.md -> Documentation pour contribuer à Mbed
├── LICENSE         -> La licence (Apache 2.0)
├── main.cpp        -> Le fichier principal du projet
├── mbed-os         -> Le dossier contenant l'OS Mbed OS
├── mbed-os.lib     -> Le fichier contenant la version de Mbed OS a utiliser pour le projet
├── mbed_settings.py -> Un fichier de configuration en python
├── README.md       -> Le README du projet
└── resources       -> Un dossier de ressources (contient une image avec un badge officiel)

main.cpp

Le fichier main.cpp contient un “Hello World” qui allume et éteint la led1 toutes les 500ms

/* mbed Microcontroller Library
 * Copyright (c) 2019 ARM Limited
 * SPDX-License-Identifier: Apache-2.0
 */

#include "mbed.h"

// Blinking rate in milliseconds
#define BLINKING_RATE     500ms

int main()
{
    // Initialise the digital pin LED1 as an output
#ifdef LED1
    DigitalOut led(LED1);
#else
    bool led;
#endif

    while (true) {
        led = !led;
        ThisThread::sleep_for(BLINKING_RATE);
    }
}

mbed_app.json

Ce fichier est le fichier de configuration pour des options spécifiques. Les options peuvent concerner une configuration matérielle particulières ou l’activation de fonctionnalités logicielles pour le projet.

Si vous avez besoin de configuration spécifique et que le fichier mbed_app.json n’existe pas, il faudra le créer à la racine de votre projet

Exemple - Activation de l’affichage des nombres réels

Ici, nous précisons que nous voulons activer l’affichage des nombres réels pour toutes les cartes.

{
    "target_overrides": {
 	"*": {
            "target.printf_lib": "minimal-printf",
            "platform.minimal-printf-enable-floating-point": true,
            "platform.minimal-printf-set-floating-point-max-decimals": 6,
            "platform.minimal-printf-enable-64-bit": false
        },
        "K64F": {
            "platform.stdio-baud-rate": 9600
        }
    }
}

mbed-os.lib

Le fichier contient un lien vers la version de mbed-os qui doit être utilisé par le projet. Le fichier, comme tous les .lib est utilisé lorsqu’on exécute mbed update

Dans notre cas, la version téléchargée est la 6.17.0

https://github.com/ARMmbed/mbed-os/#4cfbea43cabe86bc3ed7a5287cd464be7a218938

TroubleShooting

Si vous avez ce problème de compilation

ImportError: cannot import name 'MutableMapping' from 'collections' (/usr/lib/python3.11/collections/__init__.py)
  1. Vérifier la version de pyelftools
pip3 list | grep pyelf
  1. Si la version de pyelftools est différente de 0.26
    1. Installer la version 0.26

      pip3 install pyelftools==0.26 --break-system-packages --user