Académique Documents
Professionnel Documents
Culture Documents
STM32 GPIO
DAMERGI Emir
2018/19
SOC Architecture
Un “System On Chip” (ou même un PC) possède l’architecture suivante:
Processeur BUS
Peripheral Interface
@ Register
i
i+4
i+8
Processor
….
3
SOC Architecture: memory map
Chaque mémoire ou périph. Occupe une zone d’adresses précise dans
l’espace d’adressage du processeur: MEMORY MAP
0 Base Address
Adr_x
RAM L’adresse à partir de
Adr_y
FLASH laquelle est placée
Adr_z
GPIO x
une mémoire ou un
Processor GPIO y
périph est appelée
Periph x
adresse de base
(Base Address)
max
4
SOC Architecture: memory map
Chaque registre faisant partie d’un périph du SOC possède un offset
(déplacement) précis et fixe.
Base Address
0 Offset * Registre
Adr_x
0 Reg_a
RAM Adr_y 4 Reg_b
FLASH Adr_z 8 Reg_c
GPIO x …. ….
….. …
Processor GPIO y
Periph x
L’adresse d’un registre i d’un periph x =
Base Address (Periph i)+ Offset (Reg i)
Adr (Reg_b de GPIO x) = Adr_z + 4
max
* : for 32 bits registers
5
Architecture du STM32 – F1 (1)
Cortex-M3 AHB: Advanced High Bus – APB : Advanced Peripheral Bus
USART 2/6
RCC ADC 3
Ethernet TIM1/8/9/10/11
USB SPI1
GPIO A/B/C/…/I
USART 1
ADC 1/2
6
STM32 – F1 : Memory Map
Chaque Interface de Périphérique occupe
une plage d’adresse commençant à partir Chaque Registre faisant partie d’un
d’une adresse de base précise périphérique possède un offset
7
STM32 Architecture overview
RCC
8
RCC: Reset & Clock Circuit
Par défaut, après le démarrage du mc, toutes les interfaces de périphériques sont
désactivés à l’exception du RCC (Reset & Control Clock) Optimisation de la
consommation.
En fait, c’est son rôle d’activer les interfaces d’E/S par mise à 1 d’un signal ENABLE
Chaque interface de périphérique ayant sont propre signal d’activation.
9
Le RCC: Reset Control Clock
0x4002 1014
0x4002 1018
0x4002 101C
10
RCC: RCC_APB2 ENR
Chacun des 32 bits étant directement connecté à l’une des interfaces d’E/S.
Une mise à « 1 » du bit active l’interface E/S associé. Un « 0 » le désactive.
RCC_APB2 ENR
31 30 .. .. .. .. .. .. 1 9 8 7 6 5 4 3 2 1 0
0
GPIOG EN
GPIOH EN
GPIOD EN
GPIOC EN
GPIOB EN
GPIOA EN
GPIOE EN
GPIOF EN
……
……
……
……
……
……
……
……
……
……
APB2
GPIO G
GPIO C
GPIO A
11
STM32 Architecture overview
GPIO:
General Purpose
Input Output
12
GPIOS: General Purpose Inputs Outputs
Each pin is connected to 2
Regs(IDR / ODR)
pins
GPIOx GPIOA
Processor
(Cortex_M)
Microcontroller Pins
GPIOx
Processeur GPIOx
Pins du
microcontrôleur
Interface Interface
E/S E/S
GPIOx
I/O Signal 1
Peripheral …….
I/O signal i
GPIOx
I/O Signal 1
Peripheral …….
I/O signal i
• Chaque signal d’E/S d’un périph. peut communiquer avec l’extérieur à travers un
pin GPIO parmi plusieurs (2 à 3) possibles. Le choix se fait par programmation.
• Chaque pin GPIO peut être connecté à un parmi plusieurs signaux E/S.
16
GPIOs: General Purpose Inputs Outputs
Chaque port GPIO contient :
• Un registre d’entrée (IDR: Input Data Register)
• Un registre de sortie (ODR: Output Data Register)
• Des registres de configuration.
• 16 ports E/S (1 bit) permettant la connexion avec les pins du microcontrôleur
IDR
bi
Interface
bi Pins du
E/S
microcontrôleur
BRR BSRR
GPIO: Structure d’un port (1 bit) E/S
Chaque bit (cellule) E/S d’un GPIO possède la structure suivante.
Chaque « 1 bit port » E/S peut être configuré en un des 4 modes possibles.
Modes GPIO: Output
Configuration d’un bit en Sortie: On retrouve au niveau du Pin, le niveau de tension
correspondant à l’état binaire du bit bi du registre de sortie ODR.
Celui-ci est imposé par le processeur
IDR
bi
CONFIG
Interface OUTPUT
bi Pins du
E/S microcontrôleur
BRR BSRR
Modes GPIO: Input
Configuration d’un bit en Entrée: On retrouve au niveau du bit bi du registre d’entrée
IDR, le niveau logique correspondant à la tension appliquée au pin.
Celui-ci peut être lu par le processeur
IDR
bi
CONFIG
Interface INPUT
bi Pins du
E/S microcontrôleur
BRR BSRR
Modes GPIO: Alternate Function
Configuration en ALTERNATE FUNCTION: Dans cette configuration, le pin est
directement relié à l’un des signaux d’une interface E/S (tel que USART, ETHERNET,..)
IDR
bi
CONFIG
Interface Pins du
bi
E/S microcontrôleur
ALTERNATE
FUNCTION
BRR BSRR
Rq: Toute connexion des Interfaces E/S avec l’extèrieur se fait par le biais d’un pin
de l’un des ports GIPO .
Modes GPIO: Analog
Configuration en ANALOG mode: Dans cette configuration, le pin est directement
connecté aux interfaces E/S analogiques (ADC/DAC).
IDR
bi
CONFIG
Interface Pins du
bi
E/S microcontrôleur
Analog mode
ADC/DAC BRR BSRR
GPIOS: General Purpose Inputs Outputs
Chaque port GPIO (16 BITS E/S) contient :
• Un registre d’entrée (IDR: Input Data Register)
• Un registre de sortie (ODR: Output Data Register)
• Des registres de configuration. 16 BITS E/S
IDR
bi
CONFIG
ALTERNATE FUNCTION
(To I/O Interfaces)
To Processor
INPUT
From Processor
OUTPUT
Analog mode
ALTERNATE FUNCTION (From DAC)
(From I/O Interfaces)
Chaque « 1 bit port » E/S peut être configuré en un des 4 modes possibles.
GPIO: Cellule (Bit) E/S
En plus des modes, il est également possible de configurer la structure électrique
même à partir des registres de configuration:
Résistances
Pull-up/Pull-down
Transistors
N-MOS/P-MOS
GPIO: Configuration électrique
1. Configuration des résistances pull-up/pull-down
Pull UP
Pull Down
No Pull
GPIO: Configuration électrique
1. Configuration des Transistors N-MOS/P-MOS
Push Pull
Ces configurations
ne sont valables que
si le Pin est en mode
OUTPUT
Open drain
Configuration des GPIOs: Fréquence
Quand un « port 1 bit » est configuré en sortie, il est possible de choisir la
fréquence avec laquelle il peut commuter d’un niveau logique à un autre.
28
Configuration des GPIOs: valeurs
Les différentes configurations possibles sont données dans le tableau.
A l’initialisation, tous les IO sont configurés en ‘Input Floating’.
29
Configuration des GPIOs: CRL/CRH
La configuration de chacun des 16 bits d’un GPIO dépend d’une valeur de 4 bits
16*4 = 64 bits = 2 registres de 32 bits : CRL/CRH
30
GPIOS: Memory Map
31
Programmation GPIO: Accès direct aux registres
Ainsi, pour programmer un Pin (en lecture ou écriture) d’un GPIO, il
faut suivre les étapes suivantes:
3 Configurer le Pin
RCC_APB2ENR
31 30 .. .. .. .. .. .. .. .. 8 7 6 5 4 3 2 1 0
GPIOG EN
GPIOH EN
GPIOD EN
GPIOC EN
GPIOB EN
GPIOA EN
GPIOE EN
GPIOF EN
GPIOI EN
AFIOEN
……
……
……
……
……
……
……
……
……
……
0 0 0 … … … … … … … 0 0 0 0 1 0 0 0 0 = 0x00000010
*RCC_APB2ENR |= 0x00000010;
Exemple: solution
0001 = 0x01
à partir de la
position 4.
Éteindre Led: 0 0 . . .. … 0 0 0 0 0 0 0 0 0 0 0 0
0
pin 9 (ODR/GPIOC) = 0
While(1) {
*GPIOC_ODR |= 0x01 << 9; //PC9 = 1 (Led ON)
Delay();
*GPIOC_ODR &= ~ ( (uint32_t) 0x01 << 9); // PC9 = 0 (Led OFF)
Delay(); }
Masquage logique: Inconvénient
variable = *Registre;
variable |=0x00000080
*Registre variable;
*Registre |= 0x0000080;
*Registre &=0xFFFFFFBF; variable = *Registre;
variable &=0xFFFFFFBF;
*Registre variable;
BSRR bi BRR bi
OR
AND
ODR bi
ODR bi
3 3 . . .. 1 1 1 1 9 8 7 6 5 4 3 2 1 0
1 0 . . 3 2 1 0 *BSRR= 0x000000200;
b b b b b 1 b b b b b b b b b ou
3 3 . . .. . 1 1 1 8 7 6 5 4 3 2 1 0
1 0 2 1 0
*BSRR= 0x01 <<9;
While(1) {
*GPIOC_BSRR = 0x01 << 9; //PC9 = 1 (Led ON) BSRR, BRR:
Delay(); Hardwired Mask
*GPIOC_BRR = 0x01 << 9; // PC9 = 0 (Led OFF)
Delay(); }
Exemple: Appui + Contrôle led
RCC_APB2ENR
31 30 .. .. .. .. .. .. .. .. 8 7 6 5 4 3 2 1 0
GPIOG EN
GPIOH EN
GPIOD EN
GPIOC EN
GPIOB EN
GPIOA EN
GPIOE EN
GPIOF EN
GPIOI EN
AFIOEN
……
……
……
……
……
……
……
……
……
……
0 0 0 … … … … … … … 0 0 0 0 1 0 1 0 0 = 0x00000014
*RCC_APB2ENR |= 0x00000014;
Exemple: solution
0010 = 0x02
à partir de la
position 4.
0100 = 0x04
à partir de la
position 0.
// Lire Bouton
Uint8_t etat_bouton = *GPIOA_IDR & 0x01 ;
Exemple: solution
4 Imposer (ou lire) la valeur d’un bit (Pin)
Éteindre Led: 0 0 . . .. … 0 0 0 0 0 0 0 0 0 0 0 0
0
pin 9 (ODR/GPIOC) = 0
// Lire Bouton
#define GPIOC_CRH (uint32_t*) 0x40011004
Uint8_t etat_bouton = *GPIOA_IDR & 0x01;
#define GPIOC_BSRR (uint32_t*) 0x40011010
If (etat_bouton==0)
#define GPIOC_BRR (uint32_t*) 0x40011014
*GPIOC_BRR = 0x200;
else
#define GPIOA_CRL (uint32_t*) 0x40010800
*GPIOC_BSRR = 0x200;
#define GPIOA_IDR (uint32_t*) 0x40010800
}