0% ont trouvé ce document utile (0 vote)
290 vues58 pages

Introduction aux Microcontrôleurs

Transféré par

Ali Amara
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)
290 vues58 pages

Introduction aux Microcontrôleurs

Transféré par

Ali Amara
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

NSY107

Cours 1 Introduction aux microcontrôleurs

Matthias Puech

Master 1 SEMS — Cnam

6 mars 2018

1 / 29
Cours 1 Introduction aux microcontrôleurs

Introduction

Présentation des microcontrôleurs

Outils de développement

Documentation et code disponible

2 / 29
NSY107 : Thématiques abordées

Un cours pratique sur la communication embarquée

3 / 29
NSY107 : Thématiques abordées

Un cours pratique sur la communication embarquée


• programmation bare-metal sur microcontrôleurs
• architecture machine
• schémas de compilation
• notion de pilote de périphérique
• protocoles client-serveur bas niveau (UART, I2C, CAN. . .)

3 / 29
Infos pratiques

• Matthias Puech [Link]@[Link]


• Page web
[Link]
• 15 séances, et pour chacune :
É 1h–2h de cours

É 1h–2h de TP

4 / 29
Infos pratiques

• Matthias Puech [Link]@[Link]


• Page web
[Link]
• 15 séances, et pour chacune :
É 1h–2h de cours

É 1h–2h de TP

Evaluation
• N = max(TP noté, examen session 1) si N > 10
• N = examen session 2 sinon.

4 / 29
Pour commencer : quiz !

• citer 2 compilateurs natifs ? 2 machines virtuelles ?

5 / 29
Pour commencer : quiz !

• citer 2 compilateurs natifs ? 2 machines virtuelles ?


• qu’est-ce un ARM ? un RISC ? un registre ?

5 / 29
Pour commencer : quiz !

• citer 2 compilateurs natifs ? 2 machines virtuelles ?


• qu’est-ce un ARM ? un RISC ? un registre ?
• qu’est-ce qu’une interruption ?

5 / 29
Pour commencer : quiz !

• citer 2 compilateurs natifs ? 2 machines virtuelles ?


• qu’est-ce un ARM ? un RISC ? un registre ?
• qu’est-ce qu’une interruption ?
• que fait l’option -o de GCC ?

5 / 29
Pour commencer : quiz !

• citer 2 compilateurs natifs ? 2 machines virtuelles ?


• qu’est-ce un ARM ? un RISC ? un registre ?
• qu’est-ce qu’une interruption ?
• que fait l’option -o de GCC ?
• qu’est-ce que le scheduler dans un OS ? un driver ?

5 / 29
Pour commencer : quiz !

• citer 2 compilateurs natifs ? 2 machines virtuelles ?


• qu’est-ce un ARM ? un RISC ? un registre ?
• qu’est-ce qu’une interruption ?
• que fait l’option -o de GCC ?
• qu’est-ce que le scheduler dans un OS ? un driver ?
• quel est le type d’un tableau de flottants/fonctions en C ?

5 / 29
Pour commencer : quiz !

• citer 2 compilateurs natifs ? 2 machines virtuelles ?


• qu’est-ce un ARM ? un RISC ? un registre ?
• qu’est-ce qu’une interruption ?
• que fait l’option -o de GCC ?
• qu’est-ce que le scheduler dans un OS ? un driver ?
• quel est le type d’un tableau de flottants/fonctions en C ?
• combien vaut (1 « 4) | (1 « 7) ?

5 / 29
Pour commencer : quiz !

• citer 2 compilateurs natifs ? 2 machines virtuelles ?


• qu’est-ce un ARM ? un RISC ? un registre ?
• qu’est-ce qu’une interruption ?
• que fait l’option -o de GCC ?
• qu’est-ce que le scheduler dans un OS ? un driver ?
• quel est le type d’un tableau de flottants/fonctions en C ?
• combien vaut (1 « 4) | (1 « 7) ?
• comment écrit-on une cible et ses dépendances dans un
Makefile ?

5 / 29
Pour commencer : quiz !

• citer 2 compilateurs natifs ? 2 machines virtuelles ?


• qu’est-ce un ARM ? un RISC ? un registre ?
• qu’est-ce qu’une interruption ?
• que fait l’option -o de GCC ?
• qu’est-ce que le scheduler dans un OS ? un driver ?
• quel est le type d’un tableau de flottants/fonctions en C ?
• combien vaut (1 « 4) | (1 « 7) ?
• comment écrit-on une cible et ses dépendances dans un
Makefile ?
• qu’est-ce que UART ? I2C ? CAN ?

5 / 29
Pour commencer : quiz !

• citer 2 compilateurs natifs ? 2 machines virtuelles ?


• qu’est-ce un ARM ? un RISC ? un registre ?
• qu’est-ce qu’une interruption ?
• que fait l’option -o de GCC ?
• qu’est-ce que le scheduler dans un OS ? un driver ?
• quel est le type d’un tableau de flottants/fonctions en C ?
• combien vaut (1 « 4) | (1 « 7) ?
• comment écrit-on une cible et ses dépendances dans un
Makefile ?
• qu’est-ce que UART ? I2C ? CAN ?
• qu’est-ce que ASK, FSK, PSK, QPSK ?

5 / 29
Cours 1 Introduction aux microcontrôleurs

Introduction

Présentation des microcontrôleurs

Outils de développement

Documentation et code disponible

6 / 29
Cours 1 Introduction aux microcontrôleurs

Introduction

Présentation des microcontrôleurs

Outils de développement

Documentation et code disponible

7 / 29
Qu’est-ce qu’un microcontrôleur ?

Attention
Aujourd’hui, séance principalement consacrée au name-dropping.

8 / 29
Qu’est-ce qu’un microcontrôleur ?

Attention
Aujourd’hui, séance principalement consacrée au name-dropping.

Microcontrôleur (µC, uC, MCU)


Circuit intégré rassemblant les éléments essentiels d’un ordinateur
• unité de calcul et de contrôle (le coeur)
• mémoire vive
• périphériques
(ex : port série, timers, DMA, flash. . .)
• entrées/sorties
(ex : convertisseurs analogique ↔ numérique (ADC/DAC))

8 / 29
Exemples d’utilisation

Electroménager & Internet of Things


• montres connectées, bracelets santé
• capteurs domotiques, four, machine à laver, thermostat. . .
• smartphones, tablettes

Automobile, Aeronautique
• une voiture moderne intègre ≈30 MCUs
• logiciel critique dans l’avionique (cf. reste du master)

Un foyer moyen possède 4 CPUs et 30 MCUs.

9 / 29
Quelques MCUs fameux dans leur habitat naturel
• Microchip PIC16 (1990, 8 bits, 1MHz, quelques registres)

• Microchip PIC12 (1990, très utilisé en DIY)


• Atmel AVR (2000, 8/16 bits, base des Arduino)

10 / 29
Quelques MCUs fameux dans leur habitat naturel
• ARM (2000) : Coeurs communs, différents constructeurs (ST,
Texas Instruments, Microchip. . .)

• SoC Freescale, Broadcom, TI etc. (2010, Raspberry Pi)

1GHz, 64 bits, RAM 512 Mo

10 / 29
Le MCU, un compromis

L’intérêt
• forte intégration (une puce intègre toutes les fonctions)
• faible consommation électrique (1–500mW)
• faible coût (0.10–10€)
• généricité (par rapport au silicium dédié)

11 / 29
Le MCU, un compromis

L’intérêt
• forte intégration (une puce intègre toutes les fonctions)
• faible consommation électrique (1–500mW)
• faible coût (0.10–10€)
• généricité (par rapport au silicium dédié)

Les limitations
• peu de capacité de calcul (1–200 MHz)
• très faible stockage (1–512 Ko RAM, 1K–1M flash)

11 / 29
Un MCU n’est pas :

• un CPU (Central Processing Unit)


(ex : Intel i7, Apple A11, . . .)
É puissance de calcul supérieure (GHz)

É pas de mémoire embarquée (quelques registres)

É pas de périphériques embarqués (bus externes)

• un FPGA (Field-Programmable Gate Array)


(ex : Xilinx, Altera. . .)
É circuit intégré reconfigurable

É grand nombre de portes logiques généralistes

É “programmation” en Verilog/VHDL

12 / 29
Protocoles de communication embarqués

Toute communication entre le coeur et ses périphériques s’établit


selon un protocole (une langue commune)
Interne
bus de données : unité de calcul ↔ RAM ↔ DMA,

Externe
communication avec puces externes ; communication inter-MCU
(ex : réseau de capteurs)

Architectures
symétrique, en réseaux, client-serveur. . .
en général : couches de nombreux protocoles

Exemple
UART, SPI, I2C, CAN, USB. . .

13 / 29
La famille des ARM Cortex
ARM architecture qui spécifie (notamment) un jeu
d’instructions RISC, l’organisation de la mémoire,
modèle d’exécution. . .
Différentes versions du standard : ARMvX-M

14 / 29
La famille des ARM Cortex
ARM architecture qui spécifie (notamment) un jeu
d’instructions RISC, l’organisation de la mémoire,
modèle d’exécution. . .
Différentes versions du standard : ARMvX-M
Cortex Famille de coeurs physiques
vendus aux fabricants de silicone
Cortex-A pour Application (ex : smartphones)
Cortex-R pour Real-time
(temps d’exécution déterministe)
Cortex-M pour eMbedded (faible consommation)

14 / 29
La famille des ARM Cortex
ARM architecture qui spécifie (notamment) un jeu
d’instructions RISC, l’organisation de la mémoire,
modèle d’exécution. . .
Différentes versions du standard : ARMvX-M
Cortex Famille de coeurs physiques
vendus aux fabricants de silicone
Cortex-A pour Application (ex : smartphones)
Cortex-R pour Real-time
(temps d’exécution déterministe)
Cortex-M pour eMbedded (faible consommation)
M0 ARMv6-M, petit et pas
cher
M3 ARMv7-M, *,/ hardware,
plus d’instructions
M4 ARMv7E-M, FPU, DSP

14 / 29
La famille des ARM Cortex
ARM architecture qui spécifie (notamment) un jeu
d’instructions RISC, l’organisation de la mémoire,
modèle d’exécution. . .
Différentes versions du standard : ARMvX-M
Cortex Famille de coeurs physiques
vendus aux fabricants de silicone
Cortex-A pour Application (ex : smartphones)
Cortex-R pour Real-time
(temps d’exécution déterministe)
Cortex-M pour eMbedded (faible consommation)
M0 ARMv6-M, petit et pas
cher
M3 ARMv7-M, *,/ hardware,
plus d’instructions
M4 ARMv7E-M, FPU, DSP
Licences Cortex-M4
Atmel, STMicroelectronics, NXP, Texas Instruments
14 / 29
La famille des MCU STMicroelectronics STM32
STM32L0 Cortex M0+, 32MHz, 8Ko SRAM, 32-64Ko flash
STM32F1 Cortex M1, 24-72MHz, 4-96Ko SRAM, 16-1024Ko
STM32F3 Cortex M4 + FPU, 72MHz, 16-40Ko SRAM, 64-256Ko
. . .STM32F7 ARM Cortex-M7F, 216MHz, 512-1024Ko RAM, . . .

15 / 29
La famille des MCU STMicroelectronics STM32
STM32L0 Cortex M0+, 32MHz, 8Ko SRAM, 32-64Ko flash
STM32F1 Cortex M1, 24-72MHz, 4-96Ko SRAM, 16-1024Ko
STM32F3 Cortex M4 + FPU, 72MHz, 16-40Ko SRAM, 64-256Ko
. . .STM32F7 ARM Cortex-M7F, 216MHz, 512-1024Ko RAM, . . .
Chaque famille contient divers périphériques (E/S, calcul, . . .) :
• 2xADC multiplexé, 2xDAC 12/16 bits
• USART, SDIO, I2C, SPI, USB, . . .
• EEPROM, flash, ROM. . .
• DMA, timers, watchdogs, RTC, RNG. . .

15 / 29
La famille des MCU STMicroelectronics STM32
STM32L0 Cortex M0+, 32MHz, 8Ko SRAM, 32-64Ko flash
STM32F1 Cortex M1, 24-72MHz, 4-96Ko SRAM, 16-1024Ko
STM32F3 Cortex M4 + FPU, 72MHz, 16-40Ko SRAM, 64-256Ko
. . .STM32F7 ARM Cortex-M7F, 216MHz, 512-1024Ko RAM, . . .
Chaque famille contient divers périphériques (E/S, calcul, . . .) :
• 2xADC multiplexé, 2xDAC 12/16 bits
• USART, SDIO, I2C, SPI, USB, . . .
• EEPROM, flash, ROM. . .
• DMA, timers, watchdogs, RTC, RNG. . .

Applications
• DSP audio (ADC/DAC)
• contrôle de moteur, prototypage généraliste
(ex : Arduino, cartes Nucleo/Discovery)

15 / 29
La série des STM32F3

STM32F3 plusieurs sous-familles :


STM32F301, STM32F302, STM32F303 généralistes,
différents périphériques analogiques
(contrôle de moteur)
STM32F334 timer haute résolution (217
picosecondes)
STM32F373 16-bit sigma-delta ADC et ampli-ops
intégrés
STM32F3x8 marche à 1.8V au lieu de 3.3V

16 / 29
La série des STM32F3

STM32F3 plusieurs sous-familles :


STM32F301, STM32F302, STM32F303 généralistes,
différents périphériques analogiques
(contrôle de moteur)
STM32F334 timer haute résolution (217
picosecondes)
STM32F373 16-bit sigma-delta ADC et ampli-ops
intégrés
STM32F3x8 marche à 1.8V au lieu de 3.3V
. . .chacuns dans différents choix de RAM, flash et packages :

LQFP32 , LQFP100 , UFBGA100 ...

16 / 29
Les cartes d’essai
Si vous voulez étudier les MCUs ou faire du prototypage rapide,
pas besoin de concevoir une carte à chaque fois, il existe de
nombreuses cartes d’essai.
• produits d’appel pour les fabricants, donc très bon marché
(≈20€)
• divers périphériques embarqués : capteurs, écrans, réseau,
audio. . .
• programmation facile (interface USB)

17 / 29
La carte STM32F3-discovery
• STM32F303 : 72MHz,
48Ko RAM, 256Ko flash
• documentation et schéma
• programmeur USB intégré
ST-Link
• (presque) toutes les pattes
du MCU accessibles sur
header
• périphériques externes :
É port USB utilisateur
É alimentation par USB ou
externe (pile)
É accéléromètre/boussole
3D
É gyroscope
É 10 LEDs
É 1 bouton utilisateur
18 / 29
Cours 1 Introduction aux microcontrôleurs

Introduction

Présentation des microcontrôleurs

Outils de développement

Documentation et code disponible

19 / 29
Présentation

Programme C :
int main() {
RCC→AHBENR |= (1 « 21); /∗ enable GPIO E clock ∗/
GPIOE→MODER |= 0x55550000; /∗ configure E8−E15 for output ∗/
RCC→AHBENR |= (1 « 17); /∗ enable GPIO A clock ∗/
GPIOA→MODER |= 0x00000000; /∗ configure A0 for digital input ∗/
while(1) {
if (!(GPIOA→IDR & 0x00000001))
GPIOE→ODR ^= 0x0000FF00; /∗ invert pin 8−15 to 1 ∗/
delay();
}
}

20 / 29
Présentation

. . .compilé vers assembleur ARMv7 :


main:
push {r7, lr }
add r7, sp, #0
ldr r2, .L9
ldr r3, .L9
ldr r3, [r3, #20]
orr r3, r3, #2097152
str r3, [r2, #20]
ldr r2, .L9+4
ldr r3, .L9+4
ldr r3, [r3]
orr r3, r3, #1426063360
orr r3, r3, #5570560

20 / 29
Présentation

. . .assemblé en binaire :
0000000: ff9f 0020 ed03 0008 3d04 0008 3d04 0008 . . . . . . .=. . . =. . .
0000010: 3d04 0008 3d04 0008 3d04 0008 0000 0000 =. . . =. . . =. . . . . . .
0000020: 0000 0000 0000 0000 0000 0000 3d04 0008 . . . . . . . . . . . . =. . .
0000030: 3d04 0008 0000 0000 3d04 0008 3d04 0008 =. . . . . . .=. . . =. . .
0000040: 3d04 0008 3d04 0008 3d04 0008 3d04 0008 =. . . =. . . =. . . =. . .
0000050: 3d04 0008 3d04 0008 3d04 0008 3d04 0008 =. . . =. . . =. . . =. . .
0000060: 3d04 0008 3d04 0008 3d04 0008 3d04 0008 =. . . =. . . =. . . =. . .
0000070: 3d04 0008 3d04 0008 3d04 0008 3d04 0008 =. . . =. . . =. . . =. . .
0000080: 3d04 0008 3d04 0008 3d04 0008 3d04 0008 =. . . =. . . =. . . =. . .
0000090: 3d04 0008 3d04 0008 3d04 0008 3d04 0008 =. . . =. . . =. . . =. . .
00000a0: 3d04 0008 3d04 0008 3d04 0008 3d04 0008 =. . . =. . . =. . . =. . .
00000b0: 3d04 0008 3d04 0008 3d04 0008 3d04 0008 =. . . =. . . =. . . =. . .
00000c0: 3d04 0008 3d04 0008 3d04 0008 3d04 0008 =. . . =. . . =. . . =. . .

20 / 29
Présentation
. . .téléchargé sur la carte par SWD (Single Wire Debug) :
# st−flash write [Link] 0x8000000
st−flash 1.3.0
2017−02−20T[Link] INFO: Loading device parameters. . . .
2017−02−20T[Link] INFO: Device connected is: F3 device, id 0x10036422
2017−02−20T[Link] INFO: SRAM size: 0xa000 bytes (40 KiB), Flash:
0x40000 bytes (256 KiB) in pages of 2048 bytes
2017−02−20T[Link] INFO: Attempting to write 2540 (0x9ec) bytes to stm32
address: 134217728 (0x8000000)
Flash page at addr: 0x08000800 erased
2017−02−20T[Link] INFO: Finished erasing 2 pages of 2048 (0x800) bytes
2017−02−20T[Link] INFO: Starting Flash write for VL/F0/F3 core id
2017−02−20T[Link] INFO: Successfully loaded flash loader in sram
1/1 pages written
2017−02−20T[Link] INFO: Starting verification of write complete
2017−02−20T[Link] INFO: Flash written and verified! jolly good!
#

20 / 29
Présentation

Le système est maintenant indépendant, peut être déconnecté de


l’USB, alimenté (par pile, transfo. . .) et interagir avec son
environnement par ses broches et ses composants (LEDs etc.)

20 / 29
Présentation
[optionnel] déboguage :
# arm−none−eabi−gdb [Link] −−eval−command="target remote
localhost:4242"
GNU gdb (GNU Tools for ARM Embedded Processors) 7.10.1.20160923−cvs
Remote debugging using localhost:4242
0x080003ec in Reset_Handler ()
(gdb) br main.c:18
Breakpoint 1 at 0x800025c: file main.c, line 18.
(gdb) c
Continuing.
Breakpoint 1, main () at main.c:19
19 if (!(GPIOA→IDR & 0x00000001))
(gdb) n
20 GPIOE→ODR ^= 0x0000FF00; /∗ invert pin 8−15 to 1 ∗/
(gdb)
21 delay();
(gdb)

20 / 29
Modèle d’execution

Le coeur ARM : une machine load/store


• ≈ 30 registres de 32 bits
(ex : R0-R12, SP, PC)
• cycle fetch/decode/execute (avec pipelining basique)
• des instructions qui changent l’état des registres
(ex : add, bl)
• des instructions qui lisent/écrivent dans la mémoire
(ex : ldr, str)
• . . .et c’est tout !

Toute l’interaction avec le monde extérieur (périphériques) se fait


par écriture dans des cases de mémoire spéciales.

21 / 29
Registres des Cortex-M

22 / 29
L’espace d’adressage des Cortex-M

Il y a un niveau d’indirection entre mémoire RAM et addresses


mémoires : c’est le mécanisme de mémoire virtuelle.
• On peut “addresser” (lire/écrire avec les instructions
load/store) n’importe quelle addresse mémoire entre
0x00000000 et 0xEFFFFFFF
→ 4Go d’adresses
• toutes ces cases mémoire ne correspondent pas à la RAM !
→ notion d’espace d’adressage (spécification Cortex-M)
L’espace d’adressage des Cortex-M
L’espace d’adressage des Cortex-M
L’espace d’adressage des Cortex-M

Example
Pour allumer les LEDs de la carte, il faut :
• écrire 0x00200000 à l’adresse 0x40021014,
• écrire 0x55550000 à l’adresse 0x48000000,
• écrire 0xFFFFFFFF à l’adresse 0x48001014.

Le manuel de référence du STM32F303 décrit tous ces registres. 1

1. Attention, sens de “registre” différent du dernier slide : adresse mémoire


fictive correspondant à une fonction précise d’un périphérique.
23 / 29
L’espace d’adressage des Cortex-M

Example
Pour allumer les LEDs de la carte, il faut :
• écrire 0x00200000 à l’adresse 0x40021014,
• écrire 0x55550000 à l’adresse 0x48000000,
• écrire 0xFFFFFFFF à l’adresse 0x48001014.

Le manuel de référence du STM32F303 décrit tous ces registres. 1


A retenir
• La mémoire flash commence à 0x08000000

1. Attention, sens de “registre” différent du dernier slide : adresse mémoire


fictive correspondant à une fonction précise d’un périphérique.
23 / 29
Comment développer pour les ARM STM32 ?

Langages
C ou C++. . .
(ou tout langage compilant vers ARMv7)

Environnements de développement
Il en existe plusieurs (IDE, compilateur, debugger etc.) :
• Keil IDE / ArmCC (Keil),
• IAR Embedded Workbench (IAR),
• mBed (ARM)
• SW4STM/Eclipse/CubeMX/gcc (STMicroelectronics)
• ...
• gcc/gdb/make/emacs :)

24 / 29
Librairies

. . .et plusieurs façons d’accéder aux registres pour


configurer/interagir avec les périphériques :
• CMSIS (ARM)
(paraphrase du manuel de référence)
• HAL (STMicroelectronics) (bibliothèque d’abstraction matérielle)
• mBed (ARM)
• FreeRTOS
(système d’exploitation embarqué temps réel)

25 / 29
CMSIS Cortex Microcontroller Software Interface Standard

Une surcouche très légère au dessus du matériel pour faciliter la


programmation en C. Ensemble de macros qui donnent des noms :
• aux registres des périphériques
• à leurs valeurs possibles

Example
RCC→AHBENR |= RCC_AHBENR_GPIOEEN_Msk;

au lieu de :
0x40021014 |= 0x00200000;

Confère
stm32f303xc.h dans le code fourni

26 / 29
HAL Hardware Abstraction Layer

Bibliothèque de plus haut niveau (STMicroelectronics), qui cherche


à s’abstraire des caractéristiques techniques de chaque MCU
+ code plus clair
+ plus portable
− pas forcément plus concis
− nombreux bugs !

Example
__HAL_RCC_GPIOE_CLK_ENABLE();

au lieu de :
RCC→AHBENR |= RCC_AHBENR_GPIOEEN_Msk;

27 / 29
Cours 1 Introduction aux microcontrôleurs

Introduction

Présentation des microcontrôleurs

Outils de développement

Documentation et code disponible

28 / 29
Documentation de référence

• Page d’accueil du STM32F303


[Link]
É manuel de référence du STM32F303
(registres, périphériques)
É datasheet du STM32F303
(fonctions de chaque broche)
É manuel utilisateur de la carte d’essai STM32F3-Discovery
(schéma de la carte)
• Mastering STM32, Carmine Noviello (payant)
[Link]

29 / 29

Vous aimerez peut-être aussi