table des matières
- Créer un projet à partir du template mbed-os-example-blinky
- Programme mbed-os-template-blinky et sortie écran
- Ajouter une librairie ou une classe à votre projet
- Fichiers du projet mbed-os-template
- TroubleShooting
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
- Importer le projet template mbed-os-example-blinky
mbed import mbed-os-example-blinky
- Se déplacer dans le dossier
cd mbed-os-example-blinky
- Ajouter la custom target
zest-core-stm32l4a6rg
mbed add https://github.com/catie-aq/mbed_zest-core-stm32l4a6rg.git zest-core-stm32l4a6rg
- Copier la définition de la custom target pour le projet
cp zest-core-stm32l4a6rg/custom_targets.json .
- 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
- Une sonde de débogage JLink
- Un cable USB pour alimenter votre sonde (relié entre la sonde et le PC)
- Une carte Zest Core
- Une nappe plate pour communiquer avec votre Zest Core (reliée entre la cible et la sonde)
- Un cable USB pour alimenter votre Zest Core (relié entre la cible et le PC)
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
Détail de connexion de la sonde JLink et la nappe
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.
Elements connectés au PC de développement
Voici une photo de l’ensemble des éléments connectés au PC de développement
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
- 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
- Créer un dossier CMoteur à la racine de votre projet
- Créer un fichier CMoteur.h et CMoteur.cpp dans le dossier CMoteur
-
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)
- Vérifier la version de pyelftools
pip3 list | grep pyelf
- Si la version de pyelftools est différente de 0.26
-
Installer la version 0.26
pip3 install pyelftools==0.26 --break-system-packages --user
-