Vous êtes sur la page 1sur 21

II2 – Informatique embarquée

Guide de démarrage - STM32CubeIDE


Carte extension 746NG ENS
Anthony Juton, Pascal Varoqui – février 2023

L’objectif de ce guide est de faciliter les premiers pas dans la programmation des cartes
STM32F746NG de travaux pratiques de l’ENS avec CubeIDE et d’en découvrir quelques
fonctionnalités (CubeMX et débogage notamment).
Deux versions de la cartes sont utilisées pour les TPs et projets d’informatique
embarquée :
• La version 1 dispose d’une connexion DB9 pour le bus CAN et d’une connexion
pour une extension LIN. Elle est adaptée aux TPs de réseaux embarqués pour
l’automobile.

Figure 1: Extension ENS 746NG version 1


• La version 2 dispose de 2 entrées et 1 sortie analogiques sur BNC et de plus
d’entrées sorties TOR. Elle est adaptée aux TPs de traitement numérique du signal
ou d’asservissement numérique.

Figure 2: Extension ENS 746NG version 2

Guide de démarrage - Cube IDE Carte extension 746NG ENS 1/21


II2 – Informatique embarquée

Le schéma des cartes d’extension est donné en annexe ou en pièce jointe. Le schéma de
la carte de développement STM32F746NG DISCOVERY est disponible sur le site ST.com.

1. Installation de STM32CubeIDE

STM32CubeIDE est l’environnement de configuration et de développement basé sur


Eclipse, GCC et GDB du fabricant de semi-conducteurs franco-italien ST microelectronics.
Il est gratuit et disponible pour Linux, Windows et MAC OS.
Les instructions et fichiers d’installation sont disponibles sur le site de ST :
https://www.st.com/en/development-tools/stm32cubeide.html. Le guide d’installation
comporte des instructions détaillées, notamment pour MAC OS. Attention à ne pas mettre
de caractères accentués dans les chemin du dossier de travail (workspace).
Ce guide s’appuie sur la version 1.11.2.
Le driver SEGGER ,’est pas utilisé ici, pas besoin de l’installer si la question est posée.
Les informations complètes sur l’utilisation de CubeIDE et des vidéos de présentation
sont données dans le Information Center disponible depuis le menu Help de
STM32CubeIDE.
Pour une simple mise à jour, il faut lancer STM32CubeIDE en administrateur (ou en root)
puis cliquer sur Help > Check for updates.

2. Configuration d’un projet STM32CubeIDE

STM32CubeIDE comprend STM32CubeMX. Cet outil permet, à partir d’une interface


graphique, de générer le code de configuration des périphériques du microcontrôleur et
d’estimer la consommation. Il permet également d’inclure au projet des éléments
logiciels : bibliothèques USB, pile TPC/IP, bibliothèques graphiques et système
d’exploitation temps réel FreeRTOS.
Le site ST.com fournit un User Manual complet de STM32CubeMX.

Figure 3: Architecture logicielle du projet

Guide de démarrage - Cube IDE Carte extension 746NG ENS 2/21


II2 – Informatique embarquée

Les bibliothèques LL (Low Layer API), spécifiques aux périphériques de ce


microcontrôleur, sont des bibliothèques très proches du matériel, comme celles utilisées
au premier semestre de M1. Elles sont moins portables, d’une cible microcontrôleur à une
autre, que les bibliothèques HAL (Hardware Abstraction Layer), mais plus
performantes.
Ce guide n’utilise que les bibliothèques HAL pour accéder aux périphériques.
Un projet projetdemo2023, avec la configuration des entrées/sorties et les bibliothèques
associées à la carte de développement (écran tactile en particulier), est fourni sur les
machines de TP et sur ecampus. Il est conseillé de repartir de ce projet, la création d’un
projet complet n’étant pas au programme de ce module.

2.1. Présentation de CubeMX


Une fois le projet demo ouvert, double-cliquer sur le fichier ioc pour ouvrir l’assistant de
configuration.
L’onglet Pinout & Configuration permet de configurer chaque broche et chaque
périphérique de manière graphique.

Figure 4: Configuration des entrées/sorties TOR (GPIO) via CubeMX

Parcourir rapidement les différents périphériques et les configurations possibles.

L’onglet Clock Configuration permet de configurer les horloges des différents


périphériques. Même si on choisit de garder les configurations par défaut, cet onglet est
utile pour connaître la fréquence de tel ou tel périphérique.

Guide de démarrage - Cube IDE Carte extension 746NG ENS 3/21


II2 – Informatique embarquée

Figure 5: Configuration des horloges des différents périphériques via CubeMX


L’onglet Project Manager permet notamment de configurer la génération de code et les
bibliothèques appelées (HAL ou LL). L’onglet Tool permet notamment d’estimer la
consommation du microcontrôleur.

2.2. Configuration des périphériques de l’extension v2


Les périphériques sont normalement configurés correctement sous CubeMX pour un
usage avec la carte extension.

Figure 6: Périphériques de la carte Discovery et de l'extension v2


La figure ci-dessus présente les périphériques disponibles sur la carte d’extension et sur
la carte discovery DISCO_STM32F746NG.
La correspondance avec les broches et les configurations est donnée par le tableau
suivant :

Guide de démarrage - Cube IDE Carte extension 746NG ENS 4/21


II2 – Informatique embarquée

Tableau 1: Tableau de correspondance périphériques, broches et leur configuration

Broche Configuration
Entrées analogiques
Prise BNC X1 ou joystick Gauche/Droite PF10 ADC3 Canal 8
Prise BNC X2 ou joystick Haut/Bas PA0 ADC1 Canal 0
Potentiomètre POTG ou connecteur CAPTG PF9 ADC3 Canal 7
Potentiomètre POTD ou connecteur CAPTD PF8 ADC3 Canal 6

Sortie analogique
Prise BNC X3 et ampli audio + HP PA4 DAC canal 1

Entrées/sorties Tout ou Rien


Bouton 1 PA8 GPIO_Input
Bouton 2 PA15 GPIO_Input

Connecteur HE10 2X5 – pour


commande 2 moteurs
LED1 / PWM4 PB4 TIM3_CH1
LED2 / DIR2 PH6 GPIO_Output
LED3 / DIR1 PI3 GPIO_Output
LED4 /PWM1 PI2 TIM8_CH4
+ les entrées analogiques PA0 et PF10

connecteur HE10 2x8


LED11 PH9 GPIO_Output
LED12 PH11 GPIO_Output
LED13 PH14 GPIO_Output
LED14 PE5 GPIO_Output
LED15 PE6 GPIO_Output
LED16 PD3 GPIO_Output
LED17 PH12 GPIO_Output
LED18 PH10 GPIO_Output
+ PA6, PA4 (sortie analogique), PG9, PH13 disponibles

Connecteur i2c et Accéléromètre


SCL PB8 I2C1 SCL
SDA PB9 I2C1 SDA

Connecteur UART
TX PF7 UART7 TX
RX PF6 UART7 RX

Connecteur SPI
SCK PI1 SPI2 SCK
MISO PB14 SPI2 MISO
MOSI PB15 SPI2 MOSI
NSS PI0 SPI2 NSS

Module Bluetooth
RX_Bluetooth PC6 UART6 TX
TX_Bluetooth PC7 UART6 RX

Périphériques de la carte DISCO746NG


Afficheur LCD Ecran tactile sur I2C3 Port Ethernet Ports USB Cartes SD Entrées
et sorties audio via I2S 2 microphones via I2S

Guide de démarrage - Cube IDE Carte extension 746NG ENS 5/21


II2 – Informatique embarquée

Pour simplifier le code généré, USB et Ethernet, dans Computing CRC (calcul de code de
vérification pour l’Ethernet notamment) et le Middleware FATFS (gestion des systèmes de
fichier des cartes SD), ainsi que FreeRTOS ont été désactivés.

2.3. Génération du code


Cliquer sur Project > Generate Code pour lancer la génération automatique du code.

Le projet, avec un nombre de fichiers certain, est alors disponible.


Dans le fichier principal main.c, on trouve :

Figure 7: Inclusion des fichiers header des configurations de chacun des périphériques

Dans la fonction main.c apparaissent les appels de fonctions d’initialisation :

Figure 8: Appel des fonctions d'initialisation des périphériques

Guide de démarrage - Cube IDE Carte extension 746NG ENS 6/21


II2 – Informatique embarquée

Dossier pour déposer les en-têtes


des bibliothèques utilisateur

Configuration FreeRTOS

Définition des noms


d’entrées/sorties

Dossier pour déposer les sources


des bibliothèques utilisateur

Programme
utilisateur, à modifier

Bibliothèque du coeur ARM


Cortex M7 (CMSIS : Cortex
Microcontroller Software Interface
Standard)

Bibliothèques HAL (Hardware


Abstraction Layer) des
périphériques, par ST

Fichiers sources de FreeRTOS

Fichier de configuration CubeMX

Dessin 1: Arborescence des fichiers du projet généré par CubeMX

Noter qu’il est possible de faire des modifications dans CubeMx en cours de
développement, à condition de respecter la structure du code générée, c’est-à-dire en
n’écrivant du code qu’entre des balises USER :

Guide de démarrage - Cube IDE Carte extension 746NG ENS 7/21


II2 – Informatique embarquée

Figure 9: Définition des variables locales entre les balises USER


CODE BEGIN 1 et USER CODE END 1
ATTENTION : les modifications de configuration dans CubeMX modifient le code
de l’utilisateur. Il faut donc bien écrire entre les balises USER_Code et faire des
sauvegardes régulières.
Compiler (Project > Build Project) et lancer le débogage : (Run>Debug).

2.4. Mise à jour du firmware STLink


Lors de la 1ère utilisation de la carte avec une nouvelle version de STM32CubeiDE, il est
demandé de faire la mise à jour du logiciel embarqué (firmware) sur le microcontrôleur
STLink faisant l’interface entre le PC et le microcontrôleur STM32F746.

Figure 10: Fenêtre de mise à jour du firmware STLink


Si la demande de mise à jour apparaît, accepter, cliquer sur Open in update mode puis
Upgrade. Recommencer alors la procédure de lancement en mode Debug.

3. Présentation du programme de démo

3.1. Leds et boutons


Dans le fichier main.h, il est possible de retrouver les noms donnés aux entrées et sorties
associées aux boutons et leds de l’extension.

Figure 11: extrait de main.h

Guide de démarrage - Cube IDE Carte extension 746NG ENS 8/21


II2 – Informatique embarquée

Voici une description du fichier main créé par CubeMx :

Espace dédier à l’en-tête du fichier main

Inclusion des bibliothèques utilisateurs

Espace pour les définitions des types


de variables utilisateurs

Espace pour les définitions de


MACRO de l’utilisateur

Définition par CubeMX d’une


structure accrochée à chaque
périphérique

Déclaration de la tâche par défaut


de FreeRTOS

Espace pour les définitions des


variables globales de l’utilisateur

Déclarations des fonctions


d’initialisation

Espace pour les déclarations des


fonctions de l’utilisateur

Début du main

Initialisation avec des espaces pour


les initialisations utilisateur
Espace pour insérer du code
utilisateur, avant lancement de l’OS
ou de la boucle infinie.

Initialisation de l’afficheur LCD

Initialisation de la dalle tactile


(TS pour touchscreen)

Figure 12: programme de démo commenté

Guide de démarrage - Cube IDE Carte extension 746NG ENS 9/21


Configuration FreeRTOS, pas
concernée par ce cours
II2 – Informatique embarquée
Démarrage de l’OS bloqué

Boucle infinie, pas atteinte si l’OS est lancé.

Ecriture sur une sortie.

Lecture d’une entrée.

Lecture d’une entrée


analogique.

Ecriture d’une texte


sur l’afficheur.

Récupération des coordonnées


d’une touche sur l’écran tactile

Fin de la boucle infinie

Figure 13: Programme de démo commenté, suite

Les fonctions d’utilisation des entrées/sorties Tout Ou Rien sont définies dans le fichier
stm32f7xx_hal_gpio.c.
Exemple :
HAL_GPIO_WritePin(LED_2_GPIO_Port, LED_2_Pin, HAL_GPIO_ReadPin(BP_1_GPIO_Port, BP_1_Pin));
Pour accéder au fonctions associées à un périphérique, le plus simple est de demander
par un clic droit sur la définition d’une des fonctions utilisées dans l’initialisation du main.
La description détaillée des fonctions HAL sont dans le fichier
stm32f7_description_library_HAL_et_LL.pdf déposé sur ecampus.

3.2. Utilisation de l’afficheur lcd


ST propose 2 ensembles de fonctions complexes pour l’édition d’interfaces graphique :
STemWin et TouchGFX qui demande un temps plus long pour leur mise en œuvre. Ces
deux ensembles sont disponibles dans le package STM32CubeF7 (dossier Middleware)

ST propose également dans le Board Support Package (BSP), une bibliothèque plus
simple utilisant le périphérique ltdc du microcontrôleur et la SDRAM. Pour ne pas
encombrer le projet, on se imite aux fichiers du BSP nécessaires au LCD. La bibliothèque
lcd est incluse dans le programme de démo. Elle utilise 5 fichiers copiés dans les dossier
src (pour les .c) et inc (pour les .h) dans :
• stm32746g_discovery.h

Guide de démarrage - Cube IDE Carte extension 746NG ENS 10/21


II2 – Informatique embarquée

• stm32746g_discovery_lcd.c
• stm32746g_discovery_lcd.h
• stm32746g_discovery_sdram.c
• stm32746g_discovery_sdram.h
Est également ajouté le fichier de description de l’écran externe :
• rk043fn48h.h
Enfin, les fonctions LCD font appel à un ensemble simplifié de police de caractères
disponibles dans le dossier Fonts du projet.

On donne les quelques lignes à utiliser pour l’initialisation de l’écran :


//Initialisation de l'afficheur LCD
BSP_LCD_Init();
BSP_LCD_LayerDefaultInit(0, LCD_FB_START_ADDRESS);
BSP_LCD_LayerDefaultInit(1, LCD_FB_START_ADDRESS+ BSP_LCD_GetXSize()*BSP_LCD_GetYSize()*4));
BSP_LCD_DisplayOn();
BSP_LCD_SelectLayer(1);
BSP_LCD_Clear(LCD_COLOR_LIGHTGREEN);
BSP_LCD_SetFont(&Font12);
BSP_LCD_SetTextColor(LCD_COLOR_BLUE);
BSP_LCD_SetBackColor(LCD_COLOR_LIGHTGREEN);

3.3. Utilisation des entrées analogiques


La conversion se fait, de la manière la plus simple (et peu efficace) en utilisant les
fonctions suivante :
• Pour configurer le canal à convertir :
sConfig.Channel = ADC_CHANNEL_7;
HAL_ADC_ConfigChannel(&hadc3, &sConfig);
• Pour démarrer une conversion : HAL_ADC_Start(&hadc3);
• Pour vérifier que la conversion est finie :
if(HAL_ADC_PollForConversion(&hadc3, 100)==HAL_OK)
• Pour récupérer dans ‘a’ la valeur acquise par le convertisseur :
a = HAL_ADC_GetValue(&hadc3);

On remarque l’utilisation de l’adresse &hadc3. Chaque périphérique est associé en effet à


une structure nommée handler, qui permet de s’adresser à lui : hadc3 pour le
convertisseur ADC 3.

3.4. Utilisation du débogueur


Le débogueur est classique pour Eclipse avec la surveillance des variables (onglet
Variables), des registres (onglet Registers) et des périphériques (SFR). Il possède 2
fonctionnalités supplémentaires utiles :
La supervision de variables locales en fonctionnement (en live) :

Guide de démarrage - Cube IDE Carte extension 746NG ENS 11/21


II2 – Informatique embarquée

Figure 14: Supervision d'une variable locale en fonctionnement

Mieux encore, sur les microcontrôleurs ARM autres que M0, il est possible de surveiller
plusieurs variables, à un débit bien supérieur, avec le mode Serial Wire Viewer,
configurable depuis le menu Run > Debug Cnfiguration.

Figure 15: Configuration du mode Serial Wire Viewer

Les différentes fenêtres de visualisation des variables sont accessibles par le menu
Window > Show View > SWV
En mode Halt, l’outil de réglage permet de choisir les variables supervisées.

Figure 16: Bouton de réglage de SWV

Guide de démarrage - Cube IDE Carte extension 746NG ENS 12/21


II2 – Informatique embarquée

On choisit ici uniquement la supervision d’une variable globale (à mettre en global si ce


n’est le cas) : joystick_v

Figure 17: Fenêtre de choix des variables et fonctionnalités à superviser par SWV

Les différents outils SWV permettent alors d’obtenir les valeurs ou le tracé de variables :

Figure 18: Tracé de l'évolution d'une variable globale avec SWV


Plus de détails sont fournis dans le guide STM32CubeIDE User Guide disponible depuis le
menu Help > Information Center de STM32CubeIDE.

A noter, le fonctionnement du mode pas à pas sur les Cortex M7 est délicat. Il est souvent
plus simple de fonctionner uniquement avec des points d’arrêt.

Guide de démarrage - Cube IDE Carte extension 746NG ENS 13/21


II2 – Informatique embarquée

4. Ouverture d’un exemple

ST fournit une documentation des bibliothèques HAL (déposée sur ecampus sous le
nom stm32f7_description_library_HAL_et_LL.pdf), et beaucoup d’exemples
d’accompagnement et bibliothèques complémentaires, disponibles dans un package
STM32Cube_FW_F7_V1.17.0 déposé automatiquement dans le dossier
STM32Cube/Repository du dossier User.

Figure 19: Extrait du document ST présentant le package STM32Cube_FW_F7

Le document permettant de trouver plus facilement les ressources intéressantes dans le


package est déposé sur ecampus sous le nom stm32cube-mcu-package-examples-for-
stm32f7.pdf.

Pour ouvrir un exemple, créer un nouveau projet :


File>New>STM32 Project.
Choisir dans l’onglet Example Selector, la série de MCU STM32F7 et l’exemple qui semble
intéressant.

5. Travail à faire

Améliorer le programme de démonstration pour montrer une maîtrise des entrées/sorties


TOR, de l’écran tactile, des entrées analogiques et y ajouter une communication série et
l’affichage de l’heure.

5.1. Utilisation de la liaison série en transmission


Vérifier dans CubeMX, ou dans la fonction correspondante du main, la configuration de la
liaison série UART1. Désactiver la fonction Overrun

Guide de démarrage - Cube IDE Carte extension 746NG ENS 14/21


II2 – Informatique embarquée

Figure 20: Paramètres liaison série


Les drivers HAL ne proposent que des fonctions de base bloquantes. Les fonctions
avancées seront vues plus tard.
1. Utiliser la fonction UART_Transmit pour envoyer la valeur du potentiomètre sur
l’écran du PC.
2. Utiliser la fonction HAL_UART_Receive pour recevoir ce qui est envoyé par le PC et
l’afficher sur l’écran. Attention, elle ne reçoit que pendant le temps du timeout.

5.2. Utilisation de l’horloge temps réel


Le microcontrôleur dispose d’un périphérique RTC (Real Time Clock), horloge temps réel
équipée d’un quartz à 32 kHz qui compte le temps indépendamment du microcontrôleur.
1. Afficher l’heure au format hh:mn:sec:centièmes sur l’écran grâce à la fonction
htc_get_time. Attention, comme indiqué dans le descriptif de la fonction, il faut
lancer aussi htc_get_date(..) pour que htc_get_time fonctionne.
2. Allumer la led 1 juste avant le sprintf et l’éteindre-la juste après.
Allumer la led 2 juste avant l’affichage et l’éteindre juste après.
• Combien de temps nécessite l’exécution de sprintf ?
• Combien de temps nécessite l’affichage d’une ligne de texte ?

Guide de démarrage - Cube IDE Carte extension 746NG ENS 15/21


II2 – Informatique embarquée

6. Documents utiles

Sur ecampus se trouve une sélection de documents utiles pour la programmation des
microcontrôleurs STM32F746 :
• Le manuel de la carte de développement : Disco_F746_User_manual.pdf
• Le schéma de l’extension : schema_extension_746NG_v2.pdf
• La datasheet du microcontrôleur : stm32f746ng_datasheet.pdf
• La description des bibliothèques HAL : stm32f7_description_library_HAL_et_LL.pdf
• La description du contenu du package STM32F7 (contenu des exemples,
bibliothèques...) : stm32cube-mcu-package-examples-for-stm32f7.pdf

Annexe : Schéma de la carte d’extension version 1

Guide de démarrage - Cube IDE Carte extension 746NG ENS 16/21


II2 – Informatique embarquée

Annexe : Schéma de la carte d’extension version 2

Guide de démarrage - Cube IDE Carte extension 746NG ENS 17/21


II2 – Informatique embarquée

Guide de démarrage - Cube IDE Carte extension 746NG ENS 18/21


II2 – Informatique embarquée

Annexe Configuration des périphériques de l’extension


v1

Connecteur pour extension


série UART (Bluetooth ou LIN)
PF_7 : serial7_Tx
PF_6 : serial7_Rx
Carte de développement STM32F746G-DISCO

Potentiomètre relié Leds reliées aux broches Connecteur Connecteur bus CAN,
à la broche PA_0 PI_1, PB_14, PB_15 pour relié aux broches :
télémètre IR PB_8 (CAN_Rx)
Potentiomètre relié Boutons reliés aux broches
PG_6, PB_4, PG_7 relié à la PB_9 (CAN_Tx)
à la broche PF_10
broche PF_9 Au choix avec I2C
Connecteur pour servo- Connecteur pour carte
moteur numérique AX12 Connecteur I2C moteur :
PC_6 (serial6_Tx) SCL sur PB_8 2 pwm PA_8, PA_15
PC_7 (serial6_Rx) SDA sur PB_9 2 sorties TOR PI_2, PI_3
choix avec CAN

Figure 21: Association des broches et périphériques aux connecteurs de l'extension


Comme indiqué sur le schéma donné en annexe, les connecteurs de l’extension sont
associés à différentes broches du microcontrôleur.
STM32CubeMX permet de graphiquement configurer ces broches pour un usage
conforme à leur association sur la carte d’extension. Pour cela, on utilise la barre de
recherche de broche en bas à droite ou la liste des périphériques situées sur la gauche.

Guide de démarrage - Cube IDE Carte extension 746NG ENS 19/21


II2 – Informatique embarquée

Menus de sélection des périphériques


Et middlewares

Broches du microcontrôleur
Gris : libre
Vert : utilisé par un périphérique
Jaune : utilisé par le système (reset, BOR...)
Jaune clair : alimentations

Barre de recherche de broche

Figure 22: Présentation de la vue CubeMX de STM32CubeIDE


• Vérifier que PA0, PF10 et PF9 sont configurés comme des entrées analogiques.
Noter que PA0 est associée à ADC3_IN0 et PF10 à ADC3_IN8. Un click droit permet
d’affecter un Label à la broche, POTG pour PA0 et POTD pour PF10 par exemple.
• PI1 est par défaut utilisé par le périphérique SPI2. Dans le menu des
périphériques, catégorie Connectivity, désactiver SPI2 puis associer la broche PI1,
PB14 et PB15 à des sorties GPIO_Output. Leur attribuer un user_label LED_1,
LED_2, LED_3.
• Associer PG6, PB4, PG7 à des entrées GPIO_Input. Leur attribuer un user_label
BP_1, BP_2, BP_3.
• Pour simplifier le code généré, désactiver dans connectivity USB et Ethernet, dans
Computing CRC (calcul de code de vérification pour l’Ethernet notamment) et dans
Middleware FATFS (gestion des systèmes de fichier des cartes SD).

Guide de démarrage - Cube IDE Carte extension 746NG ENS 20/21


II2 – Informatique embarquée

7. Evaluation

Validation du TP STM32
Pour valider votre TP STM32, il faut faire une application originale (c'est-à-dire différente
de celle de démo et de celle de vos camarades) utilisant au moins :
Une entrée TOR
Une sortie TOR
Une entrée analogique
L'affichage sur l'écran avec de jolies couleurs
L’utilisation d’un fichier image (voir document II2_FreeRTOS_Affichage_de_bmp sur
ecampus)
La dalle tactile
La liaison série avec le PC ou avec un autre micro
L'affichage de l'heure RTC
L’application sera présentée en fin de TP.

Guide de démarrage - Cube IDE Carte extension 746NG ENS 21/21

Vous aimerez peut-être aussi