Vous êtes sur la page 1sur 16

ministère de l'enseignement supérieur

et de la recherche scientifique
École centrale polytechnique privée

Travaux Pratiques Programmation


STM32F4

Enseignant : Noureddine ALOUI, aloui.noureddine@gmail.com

Contenu :
TP1 : Prise en main du logiciel Keil µVision .......................................................................................... 2
TP2 : Manipulation des ports d’entrée-sortie (GPIO) de la carte STM32F429-DISCOVERY .............. 4
TP3 : Configuration et manipulation de l’afficheur LCD via le bus SPI ................................................ 7
TP4 : Conception et ajout d’une interface graphique sur l’afficheur LCD ........................................... 10
TP5 : Configuration et manipulation de l’écran tactile via le bus I2C .................................................. 12
TP6 : Lecture des données à partir de périphérique de stockage USB .................................................. 13

Année universitaire : 2020-2021


ministère de l'enseignement supérieur
et de la recherche scientifique
École centrale polytechnique privée

TP1: Prise en main du logiciel Keil µVision

I. Objectifs:
- Maîtriser l’environnement de développement Keil µVision v5.
- Savoir développer, compiler, déboguer et charger un programme développé sous Keil
µVision.

II. Présentation de l'interface de Keil µvision


Le logiciel Keil µVision est un environnement de développement intégré (IDE) pour une
large gamme de processeurs comme la famille ARM Cortex-M. Il permet d’éditer, de
compiler et de déboguer les applications intégrées sur les cartes à puce et les
microcontrôleurs. De plus il offre:
• des fenêtres de visualisation qui donnent des informations sur les périphériques pouvant
être directement modifiées dans ces fenêtres.
• un espace de travail multi-projet qui permet de travailler sur plusieurs projets
simultanément, comme des programmes d’initialisation et d’application.
• la prise en charge de nombreuses interfaces d’adaptation pour débogage, dont ADI
miDAS Link, Atmel SAM-ICE, Infineon DAS et ST-Link

2
ministère de l'enseignement supérieur
et de la recherche scientifique
École centrale polytechnique privée

III. Création d'un nouveau projet sous Keil µVision


1. Lancer Keil µVision 5
2. Dans le menu principal sélectionner Project →New μVision Project
3. Nommer votre projet TP0_Keil_STM32F4 et
cliquer sur enregistrer.
4. Dans la fenêtre Select Device for Target
sélectionner STM32F429ZITx et cliquer sur OK.
5. Dans la fenêtre Manage Run-Time
Environment sélectionner:
- CMSIS → Core,
- Device → Startup,
- Device → STM32Cube Framework (API) →
Classic.
6. Ajouter le ficher main.c sous le composant Device : 'main' module for STM32Cube.
7. Configurer la fréquence d’horloge comme suit:
- sélectionner Options for Target…
- fixer la fréquence à 8 MHz : Target → Xtal (MHz) (l’oscillateur externe de la
carte développement à une fréquence de 8 MHz).
- dans l’onglet C/C++ au niveau de la zone Define taper HSE_VALUE=8000000
(HSE_VALUE représente la fréquence de l’oscillateur, Cela va régler la fréquence
de CPU à 168 MHz dans le fichier system_stmf4xx.c).
8. Configurer l'adaptateur de débogage :
- lancer Options for Target… ,
- onglet Debug, dans la zone Use sélectionner ST-Link Debugger.
- cliquer sur le bouton Settings → Trace, taper 168 MHz dans la zone Core Clock
et sélectionner Trace Enable.
- dans l’onglet Flash Download confirmer l'algorithme de programmation Flash
STM32F4xx 2 MB et cocher Reset and Run.
9. Enregistrer le projet : File → Save All
10. Compiler le projet : Project → Rebuild all target files
11. Passer en mode débogage: cliquer sur Start/Stop Debug Session
12. Cliquer sur le bouton RUN pour lancer l’exécution du code
13. Insérer une variable globale dans Watch window: dans l’onglet Project :
- cliquer sur Device et ouvrir le fichier system_stm32f4xx.c
- localiser la variable SystemCoreClock, clic droit et selectionner Add
SystemCoreClock to…→ Watch 1
- dans l’onglet Watch 1, bouton droit sur SystemCoreClock et désélectionner
Hexadecimal Display (la fréquence correcte 168 MHz sera affichée).
14. Quitter le mode de débogage en cliquant sur .

3
ministère de l'enseignement supérieur
et de la recherche scientifique
École centrale polytechnique privée

TP2 : Manipulation des ports d’entrée-sortie (GPIO) de la


carte STM32F429-DISCOVERY

1. Objectifs :
Savoir utiliser la librairie CMSIS (Cortex Microcontroller Software Interface Standard pour
manipuler les ports d’entrée-sortie GPIO (General Purpose Input Output) de la carte
STM32F429-DISCOVERY.

2. Présentation du noyau Temps-réel CMSIS/ RTX de Keil


Le Noyau temps-réel CMSIS/ RTX de Keil est un système d’exploitation (OS) déterministe
sans redevance. Il est conçu pour les architectures ARM et Cortex-M, permet de créer des
programmes qui effectuent simultanément de plusieurs fonctions et aide à créer des
applications bien structurées. RTX fait partie intégrante de la solution de développement
logiciel MDK-ARM pour les microcontrôleurs basés ARM.
Caractéristiques:
- Système d'exploitation déterministe livré avec le code source.
- Conçu spécialement pour les CPU ARM et Cortex-M (il existe aussi des versions pour
C166 et 8051)
- Ordonnancement flexible : Flexible Scheduling: round-robin, pre-emptif, et collaboratif.
- Haute vitesse en temps-réel avec faible temps de latence des interruptions.
- Faible empreinte mémoire pour systèmes à ressources limitées.
- Nombre de tâches illimité avec pour chacune jusqu' à 255 niveaux de priorités.
- Nombre illimité de boites à lettres, semaphores, mutex et timers
- Support pour multithreading et fonctionnement thread-safe
- Débogage avec connaissance noyau dans MDK-ARM
- Configuration interactive en utilisant le Configuration Wizard de µVision
Le noyau RTX de Keil fait partie de tous les package MDK. (Livré en code source).
Les stacks TCP/IP, File Systems, USB, CAN font parties du package MDK-ARM
Professional.

4
ministère de l'enseignement supérieur
et de la recherche scientifique
École centrale polytechnique privée

3. Ajout et configuration de CMSIS-RTOS RTX pour clignoter des LED’s


3.1. Clignotement des LED en utilisant le fichier source Timer.c :
a. Créer un nouveau projet TP2 (voir TP1).
b. Ouvrir la fenêtre Manage Run-Time Environment .
- CMSIS → RTOS (API) et sélectionner Keil RTX
- Board Support → LED (API) et sélectionner LED
c. Dans la fenêtre Project ouvrir le fichier RTX_Conf_CM.c et sélectionner l’option
Configuration Wizard : RTX Kernel Timer Tick Configuration → RTOS Kernel
Timer input clock frequency [Hz] et fixer la fréquence à 168MHz.
d. Ajouter et initialiser le fichier source Timer.c au projet:
CMSIS→ "CMSIS-RTOS Timer"
e. Dans le fichier main.c ajouter :
#include "Board_LED.h"
extern void Init_Timers(void) ;
Init_Timers() ;
LED_Initialize();
f. Dans le fichier Timer.c ajouter :
#include "Board_LED.h"
static int timer_cnt = 0;
Au niveau de la fonction Timer2_Callback :
timer_cnt++;
if (timer_cnt & 1)
LED_On (0);
else
LED_Off(0);
g. Sélectionner File/Save All ou .
h. Compiler le projet
i. Charger le programme dans la carte STM32F429 .

3.2. Clignotement des LED en utilisant la bibliothèque HAL (Hardware Abstraction


Layer)
a. Dans la fenêtre Project supprimer le fichier Timer.c.
b. Au niveau du fichier main.c supprimer les lignes suivantes :
#include "Board_LED.h"
extern void Init_Timers(void) ;
Init_Timers() ;
LED_Initialize();
c. Modifier le fichier main.c pour allumer les deux LEDs de test liées aux pins PG13 et
PG14 en utilisant la fonction suivante :
void HAL_GPIO_WritePin (GPIO_TypeDef * GPIOx, uint16_t
GPIO_Pin, GPIO_PinState PinState) (voir annexe)
d. Utiliser la fonction HAL_Delay(uint32_t millise) pour commander la fréquence
de clignotement des LED’s.

5
ministère de l'enseignement supérieur
et de la recherche scientifique
École centrale polytechnique privée

e. En utilisant la fonction suivante :


GPIO_PinState HAL_GPIO_ReadPin (GPIO_TypeDef * GPIOx, uint16_t
GPIO_Pin)
Ecrire un programme qui permet de commander le clignotement d’une LED à l’aide
d’un bouton poussoir (voir annexe).
f. Modifier le programme pour générer une tension de 5V ou 0V sur une broche de
choix.
Attention: ne pas reprogrammer les pins qui servent au debugging, sinon vous ne
pourrez plus parler à votre carte de développement :
SWDIO → pin PA13
SWCLK → pin PA14
SWO → pin PB3
RESET → pin NRST

Annexe:
HAL_GPIO_WritePin(GPIO_TypeDef * GPIOx, uint16_t GPIO_PIN,
GPIO_PinState PinState)
Function description: Sets or clears the selected data port bit.
Parameters:
 GPIOx: where x can be (A..K) to select the GPIO peripheral for STM32F429X.
 GPIO_Pin: specifies the port bit to be written. This parameter can be one of
GPIO_PIN_x where x can be (0..15).
 PinState: specifies the value to be written to the selected bit.
This parameter can be one of the GPIO_PinState enum values:
- GPIO_PIN_RESET: to clear the port pin
- GPIO_PIN_SET: to set the port pin
Return values: None

GPIO_PinState HAL_GPIO_ReadPin (GPIO_TypeDef * GPIOx,uint16_t


GPIO_Pin)
Function description: Reads the specified input port pin.
Parameters :
 GPIOx: where x can be (A..K) to select the GPIO peripheral for STM32F429X
device.
 GPIO_Pin: specifies the port bit to read. This parameter can be GPIO_PIN_x
where x can be (0..15).
Return values : The: input port pin value.

CMSIS: Cortex Microcontroller Software Interface Standard.


RTOS: Real-Time Operating System.

6
ministère de l'enseignement supérieur
et de la recherche scientifique
École centrale polytechnique privée

TP3 : Configuration et manipulation de l’afficheur LCD


via le bus SPI

I. Objectifs :
Savoir configurer le système d’exploitation temps réel (RTOS) RTX pour afficher des textes
sous l’afficheur LCD intégré dans la carte STM32F429.

II. Comprendre le matériel


Pour configurer l'interface graphique correctement, il est nécessaire de comprendre le schéma
de connexion de l’afficheur LCD avec le microcontrôleur STM32F429.

L’écran LCD est connecté au microcontrôleur STM32F429 via une interface RGB de haute
vitesse. Pour configurer l'affichage, on utilise le bus de données série SPI (Serial Peripheral
Interface) qui est connecté à l'interface SPI5 de l'appareil.

Interfaces: RGB (en rouge), SPI (en bleu) et I2C (en vert).

7
ministère de l'enseignement supérieur
et de la recherche scientifique
École centrale polytechnique privée

Figure 10. STM32F429 Discovery board

8
ministère de l'enseignement supérieur
et de la recherche scientifique
École centrale polytechnique privée

III. Configurations
1. Créer un nouveau projet TP3 (voir TP1).
2. Ouvrir la fenêtre Manage Run-Time Environment et sélectionner :
- Graphics → Core.
- Graphics Display → STM43F429I-Discovery.

L’afficheur LCD est connecté au microcontrôleur STM32F429 comme une SDRAM


(Synchronous Dynamic Random Access Memory) externe. Généralement cette SDRAM est
configurée à l’aide de fichier système CMSIS (system_stm32f4xx.c).
3. Sélectionner Options for Target… , onglet C/C++ et taper DATA_IN_ExtSDRAM
et STM32F429I_DISCOVERY.
4. Configuration de CMSIS-Driver SPI5:
dans la fenêtre Project choisir Device → RTE_Device.h → Configuration Wizard,
cocher SPI5, désactiver SPI_NSS pin et modifier :
- SPI5_MISO Pin : PF8
- SPI5_MOSI Pin : PF9
- SPI5_SCK Pin : PF7
5. Configuration de la mémoire graphique :
- dans la fenêtre Project ouvrir le fichier GUIConf.c situé sous Graphics
- définir le nombre d'octets pour l'interface graphique :
#define GUI_NUMBYTES 0x4000
6. Sélectionner File/Save All ou
7. Dans la fenêtre Project ajouter ″emWin GUI Thread for Single-Tasking Execution
Model″ sous le composant Graphics.
8. Modification de RTX pour une nouvelle tâche.
- ouvrir le fichier source RTX_Conf_CM.c.
- choisir Configuration Wizard et modifier:
o Number of threads with user-provided stack size: 2.
o Total stack size [bytes] for threads with user provided stack size: 4096

IV. Applications
1. Dans fichier source GUI_SingleThread.c utiliser la fonction prédéfinie void
GUI_DispString (const char * s)pour afficher le message "Hello World!"
sur l’écran de la carte (voir le guide des fonctions).
2. Modifier le programme pour afficher le texte " Chronomètre : " à la position : (50,
160) en utilisant la fonction void GUI_DispStringAt(const char * s, int
x, int y).
3. Ajouter un chronomètre à la suite du texte "Chronomètre : " en utilisant la fonction :
void GUI_DispDecAt(I32 v, I16P x, I16P y, U8 Len).
4. Proposer autres applications en se basant sur le guide des fonctions fourni.

9
ministère de l'enseignement supérieur
et de la recherche scientifique
École centrale polytechnique privée

TP4 : Conception et ajout d’une interface graphique sur


l’afficheur LCD

I. Objectifs :
Maîtriser l’outil GUIBuilder de la bibliothèque graphique emWin pour concevoir une
interface graphique dédiée à l’afficheur LCD intégré dans la carte STM32F429.

II. Présentation de l’outil GUIBuilder

L’outil GUIBuilder (Graphical User Interface Builder) de la bibliothèque graphique emWin


permet de créer des boîtes de dialogue graphique sans utiliser le langage de programmation C.
Les widgets (Window + Gadget) comme les checkboxes, les buttons… peuvent être créés,
déplacés, supprimés et redimensionnés. Les boîtes de dialogue sont enregistrées dans le projet
Keil μVision en tant que fichiers C. L'utilisateur peut ensuite modifier un code spécifique à
une application. L’outil GUIBuilder peut également modifier les widgets existants même
après l'ajout du code personnalisé aux fichiers C.

III. Configurations
1. Créer un nouveau projet TP4.
2. Configurer l’afficheur LCD.
3. Ouvrir la fenêtre Manage Run-Time Environment et cocher :
Board Support → emWin LCD (API) → emWin LCD.
Graphics → Tools →GUI Builder

4. Dans le menu principal de Keil μVision, ouvrir Tools → Customize Tools Menu.
5. Lancer GUIBuilder: Tools → GUIBuilder.
6. Cliquer sur l’icon Framewin et modifier les propriétés comme suit :
- Name : Fenetre
- xSize = 240
- ySize = 320
7. Ajouter des boutons à la fenêtre que vous avez créée.
8. Enregistrer le fichier sous le nom FenetreDLG.c : File → Save
9. Fermer la fenêtre GUIBuilder.
10. Ajouter le fichier de conception graphique FenetreDLG.c au projet:
- dans la fenêtre project: clic droit et Add Existing Files to Group 'Source Group 1'…
- ajouter le fichier FenetreDLG.c au projet
11. Au niveau du fichier FenetreDLG.c ajouter :
12. Ouvrir le fichier GUI_SingleThread.c et ajouter :
#include "dialog.h".

10
ministère de l'enseignement supérieur
et de la recherche scientifique
École centrale polytechnique privée

extern WM_HWIN CreateFenetre(void);


CreateFenetre();
13. Enregistrer, compiler et charger le programme dans la carte STM32F429-Discovery.

11
ministère de l'enseignement supérieur
et de la recherche scientifique
École centrale polytechnique privée

TP5 : Configuration et manipulation de l’écran tactile via


le bus I2C

I. Objectifs :
Savoir développer des applications qui utilisent l’écran tactile de la carte STM32F429-
DISCOVERY.

II. Configurations
Pour implémenter des applications sur l’écran tactile de la carte STM32F429-DISCOVERY,
il est nécessaire de configurer cet écran. Il est connecté au microcontrôleur STM32F429 via le
bus I2C (Inter-Integrated Circuit) à l'interface I2C3.

1. Créer un nouveau projet TP5.


2. Configurer l’afficheur LCD.
3. Ajouter une interface graphique en utilisant l’outil GUIBuilder avec un bouton et une
zone de texte.
4. Ouvrir la fenêtre Manage Run-Time Environment et sélectionner :
Graphics →Input Device→Touchscreen
5. Configurer le driver CMSIS-Driver pour l’interface I2C comme suit :
Dans la fenêtre Project ouvrir Device → RTE_Device.h → Configuration Wizard,
cocher I2C3 et modifier :
- I2C3_SCL Pin : PA8
- I2C3_SDA Pin : PC9
6. Ouvrir le fichier FenetreDLG.c et ajouter le code suivant:
hItem = WM_GetDialogItem(pMsg->hWin, ID_MULTIEDIT_0);
MULTIEDIT_SetText(hItem, “Le bouton x est touché”);
14. Au niveau du fichier GUI_SingleThread.c ajouter le code suivant :
GUI_TOUCH_Exec();
7. Enregistrer, compiler et charger le programme dans la carte STM32F429-Discovery.
8. Tester le programme sur l’écran tactile.

12
ministère de l'enseignement supérieur
et de la recherche scientifique
École centrale polytechnique privée

TP6 : Lecture des données à partir de périphérique de


stockage USB

I. Objectifs :

Savoir configurer et développer un code C sous Keil μVision pour accéder à un périphérique
de stockage USB connecté à la carte STM32F429-DISCOVERY.

II. Configurez le pilote CMSIS-Driver pour le composant USB

Pour configurer correctement le middleware de l'hôte USB (Universal Serial Bus), il est
nécessaire de comprendre le schéma de connexion du connecteur USB avec le
microcontrôleur STM32F429

La carte de développement STM32F429-DISCOVERY possède un connecteur USB qui


s'interface avec le périphérique USB OTG du STM32F429 via la puce PHY « Couche
physique » (GPIOB.14 et GPIOB.15). La broche l'alimentation VBUS (Bus Voltage) est
GPIOC.4 et la broche de détection de sur intensité est GPIOC.5.

13
ministère de l'enseignement supérieur
et de la recherche scientifique
École centrale polytechnique privée

III. Configurations
1. Créer un nouveau projet TP6.
2. Configurer l’afficheur LCD.
3. Ouvrir la fenêtre Manage Run-Time Environment et sélectionner :
- USB → CORE
- USB → host → 1
- USB → Host → MSC (Mass Storage Class)
- CMSIS Driver → USB Host (API) → High-speed
4. Connecter l’hôte USB (Host 0) et augmenter la taille de la pile : dans la fenêtre Project
ouvrir le fichier USBH_Config_0.c (Host) situé sous USB, Configuration Wizard et USB Host
0:
- Connect to hardware via Driver_USBH# → 1
- OS Ressources Settings → Core Thread Stack Size → 540
5. Configuration de CMSIS-Driver pour l’hôte USB : dans la fenêtre Project ouvrir le
fichier RTE_Device.h → Configuration Wizard et cocher USB OTG High-speed :
PHY (Physical Layer PHY)→ PHY Interface → On-chip full-speed PHY
-
Host [Driver_USBH1]→ VBUS Power On/Off Pin → Bit → 4
-
Overcurrent Detection Pin → Port → GPIOC
-
Overcurrent Detection Pin → Bit → 5
-
6. Ouvrier le fichier RTX_Conf_CM.c situé sous CMSIS, choisir l’option Configuration
Wizard → Thread Configuration et modifier :
- Default Thread stack size [bytes] → 1000.
- Number of threads with user-provided stack size → 1.
- Total stack size [bytes] for threads with user-provided stack size → 1000
7. Ouvrier le fichier FS_Config.c situé sous File System et choisir l’option Configuration
Wizard: Initial Current Drive→U0.
8. Ajouter le fichier Thread.c : CMSIS→CMSIS-RTOS Thread
9. Ajouter les fichiers USBH_MSC.c et USBH_MSC.h : USB→USB Host Mass Storage
Access
10. Modifier le fichier Thread.c comme suit :
#include "USBH_MSC.h"
char fbuf[200] = { 0 };

void Thread (void const *argument) {


static unsigned int result;
static FILE *f;
USBH_Initialize (0);
while (1) {
result = USBH_MSC_DriveMount ("U0:");
if (result == USBH_MSC_OK) {
f = fopen ("Test.txt", "r");
if (f) {
fread (fbuf, sizeof (fbuf), 1, f);
fclose (f);

14
ministère de l'enseignement supérieur
et de la recherche scientifique
École centrale polytechnique privée

}
}
osDelay (1000);
}
}

11. Au niveau du programme principal, déclarer la procedure void Init_Thread(void)


comme externe.
12. Faire l’initialisation Init_Thread() :
#ifdef RTE_CMSIS_RTOS
Init_Thread();
osKernelStart ();
#else
while (1)
{
}
#endif

13. Enregistrer et compiler le projet.


14. Passer en mode débogage: cliquer sur Start/Stop Debug Session
15. Cliquer sur Memory 1 et entrer fbuf dans la zone de texte.
16. Clic droit sur l’affiche et choisir Ascii .
17. Ouvrir le fichier Thread.c et ajouter un breakpoint au niveau de la ligne fclose (f);
18. Cliquer sur RUN

15
ministère de l'enseignement supérieur
et de la recherche scientifique
École centrale polytechnique privée

Références:

[1] “Discovery kit with STM32F429ZI MCU”, user manual, UM1670, September 2017.
[2] “STMicroelectronics: Cortex™-M4 STM32F429 Discovery evaluation board using
ARM® Keil™ MDK 5”, featuring Serial Wire Viewer Spring V 2.0, 2017.
[3] “emWin Graphic Library with Graphical User Interface”, user & reference guide,
UM03001V5.32, October 6, 2015.
[4] “STM32 embedded graphic objects/touchscreen library”, Application note, AN3128, June
2011.

16

Vous aimerez peut-être aussi