Ecole Nationale des Sciences de lInformatique
Universit de la Manouba
A.U 2012-2013
Examen (Session Principale)Correction
Module : Syst mes base de microcontr leur
Dur e : 2H
Enseignant : Mohamed MASMOUDI Chadlia JERAD
Date : 14 - 11 - 2012
Classe : II3-SLE
Documents non autoris s
Exercice 1 (8 points):
" D crire la proc dure damor age (boot) dans le microcontr leur STM32. (1 point)
D crire le r le de boot loader, les pins boot1 et boot0.
"
" Expliquer la diff rence entre les protocoles de communication synchrones et asynchrones.
Citer trois exemples en indiquant si le protocole est synchrone ou asynchrone. (1 point)
Le partage du signal de clk ; UART : asynchrone ; i2c, spi : synchrones.
Le microcontr leur STM32 adresse diff rentes m moires en s quence. Expliquer ce mode
dadressage et pr ciser comment g rer les configurations des p riph riques dans le STM32.
(1 point)
Lespace dadressage est subdivis entre les diff rentes m moires du syst me y compris les
registres de configuration des p riph riques.
Le STM32 est une cible logicielle, mat rielle ou mixte? expliquer. (1 point)
Mixte vu la pr sence de p riph riques qui ex cute des traitements mat riel et le core ARM
qui ex cute le code logiciel.
"
" Cest quoi un FPU, expliquer son r le. (1 point)
Floting Point Unit, acc l rateur de calcul de virgule floattante.
" Cest quoi le CMSIS. (1 point)
Library dabstraction hardware pour les cSurs cortex.
" Citer les crit res de choix dun microcontr leur. (2 point)
Performance (CSur, fr quence, m moires, p riph riques, &), Architecture, Prix, packaging
Excercice 2 (12 points):
Le bus 1-Wire (aussi connu sous le nom de bus Dallas ou OneWire) est un bus con u par Dallas
Semiconductor qui permet de connecter (en s rie, parall le ou en toile) des composants avec
seulement deux fils (un fil de donn es et un fil de masse).
Les op rations l mentaires pour communiquer travers 1-wire sont d crites dans le tableau 1
et le chronogramme de la figure 1 .
Op ration
Reset
Description
Envoyer un reset sur le bus et
tous les quipements connect s
seront
des
commandes.
lattente
Impl mentation
" Mettre le bus l tat bas, delay 480
s.
Publicité
" Rel cher le bus, attendre 70 s.
"
Lire linfo sur le bus:
o 0 = esclave pr sent,
o 1 = pas desclave pr sent
1/7
Write 0 bit
Write 1 bit
Read bit
Envoyer un 0 sur le bus pour un
slot de temps
Envoyer un 1 sur le bus pour un
slot de temps
Lire un bit depuis un esclave pour
un slot de temps
" Attendre 410 s.
Mettre le bus l tat bas, attendre 60 s.
Mettre le bus l tat haut, attendre 10 s.
Mettre le bus l tat bas, attendre 6 s.
Mettre le bus l tat haut, attendre 64 s.
Mettre le bus l tat bas, attendre 6 s.
Rel cher le bus, attendre 9 s.
Lire linfo sur le bus dans un attendre 55 s.
Tableau 1: Op rations l mentaires
Figure 1:Chronogramme des op ration l mentaires sur le bus 1-wire
1. Compl tez la fonction Init_ow () pour initialiser la broche PB9 comme broche de donn es du
bus 1-wire sachant que ce fils sera initialis comme une sortie PUSH_PULL. (2 points)
void Init_ow() {
GPIO_InitTypeDef GPIO_InitStructure;
//Enable GPIOs clock
RCC_APB2PeriphClockCmd ( RCC_APB2Periph_GPIOB, ENABLE);
2/7
// deinitialize GPIOs registers
GPIO_DeInit.(GPIOB);
// Pins initialization
GPIO_InitTypeDef x;
x. GPIO_Pin = GPIO_Pin_9;
x. GPIO_Speed = GPIO_Speed_50MHz;
x. GPIO_Mode= GPIO_Mode_Out_PP;
GPIO_Init(GPIOB,& x) ;
}
2. Ecrire les fonctions : (3 points)
"
init_systick() : initialisation du systick avec la fonction SysTick_Config(SystemCoreClock /
&&..)
init_systick(){
SysTick_Config(SystemCoreClock / 1000000) ;
"
}
systick_handler() : callback pour linterruption du systick
systick_handler() {
Publicité
if (timeout)
timeout-- ;
}
" delay (n) : ex cutant un delay bloquant de n s.
delay (n){
}
timeout=n ;
while (timeout) ;
3. Ecrire les fonctions suivantes (4 points):
Description
Cette fonction configure le pin du 1-Wire come sortie et met la sortie l tat bas.
Cette fonction configure le pin du 1-Wire come sortie et met la sortie l tat haut.
Cette fonction configure la pin du 1-Wire come entr e et lit la valeur sur le bus.
Cette fonction permet denvoyer un bit sur le bus 1-wire
Cette fonction permet de lire un bit sur le bus 1-wire
Cette fonction permet de trasmettre un octet sur le bus 1-wire.
Cette fonction permet de trasmettre un octet sur le bus 1-wire.
Cette fonction permet de g n rer un reset sur le bus 1-Wire et d tecte la pr sence
dun esclave.
Nom de fonction
drive_OW_low
drive_OW_high
read_OW
OW_write_bit
OW_read_bit
OW_write_byte
OW_read_byte
OW_reset_pulse
drive_OW_low(){
GPIO_InitTypeDef x;
x. GPIO_Pin = GPIO_Pin_9;
x. GPIO_Speed = GPIO_Speed_50MHz;
x. GPIO_Mode= GPIO_Mode_Out_PP;
GPIO_Init(GPIOB,& x) ;
GPIO_ResetBits (GPIOB, GPIO_Pin_9) ;
}
drive_OW_high(){
GPIO_InitTypeDef x;
x. GPIO_Pin = GPIO_Pin_9;
x. GPIO_Speed = GPIO_Speed_50MHz;
x. GPIO_Mode= GPIO_Mode_Out_PP;
GPIO_Init(GPIOB,& x) ;
GPIO_SetBits (GPIOB, GPIO_Pin_9) ;
3/7
}
uint8_t read_OW(){
GPIO_InitTypeDef x;
x. GPIO_Pin = GPIO_Pin_9;
x. GPIO_Speed = GPIO_Speed_50MHz;
x. GPIO_Mode= GPIO_Mode_IPU;
GPIO_Init(GPIOB,& x) ;
Publicité
return GPIO_ReadInputDataBit (GPIOB, GPIO_Pin_9) ;
}
OW_write_bit(uint8_t out_bit){
drive_OW_low();
delay(6);
if(out_bit)
drive_OW_high();
delay(54);
drive_OW_high();
delay(10);
}
uint8_t OW_read_bit(){
uint8_t returned;
drive_OW_low();
delay(6);
drive_OW_high();
delay(9);
returned=read_OW();
delay(45);
drive_OW_high();
delay(10);
return returned;
}
OW_write_byte(uint8_t out_byte){
uint8_t i;
for (i=0;i<8;i++){
if(out_byte&(0x01<<i))
OW_write_bit(1);
else
OW_write_bit(0);
}
}
uint8_t OW_read_byte(){
uint8_t returned=0;
uint8_t i;
for (i=0;i<8;i++){
if(OW_read_bit())
returned=returned|(0x01<<i);
}
return returned;
}
uint8_t OW_reset_pulse(){
uint8_t returned;
drive_OW_low();
delay(480);
4/7
drive_OW_high();
delay(70);
returned=read_OW();
delay(410);
drive_OW_high();
Publicité
return returned;
}
Les cl s dallas appel s aussi I-BUTTON sont des cl s didentification pour des utilisateurs dun
syst me. Le fait de connecter la cl au lecteur permet de connecter les deux surfaces data et masse
de la cl au data et masse du bus 1-Wire du lecteur et ce qui enchainera l change de donn es
didentification entre le lecteur et la cl .
Lidentifiant de la cl dallas est cod sur 64 bits transmises successivement la r ception du code
0x33H depuis le lecteur.
Data
Masse
Cl Dallas
Figure 2: Syst me de lecture de cl Dallas
On se propose de r aliser un lecteur des cl s dallas on se basant sur la librairie de communication 1-
Wire d j pr sent .
Le lecteur lit lidentifiant depuis lidentifiant de li-button en interrogeant le bus 1wire tout les 500
ms et transmet le code lu via USART et allume une LED en mettant la broche PA7 en tat haut pour 3
secondes.
4. Ecrire la programme principal en utilisant les deux fonctions usart_init() et usart_sendData().
(3 points)
void main(){
uint8_t i;
uint8_t key[8];
Init_ow();
usart_init();
//Initialisaton de la led
RCC_APB2PeriphClockCmd ( RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef x;
x. GPIO_Pin = GPIO_Pin_7;
x. GPIO_Speed = GPIO_Speed_50MHz;
5/7
x. GPIO_Mode= GPIO_Mode_Out_PP;
GPIO_Init(GPIOA,& x) ;
while(1){
delay(500000);
if(OW_reset_pulse()){ /// v rifier la pr sence d'une cl chaque les 500 ms
OW_write_byte(0x33);
for (i=0;i<8;i++)
key =OW_read_byte();//lecture du cl sur 64 bits
usart_sendData(key);
GPIO_SetBits (GPIOA, GPIO_Pin_7) ;
delay(3000000);
GPIO_ResetBits (GPIOA, GPIO_Pin_7) ;
}
}
}
6/7
7/7