33 0 1MB
ministère de l'enseignement supérieur et de la recherche scientifique École centrale polytechnique privée
Travaux Pratiques Programmation STM32F4
Enseignant : Noureddine ALOUI, [email protected]
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 - Graphics → Core. - Graphics Display → STM43F429I-Discovery.
et sélectionner :
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 STM32F429DISCOVERY. 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. 1. 2. 3.
4.
Configurations Créer un nouveau projet TP6. Configurer l’afficheur LCD. 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 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 comme externe. 12. Faire l’initialisation Init_Thread() : #ifdef RTE_CMSIS_RTOS Init_Thread(); osKernelStart (); #else while (1) { } #endif
la procedure void Init_Thread(void)
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