Vous êtes sur la page 1sur 6

Atelier électronique embarqué 0 

: Programmation des GPIO


(Accès directe aux registres)

L'objectif de cet atelier est de se familiariser avec le processus de création, exécution et


débogage des programmes d'application, écrits en langage C, pour le microcontrôleur
STM32F4 de ST Microelectronics, utilisant l’IDE Keil et le Kit de développement
STM32F4Dicovery
Développer un Programme C, pour manipuler les GPIO afin d’ allumer des LED utilisant la
configuration par accès directe aux registres.
L’atelier sera organisé comme suit :
1. Schéma fonctionnel du microcontrôleur STM32F4xxx et ports GPIO.
2. Rappel sur les registres GPIO
3. Configuration des ports GPIO
4. Développement du programme sur Keil
5. Test et validation sur le kit de développement STM32F4Dicovery

1. Schéma fonctionnel (datasheet)


La famille STM32F407xx est basée sur cœur ARM® Cortex®-M4 haute performance avec
une architecture RISC 32 bits fonctionnant à une fréquence allant jusqu'à 168 MHz. Le
Cortex-M4 dispose d'une unité à virgule flottante (FPU) simple précision. La famille
STM32F405xx et STM32F407xx intègre des mémoires (mémoire flash jusqu'à 1 Mo, jusqu'à
192 Ko de SRAM), jusqu'à 4 Ko de sauvegarde SRAM et une gamme étendue d'E / S
améliorées et de périphériques connectés à deux Bus APB, trois bus AHB et une matrice de
bus multi-AHB 32 bits.
Tous les microcontrôleurs offrent trois ADC 12 bits, deux DAC, un RTC basse
consommation, douze Timer 16 bits comprenant deux Timer PWM pour le contrôle des
moteurs et deux Timer 32 bits à usage général. Un générateur de nombres aléatoires (RNG). Il
comprend aussi des fonctions de communication série (USART, I2C, SPI, SCI, USB),
interfaces de déboggage (SW, JTAG), contrôleur LCD et gestion de l'horloge.

Comme le montre la figure 2, le microcontrôleur dispose de 9 ports GPIO (GPIOA, GPIOB,


GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH, GPIOI), chaque port contient 16 broches
soit 9*16=144 le total de broches d'E / S.
Dans la figure 2 on montre la top view du kit de développement les broches utilisés sont
répartie sur les connecteur P1 et P2 .
Figure . STM32F40xxx Block digram (page 19 datasheet)
P1 P2

Figure 2. Top View du Kit STM32F4 Discovery

2. Rappel sur les registres GPIO :

La figure suivante montre le circuit électronique pour une broche d’un port GPIO. Chaque
broche GPIO peut être configurée en tant qu’entrée numérique, sortie numérique, une entrée /
sortie analogique, ou une «alternate fonction ”entrée / sortie.
Les données de broche sont lues à partir d'une entrée ou envoyé à une broche de sortie via le
registre de données d'entrée (IDR) et le registre de données de sortie (ODR), respectivement.
Le mode de fonctionnement souhaité pour chacune des 16 broches est sélectionné
individuellement via le registre (MODER).
D'autres options peuvent être configurées pour chaque broche via les trois registres.
OTYPER pour choisir le type de la sortie, OSPEEDR vitesse de commutation, PUPDR pour
l'activation des résistances de Pull up et Pull down. Cependant, les valeurs par défaut de ces
registres peuvent être suffisantes pour la plupart des applications, et par conséquent il ne sera
peut-être pas nécessaire de les programmer
Pour plus de détails sur ces registres, consulter le Reference Manual disponible sur le
classroom
Figure 2 . Circuit électronique d’une broche d’un PORT entrée sortie + registres

3. Configuration des Pin GPIO


Consulter le Reference Manual disponible sur le classroom page (198-205)

Pour configurer le mode de fonctionnement (entrée ou sortie) d’une broche, il faut accéder au
couple de bit correspondant :
Exemple : configurer la broche 13 en mode sortie numérique revient à mettre le bit 26 à 1
Exemple : configurer la broche 13 en mode analogique => mettre le bit 25 et le bit 26 à 1
Adresse des registres GPIO
 Chaque GPIOx occupe une plage d’adresse. (voir datasheet page ) (x=A,B,C,D…..I)
 Chaque GPIO a des registres (GPIOx_MODER , GPIOx_OTYPER,
GPIOx_OSPEED, GPIOx_PUPDR….)
 Pour déterminer l’adresse d’un registre, il suffit de connaitre l’adresse de base du
GPIOx et l’offset
Adresse du registre =Adresse de base du GPIOx + offset

Travail Demandé

Programmation par accès direct aux registres


1. Commencez par créer un nouveau projet, en suivant les instructions du document
STM32F4Discovery Board Projects, disponible sur le classroom .

 Ouvrir Keil µVision.


 Project → Create new µVision project
 Dans la fenêtre Select Device for Target ‘Target 1’, cliquer dans
STMicroelectronics et sélectionner STM32F4
 Dans la fenêtre Manage Run-Time Environment, sélectionner:
CMSIS → CORE puis Device → Startup
 Dans le menu projet à gauche, clic droit sur Source Group 1, puis Add New
Item to Group ‘Source Group 1’ / C File (.c) / Name: main.c, puis Add.
 Essayez de compiler, si vous avez l’erreur « function assert param declared
implicitely », clic droit dans Target1 → Options for Target ‘Target 1’ → C/C+
+ → Preprocessor Symbols → Define : USE_STDPERIPH_DRIVER

2. Ecrire dans un fichier main.c un programme qui permet de manipuler la LED verte
de la carte LD4

 Identifier la broche à laquelle est connectée la LD4 (page26 ou page 36


STM32F4 Discovery user manuel )
………………………………………………………………
 Identifier le PORT correspondant :
………………………………………………………………...
 Activer l’horloge du PORT ( activer l’horloge RCC correspondante RCC
AHB1 peripheral clock enable register (RCC_AHB1ENR) page 145 146
Reference Manual ) ……

 Déterminer l’adresse de base ce PORT (section : memory map page 71-75


datasheet )
………………………………………………………………...
 Identifier les registres à configurer et leurs adresses 
…………………………
 Déterminer les valeurs à mettre dans ces registres pour allumer la LD4
RCC_AHB1ENR …
MODER……
ODR.
3. Ecrire un programme principal qui fait clignoter la LED en utilisant une fonction
delay comme suit

4. Ecrire un programme qui fait clignoter les 4 LED

Vous aimerez peut-être aussi