You are on page 1of 4

Universit Libre de Tunis

A.U 2013-2014

Examen (Session Principale)


Module : Systmes base de microcontrleur
Dure : 2H
Enseignant : Mohamed MASMOUDI

Date : 14 - 11 - 2012
Classe : 5me anne Informatique -SLE
Documents non autoriss

Exercice 1 (6 points):

Dcrire la procdure damorage (boot) dans le microcontrleur STM32. (1 point)


Expliquer la diffrence entre les protocoles de communication synchrones et asynchrones.
Citer trois exemples en indiquant si le protocole est synchrone ou asynchrone. (1 point)
Le microcontrleur STM32 adresse diffrentes mmoires en squence. Expliquer ce mode
dadressage et prciser comment grer les configurations des priphriques dans le STM32.
(1 point)
Le STM32 est une cible logicielle, matrielle ou mixte? expliquer. (1 point)
Cest quoi le CMSIS. (1 point)
Dcrire lutilit davoir des sorties en collecteur ouvert (OPEN DRAIN) dans un systme base
de microcontrleur (1 point).

Excercice 2 (14 points):


Le bus 1-Wire (aussi connu sous le nom de bus Dallas ou OneWire) est un bus conu par Dallas
Semiconductor qui permet de connecter (en srie, parallle ou en toile) des composants avec
seulement deux fils (un fil de donnes et un fil de masse).
Les oprations lmentaires pour communiquer travers 1-wire sont dcrites dans le tableau 1
et le chronogramme de la figure 1 .
Opration
Reset

Write 0 bit
Write 1 bit
Read bit

Description
Implmentation
Envoyer un reset sur le bus et
Mettre le bus ltat bas, delay 480 s.
Relcher le bus, attendre 70 s.
tous
les
quipements
Lire linfo sur le bus:
connects seront lattente
o 0 = esclave prsent,
des commandes.
o 1 = pas desclave prsent
Attendre 410 s.
Envoyer un 0 sur le bus pour Mettre le bus ltat bas, attendre 60 s.
un slot de temps
Mettre le bus ltat haut, attendre 10 s.
Envoyer un 1 sur le bus pour Mettre le bus ltat bas, attendre 6 s.
un slot de temps
Mettre le bus ltat haut, attendre 64 s.
Lire un bit depuis un esclave Mettre le bus ltat bas, attendre 6 s.
pour un slot de temps
Relcher le bus, attendre 9 s.
Lire linfo sur le bus
Tableau 1: Oprations lmentaires

1/4

Figure 1:Chronogramme des opration lmentaires sur le bus 1-wire

1. Compltez la fonction Init_ow () pour initialiser la broche PB9 comme broche de donnes 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,
);
// deinitialize GPIOs registers
...........................................................;
// Pins initialization
........................................................................................................................................................................................
........................................................................................................................................................................................
........................................................................................................................................................................................
}

2. Ecrire les fonctions : (3 points)


init_systick() : initialisation du systick avec la fonction SysTick_Config(SystemCoreClock /
..)
systick_handler() : callback pour linterruption du systick
delay (n) : excutant un delay bloquant de n s.
2/4

3. Ecrire les fonctions suivantes (5.5 points):


Nom de fonction
drive_OW_low (1 pts)
drive_OW_high (1 pts)
read_OW (0.5 pts)
OW_write_bit (0.5 pts)
OW_read_bit (0.5 pts)
OW_write_byte (0.5 pts)
OW_read_byte (0.5 pts)
OW_reset_pulse (1 pts)

Description
Cette fonction configure le pin du 1-Wire come sortie et met la sortie ltat bas.
Cette fonction configure le pin du 1-Wire come sortie et met la sortie ltat haut.
Cette fonction configure la pin du 1-Wire come entre 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 gnrer un reset sur le bus 1-Wire et dtecte la prsence
dun esclave.

Les cls dallas appels aussi I-BUTTON sont des cls didentification pour des utilisateurs dun
systme. 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 lchange de donnes
didentification entre le lecteur et la cl.
Lidentifiant de la cl dallas est cod sur 64 bits transmises successivement la rception du code
0x33H depuis le lecteur.

Masse
Data

Cl Dallas

Figure 2: Systme de lecture de cl Dallas

On se propose de raliser un lecteur des cls dallas on se basant sur la librairie de communication 1Wire dj prsent.
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
usart_sendData(uint8_t * ). (3.5 points)

les

deux

fonctions

usart_init()

et

3/4

Annexe
typedef enum
{
GPIO_Speed_10MHz = 1,
GPIO_Speed_2MHz,
GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;
typedef enum
{ GPIO_Mode_AIN = 0x0,
//mode analog input
GPIO_Mode_IN_FLOATING = 0x04,
//mode input floating
GPIO_Mode_IPD = 0x28,
GPIO_Mode_IPU = 0x48,
GPIO_Mode_Out_OD = 0x14,
GPIO_Mode_Out_PP = 0x10,
GPIO_Mode_AF_OD = 0x1C,
GPIO_Mode_AF_PP = 0x18
}GPIOMode_TypeDef;
typedef struct
{
uint16_t GPIO_Pin;
GPIOSpeed_TypeDef GPIO_Speed;
GPIOMode_TypeDef GPIO_Mode;
}GPIO_InitTypeDef;
typedef enum
{ Bit_RESET = 0,
Bit_SET
}BitAction;
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define

GPIO_Pin_0
GPIO_Pin_1
GPIO_Pin_2
GPIO_Pin_3
GPIO_Pin_4
GPIO_Pin_5
GPIO_Pin_6
GPIO_Pin_7
GPIO_Pin_8
GPIO_Pin_9

((uint16_t)0x0001)
((uint16_t)0x0002)
((uint16_t)0x0004)
((uint16_t)0x0008)
((uint16_t)0x0010)
((uint16_t)0x0020)
((uint16_t)0x0040)
((uint16_t)0x0080)
((uint16_t)0x0100)
((uint16_t)0x0200)

#define
#define
#define
#define
#define
#define
#define

GPIO_Pin_10 ((uint16_t)0x0400)
GPIO_Pin_11 ((uint16_t)0x0800)
GPIO_Pin_12 ((uint16_t)0x1000)
GPIO_Pin_13 ((uint16_t)0x2000)
GPIO_Pin_14 ((uint16_t)0x4000)
GPIO_Pin_15 ((uint16_t)0x8000)
GPIO_Pin_All ((uint16_t)0xFFFF)

/** Deinitializes the GPIOx peripheral


registers to their default reset values.
* @param GPIOx: where x can be (A..G)
to select the GPIO peripheral.
**/
void GPIO_DeInit(GPIO_TypeDef* GPIOx)
/** Initializes the GPIOx peripheral
according to the specified
*
parameters in the GPIO_InitStruct.
* @param GPIOx: where x can be (A..G)
to select the GPIO peripheral.
* @param GPIO_InitStruct: pointer to
a GPIO_InitTypeDef structure that
*
contains the configuration
information for the specified GPIO
peripheral.
**/
void GPIO_Init(GPIO_TypeDef* GPIOx,
GPIO_InitTypeDef* GPIO_InitStruct)
/** @brief Sets the selected data port
bits.
* @param GPIOx: where x can be (A..G)
to select the GPIO peripheral.
* @param GPIO_Pin: specifies the port
bits to be written.
*
This parameter can be any
combination of GPIO_Pin_x where x can be
(0..15).
**/
void GPIO_SetBits(GPIO_TypeDef* GPIOx,
uint16_t GPIO_Pin)
/** @brief
port bits.

Clears the selected data

* @param GPIOx: where x can be (A..G)


to select the GPIO peripheral.
* @param GPIO_Pin: specifies the port
bits to be written.
* This parameter can be any
combination of GPIO_Pin_x where x can be
(0..15).
**/
void GPIO_ResetBits(GPIO_TypeDef* GPIOx,
uint16_t GPIO_Pin)
/** @brief Reads the specified input
port pin.
* @param GPIOx: where x can be (A..G)
to select the GPIO peripheral.
* @param GPIO_Pin: specifies the
port bit to read.
* This parameter can be GPIO_Pin_x
where x can be (0..15).
**/
uint8_t
GPIO_ReadInputDataBit(GPIO_TypeDef*
GPIOx, uint16_t GPIO_Pin)

You might also like