0% ont trouvé ce document utile (0 vote)
153 vues93 pages

Cours 1

Le document présente une introduction aux microcontrôleurs et à la gestion des entrées/sorties de base. Il décrit l'architecture d'un ordinateur et d'un microprocesseur, ainsi que la communication entre le processeur et la mémoire via des bus.

Transféré par

fotsoarole
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
153 vues93 pages

Cours 1

Le document présente une introduction aux microcontrôleurs et à la gestion des entrées/sorties de base. Il décrit l'architecture d'un ordinateur et d'un microprocesseur, ainsi que la communication entre le processeur et la mémoire via des bus.

Transféré par

fotsoarole
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Introduction aux microcontrôleurs

Gestion des E/S de base

CHIRAZ TRABELSI

trabelsi@[Link]

SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2


Objectif du module

• Développer les compétences dans le développement logiciel et matériel autour de l'interfaçage de


périphériques.

• Développement de pilotes pour les périphériques

• Protocoles de communication entre l’ordinateur/microcontrôleur et les périphériques

• Développement d’applications mettant en œuvre un ensemble de périphériques

2
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Organisation du module

• 9h de cours: 6 séances

• 27h de TP
• 9h d’applications des notions vues en cours
• 18h de Projet

• Evaluation:
• TP/Projet noté
• Examen

3
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Architecture d’un ordinateur

• Un ordinateur contient essentiellement


• Microprocesseur (un CPU: Central Processing
Unit=Unité centrale de traitement): son rôle
est d’exécuter les programmes

• Des mémoires: espaces de stockage des


programmes et des données
• Mémoire vive (RAM): exemple: barrettes
mémoire
• Mémoire morte (ROM): exemple: BIOS

• Des entrées /sorties:


• Interagir avec l’extérieur: moniteur,
clavier, souris, etc.
• Faire un stockage de masse: disque dur,
clé USB, etc.

• Des bus qui connectent ces composants


4
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Le bus

• Les types de bus


1) Bus d’adresse
• Permet au microprocesseur d’indiquer l’adresse de la donnée à lire/écrire dans la mémoire ou l’E/S
• Unidirectionnel: le microprocesseur envoie l’adresse de la donnée à lire/écrire

2) Bus de données
Deux sens
a) Du processeur vers une mémoire ou une E/S
Le processeur envoie une donnée à écrire dans une mémoire ou
une E/S
b) De la mémoire ou l’E/S vers le processeur
Le processeur lit à partir de la mémoire ou l’E/S
La mémoire ou l’E/S envoie la donnée sur le bus de données

3) Bus de contrôle/commande
• Permet entre autres d’indiquer s’il s’agit d’une lecture ou une écrire, de sélectionner la mémoire ou l’E/S à lire
• Des fils dans les deux sens
• Sortant du microprocesseur: Exemples: écriture/lecture, sélection de la mémoire, etc.
• Vers le microprocesseur: Exemple: indiquer si le composant est prêt à communiquer avec le microprocesseur
5
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Communication processeur/mémoire

• Lecture à partir de la mémoire 0 0000


1 0001
2 0010
3 0011
4
Bus d’adresse de 4 bits (4 fils) 0100
Décodeur 5 0101

Micro- 1010 mémoire 6 0110

7
processeur 0111
8 1000
Bus de commande/contrôle
9 1001
10 1010
11 1011
12
Le microprocesseur veut lire le contenu de l’adresse 1100
13 1101
mémoire 1010 14 1110
1) Il envoie la valeur 1010 sur le bus d’adresse 15 1111
2) Il active le signal de lecture sur le bus de commande
3) Le décodeur d’adresse reçoit l’adresse envoyée par le Mémoire
microprocesseur et active la ligne correspondante à cette Ecriture=0 Lecture =1
adresse
4) Le contenu de la ligne est écrit sur le bus de données Bus de données de 8 bits (8 fils)
5) Le microprocesseur récupère le contenu de la
mémoire à partir du bus de données 6
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Communication processeur/mémoire

• Ecriture dans la mémoire 0 0000


1 0001
2 0010
3 0011

Bus d’adresse 4 0100


Décodeur 5 0101
Micro- mémoire 6 0110
0111
processeur 7 0111

Bus de commande 8 1000


9 1001
10100011 10 1010
11 1011

Le microprocesseur veut écrire la valeur 12 1100


13
10100011 dans l’adresse mémoire 0111 1101
14
1) Il écrit 0111 sur le bus d’adresse 15
1110
1111
2) Il active le signal d’écriture sur le bus
de commande Mémoire
Résultat après
3) Il écrit 10100011 sur le bus de données Ecriture=1 Lecture =0 écriture
3) Le décodeur d’adresse reçoit l’adresse
envoyée par le microprocesseur et active la Bus de données de 8 bits (8 fils)
ligne correspondante à cette adresse
4) Le contenu du bus de données est écrit 7
dans la ligne activée SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Structure interne d’un µProcesseur

8
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Structure interne d’un µProcesseur

Le processeur contient des registres qui ont des


fonctionnalités diverses

9
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Structure interne d’un µProcesseur

• Les registres: ensemble de bascules synchrones qui servent à stocker des informations

La sortie de bascule ne change de valeur que sur front de l’horloge


 Elle est capable de maintenir son « contenu » (fonction mémoire) en
absence du front d’horloge
• Si on veut maintenir le contenu des bascules, Load=0, la sortie de la porte ET est 0,
les signaux d’horloge qui vont vers les bascules sont nuls, donc les bascules
maintiennent leurs contenus
• Si on veut écrire une nouvelle donnée dans les bascules, on la met sur les entrées D,
et on met Load=1, la sortie de la porte ET est égal au signal Clock (signal carré), les
Registre à 4 bits bascules D changent de contenu sur front montant, après un cycle d’horloge on peut
remettre LOAD à 0 10
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Structure interne d’un µProcesseur

• Les registres: ensemble de bascules synchrones qui servent à stocker des informations

Attention:
• Les registres sont des endroits de stockage internes au processeur
• La mémoire principale (RAM) se trouve à l’extérieur du processeur

Registre à 4 bits
11
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Structure interne d’un µProcesseur

Exemple d’utilisation:
• Le processeur contient des registres génériques qu’il utilise pour ses calculs intermédiaires
• Exemple: Le processeur veut exécuter l’instruction c=a+b; (a, b et c sont trois variables
entières stockées dans la mémoire)
• Le processeur envoie à la mémoire des requêtes pour récupérer les valeurs de a et de b et les
met dans les registres R1 et R2 respectivement, il fait l’addition et stocke le résultat dans le
registre R3
• Le contenu de R3 est par la suite écrit dans la case mémoire correspondante à l’adresse de c
a
b
CPU c
R1
R2 Registres
R3 génériques du
processeur
….
Rn
Mémoire
12
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Structure interne d’un µProcesseur

• Unité Arithmétique et Logique (ALU)


• Destinée à faire des calculs
• Opération arithmétiques : addition ,
soustraction, incrémentation, décrémentation,
etc.
• Opération logiques : ET, OU, comparaison,
décalage, etc.
• Reçoit des données venant des registres et/ou de la
mémoire

• Reçoit des ordres de l’unité de commande pour savoir


quelles opérations effectuer et dans quel ordre

13
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Structure interne d’un µProcesseur

• Unité de contrôle
• Récupère l’instruction à exécuter
• Décode l’instruction: compare le code de
l’instruction reçue avec la table des instructions du
processeur (jeu d’instructions)
• Donne les ordres à la logique d’interface de bus
pour aller chercher les données dans la mémoire
• Donne les ordres à l’ALU pour exécuter une
instruction
• Gère le travail des différents sous-systèmes et leur
cohabitation dans le même boîtier.

14
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La type d’un processeur

• Le nombre 8 bits, 16 bits, 32 bits ou 64 bits pour un processeur correspond à la taille du bus de données,
ce qui implique aussi que c’est la taille des registres du processeur, puisque si on récupère une donnée de
la mémoire on doit la sauvegarder dans un registre pour pouvoir faire des calculs. Cela implique aussi que
les données en entrée de l’ALU ont cette même taille
Exemple: exécution de l’instruction c=a+b;
CPU a
R1
b
R2 Registres c
R3 génériques du
processeur
….
Rn

R1 R2

UAL Mémoire

R3
15
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les microcontrôleurs

Un microcontrôleur est un circuit intégré qui contient un petit système informatique

Exemple: ATTINY13A-PU de Microchip Exemple: ATMEGA2560-16AU de Microchip


• 8 proches • 100 broches
• Facile à tester sur des breadboards • A besoin d’une plateforme de test (exemple: Arduino)

16
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Différences entre un microcontrôleur et un microprocesseur
1) Une architecture différente
• Le microcontrôleur intègre le CPU, les contrôleurs d’E/S, les timers, les compteurs sur la même
puce
• La plus grande différence se trouve au niveau du contrôle des entrées/sorties qui est intégré à
l’intérieur du microcontrôleur mais géré par des modules externes pour le microprocesseur
• En ce qui concerne les modules mémoires, le microcontrôleur peut intégrer des mémoires sur la
même puce que le CPU, comme il peut avoir des mémoires externes

I/O Memory
17
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Différences entre un microcontrôleur et un microprocesseur

2) Des usages différents


• Les microprocesseurs sont utilisés pour exécuter un grand nombre d’applications diverses
• Les microcontrôleurs sont utilisés pour des applications spécifiques
• Automobiles
• Téléphones
• Dispositifs médicaux
• Appareils Electroménagers
• Signalisation routière
• Etc.

• Conséquences
• Applications spécifiques pour les microcontrôleurs moins de ressources mémoire et ports
d’E/S sont nécessaires  une taille et un coût réduits

18
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Différences entre un microcontrôleur et un microprocesseur

3) Des fréquences d’horloge différentes


• Fréquences des microcontrôleurs
• De quelques MHz à quelques dizaines de MHz
• Fréquences des microprocesseurs
• En GHz

• Les microprocesseurs ont besoin d’aller plus vite pour gérer plusieurs applications à la fois

• Cependant, avoir une fréquence plus importante augmente la consommation d’énergie

• Les microcontrôleurs ont donc tendance a avoir une fréquence d’horloge réduite pour contrôler
leur consommation d’énergie (très important pour les systèmes alimentés par batterie)

19
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Différences entre un microcontrôleur et un microprocesseur

• Résumé

Microcontrôleur Microprocesseur
Architecture Tout est intégré sur la Le microprocesseur, la
même puce mémoire et les
contrôleurs d’E/S ne
sont pas sur la même
puce
Mémoire Taille limitée Taille importante
Applications Applications spécifiques Applications variées
Coût Pas cher cher
Fréquence Jusqu’à quelques Quelques GHz
dizaines de MHz
Consommation réduite importante

20
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Quelques constructeurs de microcontrôleurs

• ATMEL racheté en 2016 par Microchip


• Exemples de microcontrôleurs: AVR (les microcontrôleurs sur la plupart des Arduinos)

• STMicroelectronics
• Exemples de microcontrôleurs: ST6, STM8, STM32

• Texas Instruments (TI)


• Exemples de microcontrôleurs: MSP430

• Microchip
• Exemples de microcontrôleurs: PIC18, PIC16, PIC12, PIC24

• Zilog
• Exemples de microcontrôleurs: Z8

• Freescale
• Exemples de microcontrôleurs: PowerPC, Coldfire, 68HC

21
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Critères de choix d’un microcontrôleur

• Le nombre de pattes d’E/S selon le nombre de périphériques qu’on veut connecter


• La taille de la mémoire de programme
• La taille de la mémoire de données
• La consommation électrique qui impacte l’autonomie
• Performance du processeur: fréquence et nombre d’instruction par cycle (IPC: Instructions per
Cycle)
• La taille du bus de données donne une idée sur la granularité des instructions machine,
généralement pour une même fréquence, un microcontrôleur 32 bits est plus performant qu’un
microcontrôleur 8bits (il peut faire un traitement sur 32 bits 4 fois plus rapidement qu’un
microcontrôleur 8 bits)
• Le prix du microcontrôleur
• Le prix de l’environnement de développement
22
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Exemple de l’AVR Atmega2560
• C’est celui qui équipe l’Arduino Mega2560

23
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Exemple de l’AVR Atmega2560
• C’est celui qui équipe l’Arduino Mega2560
Le CPU et les mémoires sont sur la même puce
La puce contient aussi des contrôleurs d’E/S
génériques (ports), des contrôleurs de
connections série (USART), des modules
analogiques/numériques, etc.

• Le processeur fonctionne avec une


fréquence de 16MHz
• Un bus de données de 8 bits
 une performance limitée

24
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Exemple de STM32L053

• C’est le microcontrôleur sur lequel on va travailler dans les TPs


• C’est un microcontrôleur de type ARM Cortex-M0+

25
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Exemple de STM32L053

• Le processeur fonctionne avec une fréquence allant jusqu’à 32 MHz


• Un bus de données de 32 bits
 une performance plus importante qu’un Arduino basique (il existe des Arduinos basés sur un ARM 32
bits mais qui sont plus chers que cette carte et consomment plus d’énergie)

26
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Comparaison

STM32L053 Arduino Mega


Processeur ARM AVR
Applications Les processeurs ARM sont très L’AVR est moins utilisé
utilisés dans différents
domaines
Fréquence 32 MHz 16 MHz
Type processeur 32 bits 8 bits
Mémoire 20K de SRAM et 192K de 8K de SRAM et 256K de flash
flash
Prix ≈12 € ≈35 €
Consommation Quelques dizaines de mW Quelques centaines de mW
Nombre de pins 51 numériques dont 16 56 numériques et 16
configurables en analogiques analogiques
Débogage Intégré Un module matériel à acheter
Outils de développement Oui Oui
gratuits
27
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les périphériques

• Deux types
• Capteurs Microprocesseur/
• Leurs sorties sont des entrées Microcontrôleur
pour le microprocesseur/
microcontrôleur

• Actionneurs
• Ils prennent en entrée les
commandes en sortie du
microprocesseur/
Microprocesseur/
microcontrôleur
Microcontrôleur

28
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Communication avec un périphérique

• Pour communiquer avec une E/S, le microprocesseur/microcontrôleur


passe par une interface/contrôleur d’E/S

• Fonction d’une interface /contrôleur d’E/S


• Agit comme une interface entre le bus et les périphériques
• Epargne au processeur la gestion des détails de communication
bas/niveau
• Gère les interfaces électriques

• Composition
• 3 types de registres
• Données: les données échangées entre le bus et le
périphériques transitent par ces registres
• Etat: indique l’état du périphérique (réception d’une
donnée, la transmission a pris fin, etc.)
• Commande/contrôle: permettent au processeur de
configurer et de contrôler les périphériques (activer la
réception/transmission, configurer la vitesse de
transmission, etc.)

29
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Communication avec un périphérique

• Les contrôleurs des E/S


• Communication avec le processeur
• Du point de vue du processeur, un périphérique est un
ensemble de registres (données, état et contrôle) qu’il peut lire
ou écrire pour communiquer

• Exemple: la communication avec le clavier nécessite le plus


souvent deux registres:
• Un registre de données qui contient le code ASCII du
dernier bouton appuyé
• Un registre d’état/contrôle qui indique entre autres si un
nouveau caractère vient d’être tapé. En lisant dans ce
registre, le processeur se rend compte qu’on vient de taper
sur un bouton de clavier et peut donc lire le caractère tapé
dans le registre des données

30
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Communication avec un périphérique

• Que ce soit avec un microprocesseur ou un microcontrôleur, l’interfaçage avec les périphériques passe
par des registres

• La différence est que pour un microcontrôleur les interfaces/contrôleurs sont sur la même puce que le
CPU

Microcontrôleur
Interface /Contrôleur
d’E/S
Registres Périphérique
CPU Données
Contrôle
Etat

• Le microcontrôleur intègre sur sa puce plusieurs interfaces et contrôleurs (GPIOs, convertisseur


analogique/numérique, communication série, interruption, DMA, etc, …) lui permettant de s’interfacer
avec différents périphériques
31
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les microcontrôleurs/ microprocesseurs ARM

• ARM: Advanced RISC Machines


des machines RISC de 32bits et de 64 bits
• RISC (Reduced Instruction set Computer): un jeu d’instructions réduit avec des instructions simples
facilement parallélisables sous forme de pipeline

• ARM ne vend pas de circuits intégrés mais des licences d’IPs (Intellectual Properties)
• Lorsqu’un fondeur veut fabriquer un circuit, il achète la licence à ARM
• Les concepteurs de circuits peuvent donc intégrer les IPs accessibles par la licence dans leurs
designs et générer par la suite des circuits

Code fourni par ARM Représentation logique Circuit final


générée par les outils
32
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les microcontrôleurs/ microprocesseurs ARM

• 3 familles d’ARM
• Cortex-A: haute performance, supporte un OS (exemple: un Raspberry PI 4 est équipé d’un ARM
Cortex-A72)
• Cortex-R: Real-Time (automobile, avionique, médical)
• Cortex-M: Microcontrôleur, basse consommation (exemple: Cortex-M0+)

33
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les cartes de ST

• Chez STMicroelectronics, le microcontrôleur Cortex-M0+


est disponible sur les cartes STM32L0

• Le Cortex-M0+ fait partie de la gamme de


microcontrôleurs basse consommation

34
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les cartes de ST

• Chez STMicroelectronics, le microcontrôleur Cortex-M0+ est disponible sur les cartes STM32L0

• La carte STM32L053R8 est celle sur laquelle on va travailler dans les TPs

35
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
STM32L053R8
Les cartes de ST

• La carte STM32L053R8 fait partie des cartes Nucleo 64 puisque le type de packaging utilisé pour le
microcontrôleur est LQFP64 (64 pins)

STM32L053R8
36
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les microcontrôleurs ARM

• Différences:
• Architecture: Harvard/Von Neumann (les mémoires de programme et de données sur le même bus ou pas)

• Taille du Pipeline (des parties des instructions peuvent être exécutées en parallèle  exécution plus rapide)

• Présence / absence d’un module de division dans l’UAL (Unité Arithmétique et Logique)

• Présence / absence des FPUs (Floating-Point Units: unités de traitements des nombres à virgule)

• Présence / absence de modules DSP (Digital Processing Unit) dans le CPU: modules qui accélèrent les
multiplications et les additions (opérations de base du traitement numérique du signal)
37
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Interfaçage des périphériques avec un microcontrôleur
ARM Cortex-M0+
I. Côté matériel
Cortex-M0+
• Les pins d’E/S (GPIO: General Purpose Input Output) de ce microcontrôleur 3.3 V
sont des pins 3.3V Pins
3.3-5V
GPIO
 Mois de consommation d’énergie que les microcontrôleurs 5V comme
Arduino

 Interface facile avec les composants qui prennent des commandes sur
3.3V (besoin d’un diviseur de tension pour interfacer Arduino à un
module bluetooth par exemple)

 Adaptation facile à la nouvelle tendance (de nos jours, on trouve plus de


modules 3.3V que 5V tels que Raspberry Pi, ESP32, etc.)

• Parmi les 51 pins d’E/S, il y en a 45 qui sont compatibles 5V (en entrée)

 On peut interfacer un capteur qui a des sorties entre 0 et 5V

• Les pins qui ne sont pas compatibles 5V sont:


PA4, PA5, PA0, PC15, PH0 et PH1 (voir Table 15 de la datasheet) 38
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Interfaçage des périphériques avec un microcontrôleur
ARM Cortex-M0+
I. Côté matériel
• La rangée femelle sur le côté gauche de la carte gauche est connectée à la rangée male qui est directement à
sa gauche

• La rangée femelle sur le côté droit de la carte est connectée à la rangée male qui est directement à sa droite

• Les rangées males qui sont sur les deux extrémités de la cartes sont indépendantes des autres rangées

39
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Interfaçage des périphériques avec un microcontrôleur
ARM Cortex-M0+
I. Côté matériel
• Si on veut s’interfacer avec la pin PC8, une seule proche est disponible (la broche 2 du connecteur CN10)
• si on veut s’interfacer avec la pin PB8, deux broches sont disponibles (la broche 10 du connecteur CN5 et la
broche 3 du connecteur CN10

40
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Interfaçage des périphériques avec un microcontrôleur
ARM Cortex-M0+
I. Côté matériel
• Les numéros de pins qui figurent sur la carte sont ceux des pins compatibles Arduino (les pins en bleu clair
dans la figure à gauche)
• Ce sont des pins qui permettent un interfaçage facile avec les cartes d’extension (shileds) qui ont été
développées pour Arduino
• La programmation de la carte dans l’IDE Arduino peut utiliser ces numéros (par exemple, digitalRead(15)
pour lire la pin PB8)

41
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Interfaçage des périphériques avec un microcontrôleur
ARM Cortex-M0+
I. Côté matériel Cortex-M0+
3.3 V 3.3 V
Pins Pins
5V 3.3-5V
d’alim GPIO

• Le microcontrôleur offre des sorties d’alimentation de 3.3V et de 5V permettant d’interfacer des


composants alimentés en 5V

• Même s’ils demandent une alimentation de 5V, la plupart des capteurs peuvent toujours fonctionner avec
des entrées de 3,3V (données par les pins GPIO de la cartes qui sont toutes des pins 3,3V)

Par exemple, ce servomoteur a besoin d’être alimenté en 5V (fil rouge) mais fonctionne
très bien avec un signal d’entrée de 3,3V (fil orange)

42
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Interfaçage des périphériques avec un microcontrôleur
ARM Cortex-M0+
I. Côté matériel

• Les leds de la carte

• LD2: la seule led utilisateur (on peut la programmer, elle


s’allume en vert)

• LD1: indique la transmission série entre l’ordinateur et la


carte (change de couleur selon l’état de la transmission)

• LD3: indique si la carte est alimentée et elle s’allume en


rouge

43
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Interfaçage des périphériques avec un microcontrôleur
ARM Cortex-M0+
I. Côté matériel

• Les boutons de la carte

• B1: bleu, bouton utilisateur (on peut le programmer)

• B2: noir, bouton de reset, permet de réinitialiser la carte


et donc de relancer le programme chargé

44
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Interfaçage des périphériques avec un microcontrôleur
ARM Cortex-M0+
II. Côté logiciel
1) Les librairies CMSIS: Cortex Microcontroller Software Interface Standard
• Des librairies simples d’utilisation pour les développeurs en microcontrôleur
• C’est une interface standard entre tous les constructeurs des microcontrôleurs ARM (ST, Microchip,
Toshiba, Texas Instruments, Analog devices, etc.) et offre donc une approche commune pour gérer ces
microcontrôleurs indépendemment du constructeur

• Pilotes de périphériques (Driver)


• Système d’exploitation temps réel (RTOS)
• Traitement numérique du signal (DSP)
• Réseaux de neurones (NN)

45
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Interfaçage des périphériques avec un microcontrôleur
ARM Cortex-M0+
II. Côté logiciel
1) Les librairies CMSIS: Cortex Microcontroller Software Interface Standard
• Exemple: la librairie «stm32l053xx.h » fait partie du package Driver de CMSIS adapté pour la carte
l053 de ST Microelectronics

• Cette librairie définit par exemple les ports d’E/S sous forme de structure en langage C et permet
d’accéder à leurs registres
//accès au registre MODER du port GPIOB
GPIOB->MODER&=~(0b11<<(4*2));

Microcontrôleur Port GPIOA


Registres
PA0
PA1

PA14
PA15

46
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Interfaçage des périphériques avec un microcontrôleur
ARM Cortex-M0+
II. Côté logiciel
2) HAL: Hardware Abstraction Layer
• C’est une couche d’abstraction offerte par ST pour faciliter le travail du développeur
• Elle cache la complexité du microcontrôleur à l’utilisateur
• Elle réutilise les packages de CMSIS avec une couche qui cache les détails matériels
• Exemple: dans l’exemple ci-dessous, on configure une led sans spécifier les registres en question
• On voit le port d’E/S comme un ensemble de caractéristiques (pin, mode, vitesse, etc.) alors
que dans CMSIS on configure à la main les registres responsables de chaque caractéristique

GPIO_InitStruct.Pin = LD2_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(LD2_GPIO_Port, &GPIO_InitStruct);

47
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Interfaçage des périphériques avec un microcontrôleur
ARM Cortex-M0+
II. Côté logiciel
2) HAL: Hardware Abstraction Layer
• Avantages:
• Elle cache la complexité du microcontrôleur à l’utilisateur
• Portabilité: un projet développé avec HAL pour un microcontrôleur peut toujours fonctionner
pour un autre microcontrôleur
• Inconvénients:
• Elle ne permet pas au développeur d’accéder à tous les registres du microcontrôleur à cause
des fonctions haut-niveau
• Le code des fonctions n’est pas toujours optimisé et peut contenir du code « pas très utile »
consommant inutilement de la mémoire de programme et ralentissant l’exécution
• Elle peut servir pour un projet assez simple pour des débutants mais pas pour des experts qui
veulent optimiser ou implémenter une fonctionnalité complexe

48
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Interfaçage des périphériques avec un microcontrôleur
ARM Cortex-M0+
II. Côté logiciel
3) LL: Low Layer
• C’est une solution proposée par ST pour résoudre les problèmes de HAL
• LL offre une couche qui permet de faciliter le travail des développeurs avec des fonctions bas niveau
qui réutilisent les packages CMSIS
• Avantages: rapide, légère, orientée experts et plus proche du matériel
• Inconvénients: moins de portabilité

49
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Interfaçage des périphériques avec un microcontrôleur
ARM Cortex-M0+
II. Côté logiciel
• Comparaison entre les pilotes (drivers) des GPIOs en HAL et en LL
• LL offre plus de possibilités au développeur lui permettant d’accéder à plus de possibilités de
configurations
• Exemple: les fonctions disponibles pour la gestion des GPIO
Les fonctions LL
Les fonctions HAL
LL_GPIO_DeInit() LL_GPIO_GetPinMode ()
HAL_GPIO_Init() LL_GPIO_Init() LL_GPIO_IsPinLocked ()
HAL_GPIO_DeInit() LL_GPIO_ReadInputPort() LL_GPIO_IsAnyPinLocked()
HAL_GPIO_ReadPin() LL_GPIO_WriteOutputPort() LL_GPIO_ReadInputPort()
HAL_GPIO_WritePin() LL_GPIO_TogglePin() LL_GPIO_IsInputPinSet()
HAL_GPIO_TogglePin() LL_GPIO_LockPin() LL_GPIO_WriteOutputPort()
HAL_GPIO_LockPin() LL_GPIO_SetPinMode() LL_GPIO_ReadOutputPort()
LL_GPIO_SetPinSpeed() LL_GPIO_IsOutputPinSet()
LL_GPIO_SetPinOutputType() LL_GPIO_SetOutputPin()
LL_GPIO_SetPinPull() LL_GPIO_ResetOutputPin()
LL_GPIO_SetAFPin_0_7() LL_GPIO_StructInit()
LL_GPIO_SetAFPin_8_15()
50
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Interfaçage des périphériques avec un microcontrôleur
ARM Cortex-M0+
• Les IDEs (Integrated Development Environments)
• Le microcontrôleur ARM Cortex-M0+ peut être programmé dans plusieurs IDEs tels qu’Arduino (en
utilisant le langage Arduino) et STM32CubeIDE

Un environnement basé sur


Eclipse permettant de programmer
en langage C/C++

51
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Interfaçage des périphériques avec un microcontrôleur
ARM Cortex-M0+
• L’IDE STM32CubeIDE
1) Programmer en langage C
2) Débugger

• Le debugger permet de voir


l’effet de chaque instruction en
langage C sur les registres à
l’intérieur du microcontrôleur
 Utile pour détecter les
instructions à problèmes

• Il est aussi possible de voir


l’équivalent en assembleur de
chaque instruction en C, ce qui
offre plus de possibilités pour
52
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
détecter les bugs
Interfaçage des périphériques avec un microcontrôleur
ARM Cortex-M0+
• L’IDE STM32CubeIDE

• Il offre une interface graphique


pour configurer le
microcontrôleur (pins d’E/S,
horloge, communication, etc.)

• Il génère du code
automatiquement

53
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Interfaçage des périphériques avec un microcontrôleur
ARM Cortex-M0+
• L’IDE STM32CubeIDE

• Possibilité de configurer les pins en utilisant l’interface graphique (non disponible dans l’IDE Arduino par
exemple)

Cette option ne sera pas utilisée dans ce module,


puisqu’on vise à maîtriser la programmation des aspects
basiques des microcontrôleurs

On va toutefois utiliser l’interface graphique pour


configurer des aspects avancés (l’horloge, la
communication série, etc.)

54
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Interfaçage des périphériques avec un microcontrôleur
ARM Cortex-M0+
• L’outil STM32CubeIDE
• Il permet de générer du code en LL et/ou HAL

55
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Interfaçage des périphériques avec un microcontrôleur
ARM Cortex-M0+
• L’outil STM32CubeIDE

Génération du code

• Le code généré par STM32CubeIDE peut être édité en utilisant les fonctions des pilotes CMSIS, HAL ou
LL
56
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Interfaçage des périphériques avec un microcontrôleur
ARM Cortex-M0+
• Quels outils utiliser pour ce module?

• Le module vise à apprendre à programmer l’interfaçage des périphériques avec un microcontrôleur peu
importe son type et ne pas se limiter aux microcontrôleurs de ST ou Arduino, etc.

 il faut donc apprendre à lire la doc technique d’un microcontrôleur et trouver pour chaque fonctionnalité
les registres concernés et les configurer (les microcontrôleurs se ressemblent et offrent globalement les
mêmes fonctionnalités)

 On va utiliser les pilotes CMSIS qui permettent d’accéder directement aux registres, avec quelques recours
aux pilotes LL pour les fonctionnalités plus avancées et longues à configurer

 On va utiliser le logiciel STM32CubeIDE pour générer du code à partir d’une interface graphique de
configuration et éditer ce code en utilisant CMSIS et LL

57
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La documentation
1) Le manuel de référence
• Il contient les informations sur l’architecture du microcontrôleur des
cartes STM32L0x3, et les différents registres à programmer des différents
modules

[Link]
58
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La documentation
1) Le manuel de référence
• Pour chaque module, on y trouve une description de son fonctionnement et
de ses différents registres

59
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La documentation
1) Le manuel de référence
• Pour chaque registre, on a des informations sur:
• La valeur chargée dans le registre après le reset
• Le fonctionnement des différents bits du registre
• L’adresse du registre

60
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La documentation
2) Le pin mapping
• Il permet de voir la correspondance entre les pins et les ports GPIOs associés ainsi que les différentes
fonctions possibles pour chaque pin

[Link]

SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2


La documentation
3) Datasheet
• Elle contient les informations sur le fonctionnement des
différents modules, la description des pins, les
caractéristiques électriques, etc.

[Link]
62
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La documentation
3) Datasheet
• Parmi les informations utiles qu’on peut trouver dans la datasheet STM32L053, les fonctions alternatives
des pins pour savoir configurer des pins en mode PWM, SPI, UART, etc.
• Exemple: il est possible de configurer la PA15 en PWM sur le canal 1 du timer TIM2, si on
sélectionne la fonction alternative AF5

[Link] 63
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La documentation
4) Guide utilisateur des cartes Nucleo 64
• Ce guide contient les détails matériels de la carte
(alimentation, connexions, boutons, leds, etc.)

[Link] 64
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
La documentation
• Les docs sont disponibles sur le site de ST et sur Moodle

C’est ce document qui sera utilisé la plupart du


temps dans ce module

• Pour pouvoir travailler sur n’importe quel microcontrôleur, il faut toujours chercher ce genre
de documents

65
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Remarques sur la suite du cours
• Le cours contient des exemples de code qui vont vous aider dans les TPs

• Les exemples ne peuvent pas couvrir toutes les possibilités du matériel, il faut donc toujours avoir la doc
devant soi pour pouvoir programmer

• Les codes fournis sont souvent accompagnés de captures extraites du manuel de référence décrivant les
registres concernés, ce qui permet de revenir vers la doc pour plus de détails

• Pour réviser pour l’examen, les codes fournis dans le cours ne sont pas à apprendre par cœur mais à
comprendre

66
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques

• Les microcontrôleurs STM32 dispose de nombreuses broches qui peuvent être configurées en GPIO
(General Purpose Input Output, entrée-sortie à usage général).

• Broches bidirectionnelles
• Groupées par 16 pour former des ports (chaque port gère 16 pins)
• 6 ports (GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOH)
• Certains ports gèrent moins de 16 pins

GPIOA: 16 pins (PA0..PA15),


GPIOB : 16 pins (PB0..PB15),
GPIOC : 16 pins (PC0..PC15),
GPIOD : 1 pin (PD2),
GPIOE : 0 pins,
GPIOH : 2 pins (PH0 et PH1)

 Un total de 51 pins à usage général

67
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les pins Arduino

• Les microcontrôleurs STM32 dispose de pins compatibles Arduino qui permettent de connecter des
shields (extensions) qui ont été développées pour Arduino

68
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques

Pour pouvoir communiquer avec une


pin, il faut accéder aux registres de son
port
Microcontrôleur Port GPIOA
Exemple: pour allumer une led sur la pin
PA14, il faut accéder à un registre du
Registres
PA0 port GPIOA
PA1
 d’un point de vue logiciel, un port est
un ensemble de registres
PA14
PA15

69
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques

• Ecrire sur une pin en sortie


• Pour envoyer un signal vers une sortie, il faut écrire la valeur de ce signal dans le registre ODR

• Puisque chaque port gère au maximum 16 pins et que le microcontrôleur est constitué de registres
de 32 bits, seuls les 16 bits de poids faibles de ce registre sont utilisés

70
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques

• Ecrire sur une pin en sortie


• Pour envoyer un signal vers une sortie, il faut écrire la valeur de ce signal dans le registre ODR
• Exemple 1:
• Ecrire la valeur 1 sur la pin PA9  il faut
OU écrire 1 à la position OD9 du registre ODR
0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
• Pour ne pas toucher les autres positions
d’ODR et mettre seulement le bit OD9 à 1,
=
il faut appliquer l’opération OU 0 sur les
1 positions à ne pas changer et OU 1 sur la
position OD9 pour la mettre à 1.

 GPIOA->ODR = GPIOA->ODR |
(0b1000000000);

 GPIOA->ODR |= (1<<9);
<< : opérateur de décalage binaire à gauche
71
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques

• Ecrire sur une pin en sortie


• Pour envoyer un signal vers une sortie, il faut écrire la valeur de ce signal dans le registre ODR
• Exemple 1:
• Ecrire la valeur 1 sur la pin PA9
 GPIOA->ODR |= (1<<9);

72
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques

• Ecrire sur une pin en sortie


• Pour envoyer un signal vers une sortie, il faut écrire la valeur de ce signal dans le registre ODR
• Exemple 2:
• Ecrire la valeur 0 sur la pin PA9  il faut
ET écrire 0 à la position OD9 du registre ODR
1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1
• Pour ne pas toucher les autres positions
d’ODR et mettre seulement le bit OD9 à 1, il
= faut appliquer l’opération ET 1 sur les
0 positions à ne pas changer et ET 0 sur la
position OD9 pour la mettre à 0.

 GPIOA->ODR = GPIOA->ODR &


(0b11111111111111111111110111111111);
 GPIOA->ODR &=
~(0b00000000000000000000001000000000);
~: opérateur complément à 1
GPIOA->ODR &= ~(1<<9);
73
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques

• Ecrire sur une pin en sortie


• Pour envoyer un signal vers une sortie, il faut écrire la valeur de ce signal dans le registre ODR
• Exemple 2:
• Ecrire 0 sur la pin PA9
GPIOA->ODR &=~(1<<9);

Attention:
GPIOA->ODR | = (0<<9) ne permet pas de mettre le bit 9 à zéro. Elle ne change rien sur le
registre ODR du GPIOA puisque 0<<9 = 0 et l’opération « ou zéro » ne change rien

74
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques

• Lire une pin en entrée


• Le signal (0 ou 1 en binaire) en entrée d’une pin s’écrit automatiquement dans le registre IDR
correspondant

• Puisque chaque port gère au maximum 16 pins et que le microcontrôleur est constitué de registres
de 32 bits, seuls les 16 bits de poids faibles de ce registre sont utilisés

75
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques

• Lire une pin en entrée

• Lire la valeur d’une entrée


• Exemple lire la valeur de la pin PC12
if (GPIOC->IDR & (1<<12)) { /*cette expression donne la valeur vrai (différent
de zéro) seulement si la valeur du bit ID12 est à 1*/
…..
}
else {……} 76
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques

• Choisir le mode de fonctionnement d’une pin (Entrée, Sortie, etc.)


• Le mode de chaque pin dans un port est représenté par deux bits dans le registre MODER de ce port
Exemple: Pour configurer une pin connectée sur le port GPIOA en sortie, il faut aller dans le registre
MODER du port GPIOA

77
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques

• Choisir le mode de fonctionnement d’une pin

• Exemple: Configurer la pin 13 du registre GPIOA


comme pin de sortie (pin PA13)

GPIOA-> MODER &=~(0b11 <<(2*13)); /*mettre à


zéro les deux bits de MODE13*/

GPIOA-> MODER |=(0b01 <<(2*13)); /*mettre à 01


les deux bits de MODE13*/

Explications:
• La valeur de (0b11 <<(2*13)) est 00001100000000000000000000000000 en binaire (11décalés de 26 position à gauche)
• ~(0b11 <<(2*13)) est le complément à 1 de (0b11 <<(2*13)) et vaut donc 11110011111111111111111111111111 en
binaire (tous les 32 bits sont à 1 sauf les 26 et 27)
• & est l’opération AND bit à bit, et | est l’opération OR bit à bit
• GPIOA-> MODER &=~(0b11 <<(2*13)); est équivalent à GPIOA-> MODER = GPIOA-> MODER & (~(0b11 <<(2*13)));
78
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques

• Choisir le mode de fonctionnement d’une pin

• Exercice
• Configurer la pin PA5 en entrée

79
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques

• Choisir le mode de fonctionnement d’une pin

• Solution
• Configurer la pin PA5 en entrée

GPIOA-> MODER &=~(0b11 <<(2*5));

80
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques

• Configuration des résistances de tirage (pull-up et pull-down)


• Si une pin d’un microcontrôleur est configurée comme entrée et n’est pas connectée, elle est à l’état flottant,
la valeur qui peut être lue sur cette entrée est une valeur flottante qui varie en continu entre 0 et 1.
• Exemple: un bouton poussoir

Microcontrôleur Microcontrôleur
Microcontrôleur
Pin 2 Bouton appuyé Bouton relâché
Pin 2 Pin 2

5V
5V 5V

La valeur lue sur la Pin 2 est 1 La valeur lue sur la Pin 2 peut être 0 ou 1
Problème: un bouton relâché peut être interprété comme appuyé
Solution: utilisation des résistances de tirage pour fixer la valeur de l’entrée si elle n’est pas connectée
81
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques
• Lecture de pins
• Les entrées flottantes
• Utilisation d’une résistance de tirage pull-up (quand le bouton est relâché, la valeur de Pin 2 est 1)
5V 5V

Microcontrôleur Microcontrôleur

Pin 2 Pin 2

Bouton relâché Bouton appuyé

GND GND

La valeur lue sur la Pin 2 est 1 La valeur lue sur la Pin 2 est 0
Si le bouton est appuyé, le courant passe
Si le bouton est relâché, il n’y a pas de
entre la pin2 et la masse. La pin 2 se trouve
courant qui passe dans la pin2, la tension
connectée à la masse  la tension lue sur la
entre la pin2 et la masse est la même qu’entre
pin2 est 0V
l’alimentation et la masse  la tension lue sur
la pin2 est 5V 82
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques

• Lecture de pins
• Les entrées flottantes
• Utilisation d’une résistance de tirage pull-down (quand le bouton est relâché, la valeur de Pin 2 est 0)
5V 5V

Microcontrôleur
Microcontrôleur Bouton appuyé
Bouton relâché
Pin 2
Pin 2

GND
GND
La valeur lue sur la Pin 2 est 0 La valeur lue sur la Pin 2 est 1
Si le bouton est relâché, il n’y a pas de Si le bouton est appuyé, le courant passe
courant qui passe dans la pin2. La pin 2 se entre la pin2 et la masse. La pin 2 se trouve
trouve connectée à la masse  la tension lue connectée à l’alimentation  la tension lue
sur la pin2 est 0V sur la pin2 est 5V
83
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques

• Configuration des résistances de tirage (pull-up et pull-down)

• Le Cortex-M0+ permet de configurer des résistances de tirages internes pour fixer les valeurs par défaut
des entrées (on n’a pas besoin d’ajouter des résistances externes)

Remarque: sur Arduino Uno/Mega: seule la


résistance en pull-up peut être interne, pour le
pull-down il faut ajouter une résistance externe

Utilisée dans le cas où on a une résistance externe

84
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques

• Configuration des résistances de tirage (pull-up et pull-down)

5V
5V
Microcontrôleur
Microcontrôleur Bouton appuyé
Bouton relâché
Pin 2
Pin 2

GND
GND
La valeur lue sur la Pin 2 est flottante 85
La
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
valeur lue sur la Pin 2 est 1
Les E/S génériques

• Configuration des résistances de tirage (pull-up et pull-down)

En configuration pull-up, le bouton doit


être connecté entre la pin et la masse

5V 5V

Microcontrôleur Microcontrôleur

Pin 2 Pin 2

Bouton appuyé
Bouton relâché

GND GND
La valeur lue sur la Pin 2 est 1 La valeur lue sur la Pin 2 est 0 86
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques

• Configuration des résistances de tirage (pull-up et pull-down)

En configuration pull-down, le bouton doit


être connecté entre la pin et l’alimentation

5V
5V 5V

Microcontrôleur Bouton appuyé Microcontrôleur


Bouton relâché
Pin 2 Pin 2

GND GND

La valeur lue sur la Pin 2 est 0 La valeur lue sur la Pin 2 est 1 87
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques

• Activation d’un port GPIO


• Pour réduire la consommation d’énergie, plusieurs horloges du microcontrôleur sont activables à la demande
• Un port GPIO qui n’a pas son horloge activée ne peut pas agir
sur les composants connectés sur aucune de ces broches
• Pour activer une horloge pour un port GPIO, il faut passer par le
RCC (Reset and clock control). Ce contrôleur a un registre
IOPENR qui permet d’activer l’horloge pour les ports GPIO

• Exemple: activation de l’horloge pour GPIOB en utilisant la


librairie « STM32l0xx.h”
RCC->IOPENR|=RCC_IOPENR_GPIOBEN; 88
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques

• Exemple1:
• Créer un programme qui allume la led branchée sur la broche 5 du port A (led
verte sur la carte ) quand le bouton USER est appuyé (bouton qui est branché sur
la broche 13 du port C) et l’éteindre sinon.
#include "STM32l0xx.h"

int main (void)


{/*activation des horloges pour le port GPIOA et le port GPIOC*/
RCC->IOPENR|=RCC_IOPENR_GPIOAEN|RCC_IOPENR_GPIOCEN;

GPIOA->MODER&=~(0b11<<(5*2));
GPIOA->MODER|=(0b01<<(5*2));

GPIOC->MODER&=~(0b11<<(13*2));

while(1)
{if(!(GPIOC->IDR & (1<<13))){ GPIOA->ODR|=(1<<5);}
else {GPIOA->ODR&=~(1<<5);}
}
}
89
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques

• Exemple2:
• Le bouton USER est remplacé par un bouton externe connecté sur la pin PC8 Microcontrôleur
qu’on configure en pull-down

#include "STM32l0xx.h" PC8

int main (void)


{
/*activation des horloges pour le port GPIOA et le port GPIOC*/
GND
RCC->IOPENR|=RCC_IOPENR_GPIOAEN|RCC_IOPENR_GPIOCEN;

GPIOA->MODER&=~(0b11<<(5*2));
GPIOA->MODER|=(0b01<<(5*2));
GPIOC->MODER&=~(0b11<<(8*2));
GPIOC->PUPDR&=~(0b11<<(8*2));//no-pull
GPIOC->PUPDR|=(0b10<<(8*2));//pull-down
while(1)
{ if (GPIOC->IDR & (1<<8)){//si le bouton vient d’être appuyé
GPIOA->ODR|=(1<<5);}
else {GPIOA->ODR&=~(1<<5);}
90
}} SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques
• Remarque:
• Le logiciel STM32CubeIDE permet de générer du code à
partir d’une interface graphique
• Parmi le code généré automatiquement on a le code pour
l’activation des horloges des ports relatifs à la led et le
bouton de la carte (les ports GPIOA et les GPIOC), et le
code qui permet de les configurer en entrée/ sortie

91
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques
• Remarque:
• Le logiciel STM32CubeIDE permet de générer du code à
partir d’une interface graphique
• Parmi le code généré automatiquement on a le code pour
l’activation des horloges des ports relatifs à la led et le
bouton de la carte (les ports GPIOA et les GPIOC), et le
code qui permet de les configurer en entrée/ sortie

 On n’a pas besoin d’écrire le code suivant puisqu’il est déjà


fait par MX_GPIO_Init:
RCC->IOPENR|=RCC_IOPENR_GPIOAEN|RCC_IOPENR_GPIOCEN;

GPIOA->MODER&=~(0b11<<(5*2));
GPIOA->MODER|=(0b01<<(5*2));

GPIOC->MODER&=~(0b11<<(13*2));

92
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques
• Remarque:

• Attention: Si on a besoin de connecter un composant sur une pin du GPIOB, par exemple, sans utiliser l’interface
graphique, il faut activer son horloge à la main car le code d’initialisation généré par le logiciel n’active pas GPIOB
par défaut.

93
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2

Vous aimerez peut-être aussi