Cours 1
Cours 1
CHIRAZ TRABELSI
trabelsi@[Link]
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
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
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
8
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Structure interne d’un µProcesseur
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
• 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
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
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
• 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
• Les microprocesseurs ont besoin d’aller plus vite pour gérer plusieurs applications à la fois
• 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
• STMicroelectronics
• Exemples de microcontrôleurs: ST6, STM8, STM32
• 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
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.
24
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Exemple de STM32L053
25
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Exemple de STM32L053
26
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Comparaison
• 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
• 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
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
• 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
• 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
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)
• 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
• 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
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
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
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));
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
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
• 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)
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]
[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
• 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
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
69
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques
• 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
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
72
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques
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
• 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
77
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques
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
• 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
• Solution
• Configurer la pin PA5 en entrée
80
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques
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
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
• 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)
84
SYS3046-Microcontrôleurs : périphériques et applications – 3A-S2
Les E/S génériques
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
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
5V
5V 5V
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
• 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"
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
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
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