Comment tester ma première application sur Nucléo ?

Notion obligatoire pour la suite

Objectifs

  • Reconnaître les différents connecteurs de la carte
  • Compiler et téléverser un programme sur la carte
  • Tester sa première application

Pré-requis

N.B. Ce tutoriel peut être complété par la page suivante, Découvrir les microcontrôleurs des cartes Nucléo, qui fournit des compléments d’information sur les microcontrôleurs, leur structure, la structure d’un programme embarqué et les différences avec la programmation en C standard.

La carte de prototypage Nucléo

La carte de développement que nous allons utiliser est une carte Nucléo-L476RG, conçue par ST MicroElectronics (société franco-italienne – ex Thomson Semiconducteurs).

Caractéristiques principales

Elle possède les éléments suivants :

  • Processeur : STM32L476RGT6 / ARM®32-bit Cortex®-M4 CPU
  • Fréquence maximale : 80 MHz
  • Alimentation : 3.3 V
  • Mémoire programme : 1 MB Flash
  • Mémoire données :128 KB SRAM
  • Ressources :
    • Entrées/Sorties Numériques : 51, dont 1 LED présente sur la carte (sortie D13 ou PA_5) et un bouton-poussoir (entrée PC_13)
    • ADC 12 bits / 5 MHz (x 3)
    • DAC 12 bits / 2 canaux
    • Timers
    • Interruptions externes
  • Communications :
    • SPI / I2C
    • USART / UART / CAN
    • USB OTG Full Speed

Broches du microcontroleur et connecteurs

Pour accéder aux broches de la carte, il existe deux types de connecteurs différents :

  • Connecteurs compatibles Arduino Uno
  • Connecteurs ST Morpho (specifiques)

L’ensemble des broches peuvent être configurées indépendamment en entrée ou en sortie numérique.
Ces broches sont regroupées en ports d’entrées/sorties nommés Px (où x est une lettre de A à G – par exemple le port A se nomme PA). Chacune des broches d’un port sont ensuite désignées par un nombre de 0 à 15 (par exemple, la broche 3 du port B s’appelle PB_3).

Broches spécifiques des cartes Nucléo

La broche PA_5 par exemple est reliée à une LED nommée LED1. On peut alors utiliser l’une ou l’autre des dénominations pour accéder à cette ressource.

La broche PC_13 est reliée à un bouton-poussoir nommé USER_BUTTON.

N.B. Ces deux broches permettent de tester rapidement toute la chaîne de développement (IDE, programmation…) sans avoir à cabler quoi que ce soit d’autre que le cable USB reliant l’ordinateur à la carte Nucléo.

Les broches PA_2 et PA_3 sont respectivement les broches USBTX et USBRX permettant de transmettre selon le protocole RS232 (voir tutoriel xxx) des informations de la carte vers le PC (et inversement). Ce sont ces deux canaux qu’utilisent également la console série pour le débogage (voir tutoriel Déboguer son application).

Carte Nucléo L476RG / ST Microelectronics

Accès aux brochages de la carte en cliquant sur l’image précédente.

Connecteurs Arduino

Ces connecteurs sont compatibles avec les cartes d’extensions Arduino Uno (ou shields). Les noms des entrées/sorties sont équivalentes à celles d’Arduino.
Par exemple, D13 est une broche numérique qui pourra être configurée en entrée ou en sortie.

D’autres fonctionnalités de ces broches sont listées également à côté de leurs noms sur l’image précédente.
Par exemple, la broche D11 (numérotation Arduino) correspond à la broche physique PA_7 du composant, qui peut être configurée comme : une sortie PWM, la sortie MOSI de la liaison SPI1, une entrée analogique…

Sur la zone de gauche, il est également possible d’accéder à des entrées analogiques, numérotées de A0 à A5, et à une zone d’alimentation : GND (masse), 5V, 3.3V.

Connecteurs Morpho

Les connecteurs Morpho sont conçus par STMicroelectronics et permettent d’accéder à l’ensemble des broches du composants (et de ses périphériques).

Programmer une carte Nucléo à l’aide de Keil Studio (via MBED)

Tout comme les processeurs généralistes (qui équipent la plupart des ordinateurs), les microcontrôleurs ne comprennent que du langage de bas niveau, encore appelé assembleur. Cependant, ces langages étant difficiles à comprendre et à appréhender pour un être humain, il existe des programmes qui permettent de transformer des langages dits de haut niveau (type langage Python, C, C++) vers ces langages machines. Ce sont les compilateurs.

Compilation avec Keil Studio

L’IDE de Keil propose le C/C++ comme langage de haut niveau, pour coder les applications sur les cartes Nucleo. Ce compilateur en ligne est associé à une série de bibliothèques de fonctions permettant de gérer ou/et de communiquer avec des composants externes (écrans LCD, accéléromètres, modules BT…).

Une fois le code source écrit dans le fichier main.c, il est indispensable de compiler le code (pour le transformer dans un langage de bas niveau compréhensible par le microcontroleur) par l’intermédiaire de l’icône suivante sous Keil Studio (via MBED) :

Le compilateur compile alors l’ensemble des fichiers C présents dans le projet (incluant les bibliothèques utilisées par le projet). Cette étape peut prendre quelques secondes.

A la fin, si la compilation s’est bien déroulée, vous obtiendrez un message de ce type dans la fenêtre Output (dans la partie basse de l’interface) :

Un fichier de sortie portant l’extension .bin est alors téléchargé. Ce fichier binaire est celui qui pourra ensuite être exécuté par le microcontrôleur.

Si la compilation ne s’est pas terminée, vous obtiendrez un message d’erreur dans la même fenêtre Output. Vous aurez également les informations sur les erreurs qu’a rencontré le compilateur (erreurs de syntaxe dans le code, erreurs de bibliothèques…).

Téléversement

La dernière étape est de transférer le fichier binaire fourni par l’étape précédente sur le microcontroleur.

Dans le cas des cartes Nucléo, le programmateur, appelé ST-Link, est présent sur une partie de la carte. Il permet en plus à la carte Nucléo d’être reconnue comme une “simple” clef USB. Un simple câble USB suffit alors à faire le lien entre l’ordinateur qui a permis de compiler le programme et le microcontroleur présent sur la deuxième partie de la carte Nucléo.

Schéma de principe de la carte Nucléo

Le téléversement se fait alors par simple copier-coller vers la “fausse” clef USB. Les cartes Nucléo sont souvent reconnues par les systèmes d’exploitation par leur nom : NODE xxxx.

Premier programme

Blinky LED : Le “Hello World” de l’embarqué

Le programme auquel nous allons nous intéresser ici est le template nommé : “MBED OS 6 / mbed-os-example-blinky-baremetal” (programme d’exemple qui fait clignoter la LED présente sur la carte Nucléo – dans Keil Studio / File / New / MBED Project… ). Ce programme est l’équivalent du “Hello World !”.

L’utilisation d’un programme d’exemple permet d’avoir une structure de base du programme. Celui-ci ressemble à cela :

/* 
 *   Programme de test
 *      Auteur : J. VILLEMEJANE / Dec 2021 / IOGS
 *      From : MBED Example / Blinky LED
 */
 
/* Déclaration des ressources externes */
#include "mbed.h"
 
/* Déclaration des variables globales */
 
/* Déclaration des entrées/sorties */
DigitalOut  myled(LED1);
 
/* Fonction principale */
int main(){
    /* Zone d'initialisation */
 
    /* Boucle infinie */
    while(1){
        myled = 1;   // LED is ON
        wait_us(200000);   // 200 ms
        myled = 0;   // LED is OFF
        wait_us(1000000);   // 1 s
    }
}

Tutoriel lié

MInE Prototyper Prototyper avec Nucleo et MBED

Nucleo – Tester ma première application