Examen Systèmes à base de microcontrôleur

Microcontroller Systems, Programming · exam

Browse all électronique et automatique documents

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.

Advertisement

" 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() {

Advertisement

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) ;

Advertisement

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();

Advertisement

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