République Tunisienne Ministère de l’Enseignement Supérieur et Recherche Scientifique Université de Gabés I S NSTITUT UPÉRIEUR DES S I YSTÈMES NDUSTRIELS DE Fascicule de Travaux pratiques G ABÈS Réseaux locaux de communication ELABORÉ PAR : Mabrouka Gmiden ENSEIGNÉ POUR LE CLASSE : SARI3 ANNÉE UNIVERSITAIRE 2021/2022 TP Réseaux locaux de communication ISSIG/2021-2022 Mabrouka Gmiden TP N°1 “Hello world LED”: Utilisation des GPIOs I. Objectifs Le but de ce TP est de se familiariser avec le processeur STMicroelectronics Cortex ™ -M4 et de maitriser le logiciel STM32CubeIDE. La manipulation contient 3 applications : commande de LED, programme « Blinky », et commande de LED par bouton poussoir II. Introduction STM32F4 Les microcontrôleurs (microC, uc et MCU), sont des ordinateurs minimalistes comme les cartes Arduino. Ils possèdent de nombreux canaux de transmission appelés BUS (UART, I2C ou SPI). Ces BUS permettent de commander des actionneurs, communiquer avec des capteurs voire échanger avec d'autres microcontrôleurs. Ainsi les MCU sont fréquemment utilisés pour les robots :), mais aussi dans tous les systèmes embarqués. Par exemple dans l’automobile, l'aviation, les télécommandes, les jouets, la téléphonie mobile, etc. La famille des microcontrôleur STM32f4 de ST Microelectronics fournit une vaste gamme de périphériques autour d’un cœur ARM®Cortex®-M4 32-bit. Dans ce TP, on considère la carte STM32f407VG. Les caractéristiques et les fonctionnalités de cette carte sont accessibles depuis ses 100 ports broches (Pins) ainsi que d’autres périphériques de liaisons, allant des simples GPIOs et des interfaces de communication série synchrone (SPI) ou asynchrone (RS232) jusqu’aux interfaces plus complexes comme l’USB, l'Ethernet et le HDMI, etc. 1 TP Réseaux locaux de communication ISSIG/2021-2022 Mabrouka Gmiden STM32CubeIDE Les MCU ne possèdent pas de système d’exploitation . De ce fait, les programmes au sein de MCU sont souvent codés, compilés puis téléversés par un ordinateur extérieur. Pour programmer la carte STM32, plusieurs environnements de programmations peuvent être employés. Ces environnements, souvent appelés IDE (Integrated Development Environment), sont de types multiples mais qui se basent tous sur le langage de programmation C. Auparavant, deux outils étaient nécessaires : TrueSTUDIO (Atollic) et l'outil graphique STM32CubeMX (ST). En 2019, ST a racheté Atollic et les deux logiciels ont été fusionnés pour former STM32CubeIDE. STM32CubeIDE est une plate-forme de développement C/C++ avancée avec des fonctionnalités de configuration périphérique, de génération de code, de compilation de code et de débogage pour les microcontrôleurs et microprocesseurs STM32. Il est basé sur le frameworkn ECLIPSE™/CDT et la chaîne d'outils GCC pour le développement, et GDB pour le débogage. .Il permet : • De configurer les périphériques • D’écrire l'application en C ou C++ • De télécharger l'application dans une cible • De débugger l'application STM32CubeIDE est librement téléchargeable sur le site ST (STM32CubeIDE) III. Hello world LED: Utilisation des GPIOs Dans cette partie, nous allons apprendre diverse manière d'allumer une LED à partir des GPIOs de notre carte. Présentation des GPIOs GPIO signifie General Purpose Input Output, il s'agit donc des entrées et des sorties des pins de votre carte. En output, il peut vous permettre d'activer (Enable) un pin d'un de vos composants ou bien d’allumer une LED. En input, il peut permettre de détecter l'état d'un composant extérieur par exemple celui d'un bouton poussoir. 2 TP Réseaux locaux de communication ISSIG/2021-2022 Mabrouka Gmiden Les fonctions HAL GPIO • HAL_GPIO_ReadPin(gpio-port, gpio-pin) • HAL_GPIO_TogglePin(gpio-port, gpio-pin) • HAL_GPIO_WritePin(gpio-port, gpio-pin, pin-state) III.1. Commande de LED Dans cet exercice, nous allons commander la LED PA5 de STM32F407. a Création de projet • Démarrer l'application STM32CubeIDE. Une première fenêtre s'ouvre : • On indique dans cette fenêtre le répertoire de travail. Ce répertoire constituera un espace des projets : Workspace, dans lequel plusieurs projets pourront figurer. On peut modifier le chemin proposé en cliquant sur • Cliquer sur • Aller ensuite dans File >> New >> STM32 Project 3 TP Réseaux locaux de communication ISSIG/2021-2022 • Cliquer sur Board Selector : • Dans Type, cocher Arm Cortex-M4 : • Dans MCU/MPU Series, cocher STM32F4 : 4 Mabrouka Gmiden TP Réseaux locaux de communication ISSIG/2021-2022 Mabrouka Gmiden Dans la partie droite, cocher la carte STM32F407VGTx : Cliquer Dans la fenêtre suivante, choisir un nom de projet (ici, on prend le nom Test_LED) : Test-LED Cliquer enfin Une fenêtre s'ouvre alors. Elle permet d'initialiser les périphériques internes dans leur mode par défaut. Ceci est préférable, dans la mesure où les pattes utilisées par la carte seront ainsi référencées. Cliquer 5 TP Réseaux locaux de communication ISSIG/2021-2022 Mabrouka Gmiden b Configuration des pines A l'ouverture du projet, on obtient la visualisation du microcontrôleur suivante : • Dans la configuration de RCC (Reset and clock control), choisir que Cristal/Ceramic Resonator comme High Speed Clock (HSE) : Les broches correspondantes PH0_IN et PH1_OUT sont affectées et configurées automatiquement. • Dans la configuration de SYS, choisir Serial Wire comme interface de débogage : 6 TP Réseaux locaux de communication ISSIG/2021-2022 Mabrouka Gmiden Les pines PA13 et PA14 sont activées et configurées automatiquement. Lorsqu'une carte est sélectionnée, STM32CubeMX permet automatiquement le réglage du brochage de la carte avec les affectations de broches pour les interfaces de communication, les LED et d'autres fonctions. (Pour configurer les broches LED, vérifiez dans le manuel de l'utilisateur des cartes STM32 Nucleo-64 et la fiche technique STM32L476xx quelles broches LED utiliser). • Cet exemple permet l'utilisation de la broche LED bleu PD15 présenté sur la carte STM32F4 comme GPIO_Output. Pour la vérification : cliquer que PD15 et vérifier que GPIO_Output est sélectionné. 7 TP Réseaux locaux de communication ISSIG/2021-2022 Mabrouka Gmiden c Configuration de clock Dans l'onglet Clock Configuration, vérifiez que STM32CubeMX configure automatiquement l'oscillateur interne dans le système d'horloge avec PLL à 16MHz et propose la configuration PLL comme suit : 1. HSI (horloge interne haute vitesse) sélectionné pour le PLL Source Mux 2. HSI sélectionné dans le System Clock Mux 3. HCLK défini sur 16MHZ d Configuration de projet et génération de code source Basculez vers l'onglet Project Manager (Gestionnaire de projets) pour configurer le projet. Dans l'onglet Projet : • Vérifiez le nom du projet et l’emplacement du projet • Vérifiez que le Toolchain/IDE sélectionné est STM32CubeIDE. 8 TP Réseaux locaux de communication ISSIG/2021-2022 Mabrouka Gmiden Dans l'onglet Générateur de code, assurez-vous que les options suivantes sont cochées : • Dans la section STM32Cube Firmware Library Package : Copiez toutes les bibliothèques utilisées dans le dossier du projet. • Dans la section Fichiers générés : conservez le code utilisateur lors de la régénération de l'option de code C, qui s'applique uniquement aux sections utilisateur dans les fichiers générés STM32CubeMX. Pour générer le projet dans STM32CubeIDE : • Cliquez sur Générer le code. • Cliquez sur Ouvrir le projet pour ouvrir le projet avec STM32CubeIDE. 9 TP Réseaux locaux de communication ISSIG/2021-2022 10 Mabrouka Gmiden TP Réseaux locaux de communication ISSIG/2021-2022 Mabrouka Gmiden e Éditez main.c pour commander la LED Dans STM32CubeIDE, à partir de l'onglet Explorateur de projet, ouvrez le fichier main.c, dans le dossier Src et ajoutez les fonctions adéquates pour le clignotement de la LED, en utilisant les fonctions HAL. Le code utilisateur peut être ajouté dans le fichier main.c, à l'intérieur de la boucle while (1) entre les sections /* USER CODE BEGIN 3 */ et /* USER CODE END 3 */ (cela conservera votre code après régénération). Commande d’une LED Pour alimenter une LED, nous allons utiliser la fonction HAL_GPIO_WritePin (GPIOx, GPIO_Pin, PinState) entre les balises /* USER CODE BEGIN 2 */ et /* USER CODE END 2 */. Cette fonction permet de commander l'état d'un port GPIO en OUTPUT. Le premier argument correspond à la famille du GPIO qui correspond à une lettre par exemple GPIOA, GPIOB et etc. Le second argument correspond au numéro du GPIO. Le troisième correspond à l'état haut ou bas du GPIO. Vous pouvez entrer 1 ou 0 ou bien les constantes SET ou RESET pour plus lisibilité. 11 TP Réseaux locaux de communication f ISSIG/2021-2022 Mabrouka Gmiden Build/Construire le projet Pour alimenter la carte, utilisez son connecteur CN1 pour vous connecter à un ordinateur via un câble USB Type-A. Cliquez sur le projet depuis l'explorateur de projet, puis faites un clic droit et sélectionnez Build Project, pour compiler le projet (ou cliquez sur le bouton Build de la barre d'outils). g Déboguer le projet Cliquez sur Debug >> Debug configuration de la barre d'outils et vérifier les paramètres de débogage suivants puis cliquez sur Debug 12 TP Réseaux locaux de communication ISSIG/2021-2022 Mabrouka Gmiden Cliquer sur Run pour executer le programme et regardez maintenant la LED Bleu allumée sur la carte STM32F4. 13 TP Réseaux locaux de communication III.2. ISSIG/2021-2022 Mabrouka Gmiden Exercice 2 : programme « Blinky » On veut maintenant clignoter la LED bleu chaque 100 ms. Nous allons utiliser ces fonctions entre les balises /* USER CODE BEGIN 3 */ et /* USER CODE END 3 */ : HAL_GPIO_TogglePin (GPIOD, GPIO_PIN_15); HAL_Delay (100); III.3. /* Insert delay 100 ms */ Exercice 2 : Commande d’une LED avec bouton poussoir Dans cet exercice on va commander la LED avec le bouton poussoir PA0. Lorsque on appuie une fois sur le bouton, la LED PD15 clignote et lorsque l'on appuie une seconde fois elle s'éteint.Pour notre application, nous allons utiliser les fonctions indiquées dans la section HAL GPIO Functions 14