Vous êtes sur la page 1sur 55

Systèmes embarqués avec les

microcontrôleurs STM32F5
Programmation d’un système embarqué- ARM CORTEX M4

Partie 1:Programmation des GPIO


General Purpose Input Output
Fonctionnalité
Registres de configurations
Exemple de programmation
1- INTRODUCTION
 Présentation de la carte STM32F407
 Outils de développement
2- Périphériques et monde
STM32

10/16/2015 7
 Définitions générales
0x1FFFFFFF Zone Constructeur
0xE0100000
0xE00FFFFF Périphériques système
(1 MO)
0xE0000000
adressage
 code du
nécessaire
0xDFFFFFFF Périphériques Externes  Adressage
périphériquesdu
agissant à très
(1 GO)
périphériques
du Cortex-M3
bas niveau :
Un périphérique informatique est un dispositif
0xA0000000 ajoutés
Contrôleur
 (Driver)
par le
Stockage du
RAM Externe  constructeur
d’interruption,
stockage
Permettre auxdu
du
connecté à un0x9FFFFFFF
système informatique
(1 GO) qui ajoute à ce
données
microcontrôleur
le Timer
code
applications
exécutable
relatives au
dernier des0x60000000
fonctionnalités. intégrant
système,
et
d’utiliser le
le bloc
du données.
code.
0x5FFFFFFF Périphériques Cortex-M3.
de contrôle,
matériel d’uneetc.
(0,5 GO) façon
transparente.
0x40000000
0x3FFFFFFF SRAM
(0,5 GO)
0x20000000
0x1FFFFFFF CODE
(0,5 GO)
0x00000000

8
 Ecosystème STM32

Cœur Cortex M3
*Communauté ARM
*Cœur standard

9
 Les périphériques du cœur et les périphériques STM32

• Nested Vectored Interrupt Controller (NVIC)


• System control block (SCB)
• System timer
• Memory protection unit (MPU

Les périphériques
• GPIO et AFIO du cœur
• Analog to Digital Converter
• Digital to Analog Converter
• Timers
• Secure Digital Input/Output
• USB Full Speed - Device
• USB Full speed - On The Go
• Controller Area Network
• USART
Les
• SPI
périphériques du
STM32
• I2C
• Ethernet MAC Controller
10/16/2015 10
 Les périphériques du cœur

Nested Vectored
System control Memory protection
Interrupt System timer
Controller (NVIC) block (SCB) unit (MPU) la
• améliore
fiabilité du
système en
• C’est l'interface définissant la
• un contrôleur de modèle de • 24-bit mémoire pour les
d'interruption programmeurs au • un système différents attributs
intégré qui prend processeur. d'exploitation régions de
en charge une • il permet temps réel mémoire.
faible latence du l’implémentation , (RTOS) • Il fournit jusqu'à
traitement la configuration et • un simple huit régions
d'interruption. le control du compteur. différentes, et une
système. région
‘background
‘prédéfini
facultatif.

10/16/2015 11
 les périphériques STM32

Exemples

Open 103C
Connecting to Connecting to Connecting to
Devolopment
debugger touch screen LCD touch screen LCD
Board

Connecting to Connecting to Connecting to Connecting to


RS232 Board via RS485 Board via USB Board via CAN Board via
USART USART USART CAN

Connecting to Connecting to Connecting to


Ethernet Board RS485 Board via NRF24L01 Board
via SPI SPI via SPI

12
Définitions
RS232
DTE:
SPI
DCE:
Ordinateur Modem
Ecran convertisseur
RS485
imprimante RS232 RS485
 Protocol de transfert
Spécification de donnée
électrique pour
asynchrone
un
SPI
système multipoints.
Lit le registre interne du
 échanger
IL permetdes informations
d’utiliser sous forme
plusieurs
STM32F4.
série sur une distance maximale de 15m
émetteurs
 Protocole SPI travaille dans
faciliter différentielle
 Liaison l'interconnexion de terminaux
(résultat
le cadre ou STM32F4 est le
(DTE = Data Terminal
est la soustraction Equipment) et
du tensions)
maitre et la carde SD est
de périphériques série
 Communication "modems" (DCE =
l’esclave.
Data Circuit Equipment) .
asynchrone.
 Plus
utiliser un simple
simple signal.
et économique.

13
Définitions
Protocole?? Communicat
Des PCs
ion

Résultat
Des
périphérique
Série d’étapes s

Notion
maitre/esclave??

Maitre
 générer Esclave
l’horloge  répondre aux
 Sélectionner requêtes du
l’esclave qui maitre
veut le
communiquer

10/16/2015 14
Définitions
Mode synchrone??

Réponse

Exécution
Processus appelant
Processus appelé

Mode asynchrone ??

Processus appelant

Processus appelé

15
3- LES GPIOs
 GPI: General Purpose Input Output
Le microcontrôleur STM32F407 dispose de 7 ports d’entrées/sorties (dénommés GPIOA à
GPIOG), partagés avec d’autres périphériques. A chaque port I/O est associé:
- Quatre registres de configuration 32 bits
- Deux registres de données 32bits
- Un registre de 32bits set/reset
- Un registre 32bits de verrouillage
- Deux registres 32bits pour les fonctions secondaire (Alternate function)
Chaque port GPIO possède son propre signal d’horloge et contient des registres de contrôle
qui déterminent le mode de fonctionnement des pins ainsi que des registres permettant de lire
l’état binaire des pins en entrée et d’imposer l’état des pins en sortie.
Ces pins sont également reliés aux différents périphériques du microcontrôleur (USART,
Timer, ..) à travers l’AFIO (Auxiliary Function Input Output). L’AFIO permet de multiplexer
les connexions entre pins et périphériques. Il offre ainsi une flexibilité au niveau du choix du
pin à utiliser pour véhiculer un signal donné. Quand l’AFIO est désactivé, les connexions par
défaut entre pins et périphériques sont établies. Une fois l’AFIO activé, il est possible de
remapper (multiplexer) les pins.
 Architecture d’un port GPIO & modes de fonctionnement des
IO
Chaque port GPIO est constitué de :
16 cellules identiques consistant chacune en une circuit électronique connectée à un pin
externe et pouvant être configurée afin de déterminer le sens (Entrée ou sortie) ainsi que les
caractéristiques électriques du pin. Il est à noter que chaque pin d’un port peut être
configuré en entré ou sortie indépendamment des autres pins du même port.
Les IO du STM32 sont de type Five Volt Tolerant (FT), c'est-à-dire qu’ils peuvent
supporter une tension d’entrée de 5V sans dommage ou dysfonctionnement.
Des registres occupant des adresses de la zone BitBanding et pouvant être accédés
comme mots de 32 bits :
 Un registre d’entrées (Input Data Register : IDR) de 32 bits. Les 16 bits poids faible
étant utilisés pour la lecture des valeurs logiques issues des 16 pins du port.

 Un registre de sorties (Output Data Register : ODR) de 32 bits. Les 16 bits poids
faible étant utilisés pour imposer les valeurs logiques au niveau des 16 pins du port.

 Un registres de Mise à 1 ( Bit Set Reset Register : BSRR) et un registre de remise à 0


et (Bit Reset Register : BRR). Par le biais de ces registres, il est possible de changer
l’état d’un ou plusieurs bits du registre ODR, et par conséquent les sorties GPIOs, en
en un seul cycle : on parle d’accès atomique.

 2 registres de configuration (Control Register High /Low : CRH/CRL) permettant de


déterminer le sens, le mode de fonctionnement et la fréquence de commutation des
GPIOs. A cette fin, 4 bits sont utilisés pour chaque IO, et donc 64 bits (4*16) pour la
totalité des 16 Ios d’un GPIO. D’où la nécessité d’utiliser 2 registres de 32 bits.
Les différentes configurations possibles en fonction des valeurs des 4 bits sont
données dans le tableau suivant. A l’initialisation, tous les IO sont configurés en ‘Input
Floating’.
 Un registre de verrouillage de la configuration (Configuration Locking Register) utilisé
pour interdire la modification du contenu des registres de configuration (CRH et CRL) sauf
après un reset. Ceci protège contre les manipulations involontaires et les perturbations
électromagnétiques.
Accès atomique aux registres
Pour la lecture du contenu des registres d’entrée IDR des ports GPIO, il est possible de
lire
l’état d’un bit unique en une seule instruction (1 cycle) en utilisant le mécanisme du
Bitbanding.
Pour l’écriture dans les registres de sortie ODR, même si ces registres font partie de la
zone BitBanding, le microcontrôleur STM32 offre un mécanisme plus performant pour la
mise à jour de la valeur d’un ou plusieurs bits en un seul cycle. Ceci est assuré par
l’utilisation des registres BSRR et BRR.

Supposons que le registre ODR contient la donnée suivante (0x8F0B)

 Et qu’on veut mettre à 1 les valeurs des bits b14, b13 et b2 qui sont à 0. Dans ce cas, il
suffit d’écrire dans le registre BSRR les bits correspondants ( b14, b13 et b2 ) à 1
indiquant qu’on veut mettre à 1 les bits du registre ODR :
Au départ le registre ODR contient avec la valeur (0x8F0B) et BSRR avec 0x0000 :
Après l’exécution de l’instruction permettant de mettre b14, b13 et b2 de BSRR à 1

De même, si on veut mettre des bits à 0 (exemple : les bits b0, b1 et b15), c’est le
registre de reset BRR qu’on doit utiliser en mettant à 1 les bits correspondants :
 La structure de base d'une port I/O

Le mode Analogique
• Permet de lire ou délivrer un signal analogique
• Attention à ne pas appliquer de tension trop élevée ou négative sous peine d’endommager
le microcontrôleur
Les fonctions alternatives des broches des GPIOs :
Permet d’ajouter des fonctionnalités aux broches d’E/S
• Timer
• I2C
• USART
• SPI
• ADC
• USB
• JTAG
• Capteur de température
• Audio PLL (8kHz-192kHz)
•…
 Sélection des fonctions alternatives : Le multiplexage
• Chaque broche du MCU est connectée à différents périphériques
• Sélection d’une fonction parmi 16 possibles via les registres GPIOx_AFRL(H)
Rappel :
• Configuration des broches entrées ?
 Configurations d'entrée pull up / pull down
 Configurations de sortie

 CONFIGURATION DE ALTERNATE FUNCTION


 CONFIGURATION D’ E/S ANALOGIQUE
 Configuration des GPIOs

 Registre GPIOx_MODER : sélection du mode


• 4 valeurs possibles pour chaque broche
-‘00’ Input (reset state)
-‘01’ General purpose output mode
-‘10’ Alternate Function mode
-‘11’ Analog mode
 Registre GPIOx_OTYPER : sélection du type de sortie
• 2 valeurs possibles
-‘0’ sortie en push-pull (reset state)
-‘1’ sortie en drain ouvert

 Registre GPIOx_OSPEEDR :
- sélection de la vitesse de commutation des sorties
• 4 valeurs possibles (Fmax dépendant de VDD)
-‘00’ Low speed (max [2-8]MHz)
-‘01’ Medium speed (max [12,5-50]MHz)
-‘10’ Fast speed (max [25-100]MHz)
-‘11’ High speed (max [50-180]MHz)
 Registre GPIOx_PUPDR : mise en œuvre du pull-up/pull-down
• 4 valeurs possibles :
-‘00’ no pull-up, no pull-down
-‘01’ pull-up
-‘10’ pull-down
-‘11’ reserved
 Registres de données des ports• Registres de données d’entrée (accessibles en lecture) :

- GPIOx_IDR (Input Data Register)

• Registres de données de sortie (accessibles en lecture-écriture) :


- GPIOx_ODR (OutputData Register)
- GPIOx_BSRR (Bit Set/Reset Register)
Ce registre permet de mettre à 1 ou à 0 le(s) bit(s) du registre de données de sortie (Output
Data Register)
Exemples :
-En écrivant un ‘1’ dans BR10, on met à ‘0’ le bit 10 du registre ODR
-En écrivant un ‘1’ dans BS4, on met à ‘1’ le bit 4 du registre ODR
 Mécanisme de verrouillage des GPIO
• Il est possible de figer la configuration d’un port via l’écriture d’une séquence binaire
spécifique (LOCK) dans le registre GPIOx_LCKR
• Verrouillage des registres de contrôle (GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR,
GPIOx_PUPDR, GPIOx_AFRL et AFRH)
• Déblocage au prochain reset
Application1:
Clignotement des LEDs
Gestion d’application avec STM32f407
Les interruptions
les broche d’E/S
Elles sont les interfaces entre le microcontrôleur ( et ses périphériques internes) et son environnement
1- Les broches d’E/S d’un microcontrôleur : (Rappel)
• Sont bidirectionnelles et configurables : Chaque broche supporte différents modes de fonctionnement :
-Entrée
-Sortie
-Analogique
-Autres fonctionnalités
• Sont regroupées sur des ports, notés GPIO
Généralités
• Tous les ports d’E/S sont configurés à l’aide de
registres dédiés, placés dans l’espace mémoire :
Structure d’une broche d’un port d’E/S
• 4 modes :
-Input
-Output
-Analog
-Fonction alternative
Les fonctions alternatives des broches des GPIOs : Permet d’ajouter des fonctionnalités aux broches d’E/S
• Timer
• I2C
• USART
• SPI
• ADC
• USB
• JTAG
• Capteur de température
• Audio PLL (8kHz-192kHz)
•…

Sélection des fonctions alternatives : Le multiplexage


• Chaque broche du MCU est connectée à différents périphériques
• Sélection d’une fonction parmi 16 possibles via les registres GPIOx_AFRL(H)
Sélection des fonctions alternatives : Le multiplexage
• Sélection d’une fonction parmi 16 possibles via les registres GPIOx_AFRL(H)

Pour chaque broche, 4 bits de sélection permettant le pilotage du multiplexeur et donc le choix parmi 16 (24 )
fonctions alternatives (0-15)

Registres de contrôle des ports


• Le contrôle des ports s’effectue via 4 registres 32-bits spécifiques :
 GPIOx_MODER: Direction (mode) des I/Os (input, output, AF, analog)
 GPIOx_OTYPER: Définit le type de la sortie (push-pull, drain-ouvert)
 GPIOx_OSPEEDR: Définit la vitesse de commutation de la sortie
 GPIOx_PUPDR: Sélection du pull-up/pull-down
1. Définition
Une interruption est un événement interne ou externe qui va de manière chronologique :
 Arrêter le fonctionnement en cours du programme.
 Sauvegarder le contexte d’exécution : état du programme en cours d’instruction (registres
et compteur ordinal – program counter)
 Exécuter une suite d’instruction pour servir l’interruption : routine de service
d’interruption – programme spécifique à l’interruption
 Restaurer le contexte précédent d’exécution
 Reprendre le fonctionnement du programme.
2. Classification
Une interruption est un événement interne ou externe : il existe 2 types
 Interruptions internes : exceptions
Les interruptions internes sont appelées exceptions. Elles surviennent lors d’une
erreur d’exécution du programme (overflow, watchdog, instruction réservée,
adressage, etc.)
 
 Interruptions externes : interruptions
Les interruptions externes concernent essentiellement les demandes de service des
périphériques. Elles arrivent de manière asynchrone avec les instructions en cours
d’exécution.
3. Le contrôleur d'interruption
Dans les microcontrôleurs Cortex-M, un contrôleur d'interruptions vectorielles généralement
appelé NVIC est utilisé pour gérer toutes les interruptions et les exceptions prises en charge
par Cortex-M.
Le contrôleur d'interruptions vectorielles est fondamentalement une partie intégrée de
Cortex-M en raison de son intégration étroite avec le noyau cortex-M. Nous pouvons
également configurer le contrôleur d'interruption en fonction de nos besoins à l'aide de
registres spécifiques. Le mode de fonctionnement de la plupart des registres d'interruption est
privilégié c'est-à-dire qu'ils ne sont accessibles qu'en mode privilégié, mais si l'interruption
est une interruption logicielle, ces registres sont également accessibles en mode utilisateur. 
Les principales responsabilités de NVIC sont les suivantes:
 Traitement des interruptions
 Fonction d'interruption programmable
 Gestion de la faible latence d'interruption
4. Que se passe-t-il lorsqu'une interruption se produit?

Chaque fois qu'une exception matérielle ou logicielle se produit, nécessite une réponse de
cette interruption. En réponse, un appel de fonction se produit et la réponse requise est
exécutée sous la forme d'un morceau de code connu sous le nom de routine de service (SR) ou
de routine de service d'interruption (ISR). Après cet ensemble d'instructions dans le service, le
programme est exécuté et la commande revient au programme principal dans lequel
l'interruption s'est produite. 
 Une interruption est générée par n'importe quelle source
matérielle ou logicielle.
 Le processeur suspend la tâche en cours d'exécution en
réponse à l'interruption.
 Après cela, le processeur traite ensuite la routine de
service d'interruption (également appelée gestionnaire
d'interruption) pour traiter l'interruption qui s'est produite.
 Le processeur revient alors à la tâche suspendue et reprend

son exécution normale du programme.


5- Table vectorielle d'interruption et traitement d'interruption: Comment le processeur
trouve les adresses de ces routines de service d'interruption ou de ces gestionnaires
d'exceptions? 

L'espace d'adressage pris en charge par ARM est de 4 Go. Cette carte mémoire est divisée en différentes
sections de mémoire telles que le code, la RAM, le périphérique, la mémoire externe, la région de la
mémoire système.

La région de mémoire de code contient une table de vecteurs


d'interruption (IVT). Cette table de vecteurs d'interruption se
compose d'une adresse de réinitialisation du pointeur de pile et
des adresses de début de tous les gestionnaires
d'exceptions. En d'autres termes, il contient l'adresse de départ
qui pointe vers les routines d'interruption et d'exception
respectives telles que le gestionnaire de réinitialisation. Par
conséquent, le microcontrôleur utilise cette adresse de départ
pour trouver le code du sous-programme de service
d'interruption qui doit être exécuté en réponse à une
interruption particulière. 
la table des vecteurs d'interruption est un tableau d'adresses mémoire. Il contient l'adresse de
départ de tous les gestionnaires d'exceptions. En outre, chaque interruption / exception a
également un numéro d'interruption unique qui lui est attribué. Le microcontrôleur utilise le
numéro d'interruption pour trouver l'entrée dans la table des vecteurs d'interruption. Le tableau
suivant présente la table des vecteurs d'interruption du microcontrôleur.

Vous aimerez peut-être aussi