Vous êtes sur la page 1sur 36

Programmation des priphriques

du microcontrleur

STM32F107VC

Schma de principe du microcontrleur STM32F107VC

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 1
SOMMAIRE

1 Contrleur d'horloges et de resets (RCC).................................................. 4


1.1 Activation des horloges .............................................................................................. 4
1.2 Reset des priphriques .............................................................................................. 4
2 Lignes d'entre / sortie (GPIO) ................................................................... 5
2.1 Remise l'tat initial d'un port ................................................................................... 5
2.2 Initialisation du fonctionnement des lignes d'un port................................................. 5
2.3 Lecture d'un port......................................................................................................... 6
2.4 Lecture d'une ligne d'un port ...................................................................................... 6
2.5 Ecriture dans un port .................................................................................................. 7
2.6 Mise 0 ou 1 d'une ligne d'un port.......................................................................... 7
2.7 Ecriture dans une ligne d'un port................................................................................ 7
2.8 Guide d'utilisation des lignes d'E/S ............................................................................ 8
2.8.1 Marche suivre pour initialiser des lignes d'E/S ............................................... 8
2.8.2 Consulter/modifier des lignes d'E/S ................................................................... 8
2.9 Redirection des lignes connectes en interne des contrleurs de priphriques du
microcontrleur (fonction alternative) ................................................................................... 8
3 Contrleur d'interruptions (NVIC)............................................................ 9
3.1 Dfinition des niveaux de premption et de sous priorit .......................................... 9
3.2 Dfinition de la priorit d'une interruption............................................................... 10
3.3 Procdures d'interruption.......................................................................................... 11
3.4 Guide d'utilisation du contrleur d'interruptions...................................................... 11
4 Mmorisation des changements d'tat des lignes et gnration
d'interruptions externes (EXTI) ...................................................................... 11
4.1 Remise l'tat initial du dtecteur de changements d'tat et de gnration
d'interruptions....................................................................................................................... 12
4.2 Choix de la ligne ...................................................................................................... 12
4.3 Programmation de la ligne ....................................................................................... 12
4.4 Indicateurs de changement d'tat.............................................................................. 13
4.5 Interruptions lors de changements d'tat .................................................................. 13
4.6 Guide d'utilisation des lignes d'E/S en mmorisation d'tats ou en gnration
d'interruptions....................................................................................................................... 14
4.6.1 Marche suivre pour initialiser des lignes d'E/S avec mmorisation d'tat ou
gnration d'interruptions................................................................................................. 14
4.6.2 Consulter/modifier des tats mmoriss ou des indicateurs d'interruption des
lignes d'E/S....................................................................................................................... 14
5 Les timers (TIM) ............................................................................................ 14
5.1 Remise l'tat initial d'un timer ..................................................................................... 15
5.2 Initialisation de la base de temps.................................................................................... 15
5.3 Modification de la valeur du compteur .......................................................................... 16
5.4 Modification de la priode ............................................................................................. 16
5.5 Mode unique ou rptitif ................................................................................................ 16
5.6 Lancement/arrt d'un timer par programme ................................................................... 16
5.7 Lignes externes lies un timer ..................................................................................... 17
5.8 Choix de l'horloge d'un timer ......................................................................................... 18
5.8.1 Horloge interne........................................................................................................ 18

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 2
5.8.2 Horloge externe ....................................................................................................... 18
5.9 Chanage de timers ......................................................................................................... 18
5.10 Pilotage d'un timer par des lignes externes .................................................................. 20
5.11 Capture ......................................................................................................................... 20
5.12 Cration de signaux de sortie ....................................................................................... 21
5.13 Tests de l'tat d'un timer ............................................................................................... 23
5.14 Gnration d'interrutions .............................................................................................. 24
5.15 Guide d'utilisation des timers ....................................................................................... 25
5.15.1 Marche suivre pour initialiser les timers ............................................................ 25
5.15.2 Commander un timer par une ligne externe .......................................................... 26
5.15.3 Utiliser le mode de capture dclenche par une ligne externe .............................. 26
5.15.4 Utiliser un timer pour gnrer des signaux sur une ligne externe ......................... 26
5.15.5 Chaner deux timers .............................................................................................. 26
5.15.6 Consulter/modifier des tats mmoriss ou des ITs de timers .............................. 27
6 Convertisseur Analogique / Numrique (ADC) .......................................... 27
6.1 Remise l'tat initial d'un convertisseur ........................................................................ 27
6.2 Initialisation d'un convertisseur...................................................................................... 27
6.3 Mise en marche/arrt d'un convertisseur........................................................................ 28
6.4 Lignes d'entre des convertisseurs ................................................................................. 28
6.5 Choix de l'entre convertir........................................................................................... 29
6.6 Lecture d'une mesure...................................................................................................... 29
6.7 Lancement de conversion par programme ..................................................................... 29
6.8 Dclenchement du convertisseur par commande externe .............................................. 30
6.9 Mise en place du contrle de seuils analogiques............................................................ 30
6.10 Tests de l'tat d'un convertisseur .................................................................................. 31
6.11 Gestion des interruptions d'un convertisseur................................................................ 31
6.12 Guide d'utilisation des convertisseurs .......................................................................... 32
6.12.1 Marche suivre pour initialiser les convertisseurs A/N........................................ 32
6.12.2 Dclencher un convertisseur A/N par programme ................................................ 32
6.12.3 Dclencher un convertisseur A/N par un timer ..................................................... 32
6.12.4 Lire une mesure sur un convertisseur A/N............................................................ 32
6.12.5 Changer l'entre convertir................................................................................... 32
6.12.6 Utiliser le contrle de seuils sur un convertisseur A/N ......................................... 33
6.12.7 Consulter/modifier des tats mmoriss ou des ITs de convertisseurs A/N ......... 33
7 Convertisseur numrique / analogique (DAC) ............................................ 33
7.1 Remise l'tat initial d'un convertisseur ........................................................................ 33
7.2 Initialisation d'un convertisseur...................................................................................... 33
7.3 Lancement d'un convertisseur par programme............................................................... 35
7.4 Lignes de sortie des convertisseurs ................................................................................ 35
7.5 Ecriture d'une valeur dans un convertisseur................................................................... 35
7.6 Lecture de la valeur d'un convertisseur .......................................................................... 35
7.7 Guide d'utilisation des convertisseurs N/A .................................................................... 35
7.7.1 Marche suivre pour initialiser les convertisseurs N/A ......................................... 35
7.7.2 Ecrire une valeur convertir en analogique............................................................ 36
7.7.3 Lire la valeur actuellement convertie en analogique............................................... 36

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 3
1 Contrleur d'horloges et de resets (RCC)
Les priphriques du microcontrleur sont pilots par des horloges programmables. Au reset
ces horloges ne sont pas envoyes aux priphriques. Avant d'utiliser un priphrique il faut
donc en activer l'horloge. Il est galement possible de faire un reset d'un priphrique par
programme pour le remettre dans son tat initial (celui qu'il a aprs un reset physique).

1.1 Activation des horloges


Deux fonctions (selon le priphrique) permettent d'activer ou de dsactiver l'horloge d'un
priphrique.

void RCC_APB2PeriphClockCmd(priphrique, nouvelEtat)


Le premier paramtre dsigne le priphrique dont on veut activer ou dsactiver
l'horloge. Il peut prendre les valeurs dcrites dans le tableau suivant :

RCC_APB2Periph_AFIO Horloge pour le contrle des fonctions alternatives


des lignes (mmorisation d'tats, gnration
d'interruptions et redirection des lignes)
RCC_APB2Periph_GPIOA Horloge pour GPIOA
RCC_APB2Periph_GPIOB Horloge pour GPIOB
RCC_APB2Periph_GPIOC Horloge pour GPIOC
RCC_APB2Periph_GPIOD Horloge pour GPIOD
RCC_APB2Periph_GPIOE Horloge pour GPIOE
RCC_APB2Periph_ADC1 Horloge pour convertisseur analogique/numrique 1
RCC_APB2Periph_ADC2 Horloge pour convertisseur analogique/numrique 2
RCC_APB2Periph_TIM1 Horloge pour timer1

Le second paramtre indique si l'horloge de ce priphrique est active ou dsactive.


Il peut prendre les valeurs : ENABLE ou DISABLE

void RCC_APB1PeriphClockCmd(priphrique, nouvelEtat)


Le premier paramtre dsigne le priphrique dont on veut activer ou dsactiver
l'horloge. Il peut prendre les valeurs dcrites dans le tableau suivant :

RCC_APB1Periph_TIM2 Horloge pour timer2


RCC_APB1Periph_TIM3 Horloge pour timer3
RCC_APB1Periph_TIM4 Horloge pour timer4
RCC_APB1Periph_TIM5 Horloge pour timer5
RCC_APB1Periph_TIM6 Horloge pour timer6
RCC_APB1Periph_TIM7 Horloge pour timer7
RCC_APB1Periph_DAC Horloge pour convertisseurs numrique/analogique

Le second paramtre indique si l'horloge de ce priphrique est active ou dsactive.


Il peut prendre les valeurs : ENABLE ou DISABLE

1.2 Reset des priphriques


Deux fonctions (selon le priphrique) permettent de mettre ou de sortir un priphrique en
mode reset.

void RCC_APB2PeriphResetCmd(priphrique, nouvelEtat)

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 4
Le premier paramtre dsigne le priphrique que l'on veut mettre en mode reset. Il peut
prendre mmes valeurs que le 1er paramtre de la fonction RCC_APB2PeriphClockCmd
Le second paramtre indique si le priphrique est mis en mode reset ou sorti du mode
reset. Il peut prendre les valeurs ENABLE ou DISABLE

void RCC_APB1PeriphResetCmd(priphrique, nouvelEtat)


Le premier paramtre dsigne le priphrique dont on veut faire un reset. Il peut prendre
les mmes valeurs que le premier paramtre de la fonction RCC_APB1PeriphClockCmd
Le second paramtre indique si le priphrique est mis en mode reset ou sorti du mode
reset. Il peut prendre les valeurs ENABLE ou DISABLE

2 Lignes d'entre / sortie (GPIO)


Le STM32F107VC dispose de 80 lignes d'entre/sortie constitues en 5 ports de 16 bits
chacun. Chaque ligne peut tre indpendamment programme comme entre ou comme sortie
numrique ou analogique. De plus, la plupart des lignes sont connectes en interne des
contrleurs de priphriques du microcontrleur qui les utilisent, selon le cas, comme entre
ou comme sortie. La plupart des lignes d'entre/sortie des priphriques internes peuvent tre
rediriges vers deux lignes physiques au choix (fonction alternative directe ou redirige).

2.1 Remise l'tat initial d'un port


La fonction GPIO_DeInit permet de mettre un port dans son tat initial (comme aprs un reset)
Sa dfinition est la suivante :

void GPIO_DeInit (port)


Le paramtre dsigne le port rinitialiser. Il peut prendre les valeurs : GPIOA , GPIOB ,
GPIOC , GPIOD ou GPIOE

2.2 Initialisation du fonctionnement des lignes d'un port


La fonction GPIO_Init permet d'initialiser les lignes d'un port. Elle utilise comme paramtre
une structure de donnes de type GPIO_InitTypeDef dont les champs sont les suivants :
uint16_t GPIO_Pin
GPIOMode_TypeDef GPIO_Mode

Avant d'tre utilise par GPIO_Init cette structure doit tre initialise par la fonction
GPIO_StructInit dfinie comme suit :

void GPIO_StructInit (structureDInitialisation *)


Le paramtre est un pointeur sur la structure de type GPIO_InitTypeDef initialiser.

Avant d'utiliser la fonction pour initialiser les lignes il faut remplir les champs de cette
structure en utilisant valeurs suivantes :

Champ GPIO_Pin , il dsigne la ou les lignes du port programmer. Les valeurs possibles
pour ce champ sont : GPIO_Pin_0 GPIO_Pin_15 ou GPIO_Pin_All, on peut galement
programmer plusieurs lignes de la mme faon en une seule fois en indiquant dans ce
paramtre plusieurs valeurs spares par +

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 5
Champ GPIO_Mode , il indique le mode de fonctionnement dsir pour cette ou ces lignes. Il
peut prendre les valeurs suivantes :

GPIO_Mode_AIN Ligne en entre analogique


Analogique
GPIO_Mode_Out_OD Ligne en sortie analogique
Ligne en entre numrique sans tat dfini si elle
GPIO_Mode_IN_FLOATING
n'est pas connecte
Ligne en entre numrique 0 si elle n'est pas
GPIO_Mode_IPD
Numrique connecte
Ligne en entre numrique 1 si elle n'est pas
GPIO_Mode_IPU
connecte
GPIO_Mode_Out_PP Ligne en sortie numrique (0 ou 1)
Ligne utilise en entre numrique pour sa fonction
GPIO_Mode_IN_FLOATING
Fonction alternative
alternative Ligne utilise en sortie numrique pour sa fonction
GPIO_Mode_AF_PP
alternative

La fonction GPIO_Init est dfinie comme suit :

void GPIO_Init (port, structureDInitialisation *)


Le premier paramtre dsigne le port initialiser. Il peut prendre les valeurs : GPIOA ,
GPIOB , GPIOC , GPIOD ou GPIOE
Le second paramtre est un pointeur sur une structure de type GPIO_InitTypeDef prpare
par la fonction GPIO_StructInit puis dont les champs ont t remplis en fonction du
fonctionnement dsir.

2.3 Lecture d'un port


La fonction GPIO_ReadInputData renvoie un entier sur 16 bits constitu par l'tat des lignes en
entre de ce port (le ime bit de cet entier vaut 0 ou 1 selon l'tat de la ime ligne de ce port), sa
dfinition est la suivante :

uint16_t GPIO_ReadInputData(port)
Le paramtre dsigne le port lire. Il peut prendre les valeurs : GPIOA , GPIOB , GPIOC ,
GPIOD ou GPIOE

La fonction GPIO_ReadOutputData renvoie un entier sur 16 bits constitu par l'tat des lignes
en sortie de ce port (le ime bit de cet entier vaut 0 ou 1 selon l'tat de la ime ligne de ce port),
sa dfinition est la suivante :

uint16_t GPIO_ReadOutputData(port)
Le paramtre dsigne le port lire. Il peut prendre les valeurs : GPIOA , GPIOB , GPIOC ,
GPIOD ou GPIOE

2.4 Lecture d'une ligne d'un port


La fonction GPIO_ ReadInputDataBit renvoie 0 ou 1 selon l'tat de la ligne en entre de ce port
dsigne par le second paramtre, sa dfinition est la suivante :

uint16_t GPIO_ ReadInputDataBit (port, ligne)


Le premier paramtre dsigne le port dont on veut lire une ligne en entre. Il peut
prendre les valeurs : GPIOA , GPIOB , GPIOC , GPIOD ou GPIOE

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 6
Le second paramtre dsigne la ligne lire. Il peut prendre les valeurs : GPIO_Pin_0
GPIO_Pin_15

La fonction GPIO_ ReadOutputDataBit renvoie 0 ou 1 selon l'tat de la ligne en sortie de ce port


dsigne par le second paramtre, sa dfinition est la suivante :

uint16_t GPIO_ ReadOutputDataBit (port, ligne)


Le premier paramtre dsigne le port dont on veut lire une ligne en sortie. Il peut
prendre les valeurs : GPIOA , GPIOB , GPIOC , GPIOD ou GPIOE
Le second paramtre dsigne la ligne lire. Il peut prendre les valeurs : GPIO_Pin_0
GPIO_Pin_15

2.5 Ecriture dans un port


La fonction GPIO_Write permet de modifier l'tat des lignes en sortie, le second paramtre est
un entier dont la valeur du ime bit dfinit l'tat de la ime ligne de ce port, sa dfinition est la
suivante :

void GPIO_Write(port, valeur)


Le premier paramtre dsigne le port dans lequel on veut crire. Il peut prendre les
valeurs : GPIOA , GPIOB , GPIOC , GPIOD ou GPIOE
Le second paramtre est la valeur crire dans ce port (0 65535)

2.6 Mise 0 ou 1 d'une ligne d'un port


Les fonctions GPIO_SetBits et GPIO_ResetBits permettent de modifier l'tat des lignes en sortie
(resp. mise 1 ou 0), leurs dfinitions sont les suivantes :

void GPIO_SetBits(port, lignes)


void GPIO_ResetBits(port, lignes)
Le premier paramtre dsigne le port dont on veut modifier les lignes. Il peut prendre les
valeurs : GPIOA , GPIOB , GPIOC , GPIOD ou GPIOE
Le second paramtre dsigne les lignes modifier. Il peut prendre les valeurs :
GPIO_Pin_0 GPIO_Pin_15 ou GPIO_Pin_All, on peut galement modifier plusieurs
lignes en une seule fois en indiquant dans ce paramtre plusieurs valeurs spares par
+

2.7 Ecriture dans une ligne d'un port


La fonction GPIO_WriteBit permet de modifier l'tat des lignes en sortie, sa dfinition est la
suivante :

void GPIO_WriteBit(port, lignes, valeur)


Le premier paramtre dsigne le port dans les lignes duquel on veut crire. Il peut
prendre les valeurs : GPIOA , GPIOB , GPIOC , GPIOD ou GPIOE
Le deuxime paramtre dsigne la ligne crire. Il peut prendre les valeurs :
GPIO_Pin_0 GPIO_Pin_15 ou GPIO_Pin_All, on peut galement modifier plusieurs
lignes en une seule fois en indiquant dans ce paramtre plusieurs valeurs spares par
+
Le dernier paramtre indique la valeur donner ces lignes. Il peut prendre les valeurs :
Bit_RESET ou Bit_SET

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 7
2.8 Guide d'utilisation des lignes d'E/S
2.8.1 Marche suivre pour initialiser des lignes d'E/S
1. Dclarer une variable de type GPIO_InitTypeDef
2. Activer l'horloge du port par la fonction RCC_APB2PeriphClockCmd
3. Rinitialiser ce port par la fonction GPIO_DeInit
4. Initialiser la variable de type GPIO_InitTypeDef par la fonction GPIO_StructInit
5. Dans cette variable indiquer la ou les lignes programmer et le mode (entre/sortie
numrique/analogique/alternative)
6. programmer cette ou ces lignes par la fonction GPIO_Init
7. recommencer les tapes 5 et 6 pour les autres lignes du mme port ayant un mode
diffrent
8. recommencer les tapes 2 7 pour chaque port
Remarque : lors de l'tape 5 on peut dsigner plusieurs lignes si elles doivent tre
programmes dans le mme mode.

2.8.2 Consulter/modifier des lignes d'E/S


Lecture de toutes les lignes en entre d'un port par la fonction : GPIO_ReadInputData
Lecture de toutes les lignes en sortie d'un port par la fonction : GPIO_ReadOutputData
Lecture d'une ligne en entre par la fonction : GPIO_ ReadInputDataBit
Lecture d'une ligne en sortie par la fonction : GPIO_ ReadOutputDataBit

Ecriture de toutes les lignes en sortie d'un port par la fonction : GPIO_Write
Ecriture d'une ou de plusieurs lignes en sortie par l'une des fonctions : GPIO_SetBits ou
GPIO_ResetBits ou GPIO_WriteBit

2.9 Redirection des lignes connectes en interne des


contrleurs de priphriques du microcontrleur (fonction
alternative)
Les lignes utilises comme entres/sorties de contrleurs de priphriques internes peuvent
tre rediriges. La fonction GPIO_PinRemapConfig permet de le faire. Sa dfinition est la
suivante :

void GPIO_PinRemapConfig(redirection, nouvelEtat)


Le premier paramtre dsigne le priphrique dont les lignes sont rediriges. Les valeurs
possibles sont indiques dans le tableau ci dessous :

Sans Avec
Valeur Ligne
redirection redirection
TIM1_BKIN PB12 PA6
TIM1_CH1N PB13 PA7
GPIO_PartialRemap_TIM1
TIM1_CH2N PB14 PB0
TIM1_CH3N PB15 PB1
TIM1_ETR PA12 PE7
TIM1_CH1 PA8 PE9
TIM1_CH2 PA9 PE11
GPIO_FullRemap_TIM1 TIM1_CH3 PA10 PE13
TIM1_CH4 PA11 PE14
TIM1_BKIN PB12 PE15
TIM1_CH1N PB13 PE8

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 8
TIM1_CH2N PB14 PE10
TIM1_CH3N PB15 PE12
TIM2_CH1 = TIM2_ETR PA0 PA15
GPIO_PartialRemap1_TIM2
TIM2_CH2 PA1 PB3
TIM2_CH3 PA2 PB10
GPIO_PartialRemap2_TIM2
TIM2_CH4 PA3 PB11
TIM2_CH1 = TIM2_ETR PA0 PA15
TIM2_CH2 PA1 PB3
GPIO_FullRemap_TIM2
TIM2_CH3 PA2 PB10
TIM2_CH4 PA3 PB11
TIM3_CH1 PA6 PB4
GPIO_PartialRemap_TIM3
TIM3_CH2 PA7 PB5
TIM3_CH1 PA6 PC6
TIM3_CH2 PA7 PC7
GPIO_FullRemap_TIM3
TIM3_CH3 PB0 PC8
TIM3_CH4 PB1 PC9
TIM4_CH1 PB6 PD12
TIM4_CH2 PB7 PD13
GPIO_Remap_TIM4
TIM4_CH3 PB8 PD14
TIM4_CH4 PB9 PD15
PD0 lignes OSC_IN
GPIO_Remap_PD01
PD1 normales OSC_OUT
TIM5_CH4 PA3 horloge
GPIO_Remap_TIM5CH4_LSI interne pour
calibration

Le second paramtre indique si la redirection est faite ou pas. Les valeurs possibles de
ce paramtre sont : ENABLE ou DISABLE

3 Contrleur d'interruptions (NVIC)


Les interruptions lies aux priphriques du microcontrleur utilisent 16 niveaux de priorit.
Ces niveaux peuvent tre dcoups en niveaux de premption et sous niveaux de priorit. Une
interruption de niveau de premption N sera prise en compte mme si le processeur est en
train d'excuter une procdure d'interruption de niveau suprieur N. Tandis que la sous
priorit est utilise pour classer les interruptions en attente.

3.1 Dfinition des niveaux de premption et de sous priorit

La fonction suivante permet de dcouper les 16 priorits en niveaux de premption et sous


niveaux de priorit. Ce dcoupage s'applique toutes les interruptions de priphriques.

void NVIC_PriorityGroupConfig(groupesDePriorit)
Le paramtre dsigne le dcoupage choisi. Les valeurs possibles sont dcrites dans le
tableau suivant :

Niveaux de sous
Description
premption priorit
pas de niveaux de premption
NVIC_PriorityGroup_0 0 0-15
4 bits pour la sous priorit
1 bit pour la premption
NVIC_PriorityGroup_1 0-1 0-7
3 bits pour la sous priorit

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 9
2 bits pour la premption
NVIC_PriorityGroup_2 0-3 0-3
2 bits pour la sous priorit
3 bits pour la premption
NVIC_PriorityGroup_3 0-7 0-1
1 bit pour la sous priorit
4 bits pour la premption
NVIC_PriorityGroup_4 0-15 0
pas de sous priorit

3.2 Dfinition de la priorit d'une interruption


Chaque interruption utilise doit tre affecte d'un niveau de premption et d'un sous niveau
de priorit en accord avec le choix de dcoupage fait par la fonction prcdente. La fonction
NVIC_Init permet de dfinir ces niveaux. Elle utilise comme paramtre une structure de
donnes de type NVIC_InitTypeDef dont les champs sont les suivants :
uint8_t NVIC_IRQChannel
uint8_t NVIC_IRQChannelPreemptionPriority
uint8_t NVIC_IRQChannelSubPriority
FunctionalState NVIC_IRQChannelCmd

Champ NVIC_IRQChannel, il indique l'interruption programmer. Les valeurs possibles sont


donnes dans le tableau suivant :

ADC1_2_IRQn interruption globale pour ADC1 et ADC2


EXTI0_IRQn Interruption de la ligne externe 0
EXTI1_IRQn Interruption de la ligne externe 1
EXTI2_IRQn Interruption de la ligne externe 2
EXTI3_IRQn Interruption de la ligne externe 3
EXTI4_IRQn Interruption de la ligne externe 4
EXTI9_5_IRQn Interruptions des lignes externes 5 9
EXTI15_10_IRQn Interruptions des lignes externes 10 15
TIM1_BRK_IRQn Interruption de Break de TIM1
TIM1_UP_IRQn Interruption de dbordement de TIM1
TIM1_TRG_COM_IRQn Interruption trigger et communication de TIM1
TIM1_CC_IRQn Interruption de Capture Compare de TIM1
TIM2_IRQn Interruption de TIM2
TIM3_IRQn Interruption de TIM3
TIM4_IRQn Interruption de TIM4
TIM5_IRQn Interruption de TIM5
TIM6_IRQn Interruption de TIM6
TIM7_IRQn Interruption de TIM7

Champ NVIC_IRQChannelPreemptionPriority, il dfinit le niveau de premption. Les


valeurs possibles sont de 0 1, 2, 4 ou 15 selon le choix de dcoupage fait.

Champ NVIC _IRQChannelSubPriority, il dfinit le niveau de sous priorit. Les valeurs


possibles sont de 0 1, 2, 4 ou 15 selon le choix de dcoupage fait.

Champ FunctionalState , il indique si cette interruption est gnre ou pas vers le


microcontrleur. Les valeurs possibles sont : ENABLE ou DISABLE

void NVIC_Init(structureDInitialisation *)
Le paramtre est un pointeur sur une structure de type NVIC_InitTypeDef dont les champs
ont t remplis.

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 10
3.3 Procdures d'interruption
Lorsqu'une interruption a t active, sa prise en compte est faite par une procdure
d'interruption dont le nom correspond cette interruption. Les noms de ces procdures sont
imposs et dfinis dans le tableau suivant :

Cause de l'interruption Interruption nom de la procdure


IT globale pour ADC1 et ADC2 ADC1_2_IRQn ADC1_2_IRQHandler
IT de la ligne externe 0 EXTI0_IRQn EXTI0_IRQHandler
IT de la ligne externe 1 EXTI1_IRQn EXTI1_IRQHandler
IT de la ligne externe 2 EXTI2_IRQn EXTI2_IRQHandler
IT de la ligne externe 3 EXTI3_IRQn EXTI3_IRQHandler
IT de la ligne externe 4 EXTI4_IRQn EXTI4_IRQHandler
ITs des lignes externes 9 15 EXTI9_5_IRQn EXTI9_5_IRQHandler
ITs des lignes externes 10 15 EXTI15_10_IRQn EXTI15_10_IRQHandler
IT de Break de TIM1 TIM1_BRK_IRQn TIM1_BRK_IRQHandler
IT de dbordement de TIM1 TIM1_UP_IRQn TIM1_UP_IRQHandler
IT trigger et communication de TIM1 TIM1_TRG_COM_IRQn TIM1_TRG_COM_IRQHandler
IT de Capture Compare de TIM1 TIM1_CC_IRQn TIM1_CC_IRQHandler
IT de TIM2 TIM2_IRQn TIM2_IRQHandler
IT de TIM3 TIM3_IRQn TIM3_IRQHandler
IT de TIM4 TIM4_IRQn TIM4_IRQHandler
IT de TIM5 TIM5_IRQn TIM5_IRQHandler
IT de TIM6 TIM6_IRQn TIM6_IRQHandler
IT de TIM7 TIM7_IRQn TIM7_IRQHandler

3.4 Guide d'utilisation du contrleur d'interruptions


1. Dclarer une variable de type NVIC_InitTypeDef
2. Programmer le dcoupage entre premption et priorits par la fonction
NVIC_PriorityGroupConfig
3. Initialiser la variable de type NVIC_InitTypeDef avec l'interruption programmer, le
niveau de premption, le niveau de priorit et activer ou dsactiver l'IT
4. Programmer l'IT par la fonction NVIC_Init
5. Recommencer les tapes 3 et 4 pour chaque IT programmer

Les procdures d'interruption ont des noms prdfinis du type : xxx_IRQHandler (voir tableau en
3.3).

4 Mmorisation des changements d'tat des lignes et


gnration d'interruptions externes (EXTI)
Il est parfois ncessaire de dclencher une action lorsqu'une ligne change d'tat (passe de 0 1
ou de 1 0). Si un programme teste l'tat d'une ligne et la trouve 0, puis, plus tard, revient
tester l'tat de cette ligne et la trouve toujours 0, comment savoir si entre ces deux tests elle
n'est pas passe 1 ? Pour rsoudre ce problme les ports peuvent tre programms pour
mmoriser de tels changements d'tat. Un indicateur est alors positionn que le programme
pourra lire puis effacer. De mme les ports peuvent tre programms pour gnrer une
interruption lors d'un changement d'tat. Les lignes utilises doivent avoir t programmes
en mode entre (GPIO_Mode_IN_FLOATING, GPIO_Mode_IPD ou GPIO_Mode_IPU) (voir 2.2).

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 11
4.1 Remise l'tat initial du dtecteur de changements d'tat et
de gnration d'interruptions
La fonction suivante permet de mettre le dtecteur de changements d'tat et de gnration
d'interruptions dans son tat initial (comme aprs un reset). Sa dfinition est la suivante :

void EXTI_DeInit ()

4.2 Choix de la ligne


La fonction suivante permet de choisir la ligne dont on veut mmoriser les changements d'tat
ou que l'on veut utiliser en gnration d'interruption :

void GPIO_EXTILineConfig(port, ligne)


Le premier paramtre dsigne le port dont on veut programmer une ligne. Il peut
prendre les valeurs : GPIO_PortSourceGPIOA GPIO_PortSourceGPIOE
Le deuxime paramtre dsigne la ligne choisie. Les valeurs possibles sont :
GPIO_PinSource0 GPIO_PinSource15

4.3 Programmation de la ligne


La fonction EXTI_Init permet d'initialiser les lignes d'un port pour dtecter des changements
d'tat. Elle utilise comme paramtre une structure de donnes de type EXTI_InitTypeDef dont
les champs sont les suivants :
uint32_t EXTI_Line
EXTIMode_TypeDef EXTI_Mode
EXTITrigger_TypeDef EXTI_Trigger
FunctionalState EXTI_LineCmd

Avant d'tre utilise par EXTI_Init cette structure doit tre initialise par la fonction
EXTI_StructInit dfinie comme suit :

void EXTI_StructInit(structureDInitialisation *)
Le paramtre est un pointeur sur la structure de type EXTI_InitTypeDef initialiser.

Avant d'utiliser la fonction pour programmer les lignes il faut remplir les champs de cette
structure en utilisant valeurs suivantes :

Champ EXTI_Line, il dsigne la ou les lignes du port programmer. Les valeurs possibles
pour ce champ sont : EXTI_Line0 EXTI_Line15. On peut programmer plusieurs lignes en
mme temps en mettant dans ce paramtre plusieurs valeurs spares par des +

Champ EXTI_Mode, il indique si la ligne est programme pour positionner un indicateur ou


pour gnrer une interruption. Les valeurs possibles sont : EXTI_Mode_Event ou
EXTI_Mode_Interrupt

Champ EXTI_Trigger, il indique quels changements d'tat sont pris en compte. Les valeurs
possibles sont dcrites dans le tableau ci-dessous :
EXTI_Trigger_Falling Dtection des fronts descendants (passages de 1 0)
EXTI_Trigger_Rising Dtection des fronts montants (passages de 0 1)
Dtection de tous les changements (passages de 1
EXTI_Trigger_Rising_Falling
0 et de 0 1)

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 12
Champ EXTI_LineCmd, il permet d'activer ou de dsactiver la dtection de changement d'tat
sur la ligne. Les valeurs possibles sont : ENABLE ou DISABLE

void EXTI_Init (structureDInitialisation *)


Le paramtre est un pointeur sur une structure de type EXTI_InitTypeDef pralablement
initialise par la fonction EXTI_StructInit puis dont les diffrents champs ont t
remplis en fonction du fonctionnement dsir.

4.4 Indicateurs de changement d'tat


La fonction suivante permet de tester l'indicateur de changement d'tat d'une ligne :

FlagStatus EXTI_GetFlagStatus(ligne)
Le paramtre dsigne la ligne du port dont on veut tester l'indicateur de changement
d'tat. Les valeurs possibles pour ce champ sont : EXTI_Line0 EXTI_Line15.
La valeur renvoye par la fonction est l'tat de cet indicateur. Les valeurs possibles
sont : SET ou RESET

La fonction suivante permet d'effacer l'indicateur de changement d'tat d'une ligne :

void EXTI_ClearFlag(ligne)
Le paramtre dsigne la ligne du port dont on veut effacer l'indicateur de changement
d'tat. Les valeurs possibles pour ce champ sont : EXTI_Line0 EXTI_Line15.

4.5 Interruptions lors de changements d'tat


Une interruption peut tre gnre lors d'un changement d'tat. Les procdures d'interruption
associes sont EXTI0_IRQHandler pour les lignes 0 EXTI4_IRQHandler pour les lignes 4,
EXTI9_5_IRQHandler pour les lignes 5 9 qui sont regroupes en une seule interruption et
EXTI15_10_IRQHandler pour les lignes 10 15 qui sont regroupes en une seule interruption
(voir 3).
La fonction suivante permet de tester si une interruption de changement d'tat d'une ligne a
t leve :

ITStatus EXTI_GetITStatus(ligne)
Le paramtre dsigne la ligne du port dont on veut tester l'interruption. Les valeurs
possibles pour ce champ sont : EXTI_Line0 EXTI_Line15.
La valeur renvoye par la fonction est l'tat de cette interruption. Les valeurs possibles
sont : SET ou RESET

La fonction suivante permet d'effacer l'indicateur d'interruption d'une ligne :

void EXTI_ClearITPendingBit(ligne)
Le paramtre dsigne la ligne du port dont on veut effacer l'interruption. Les valeurs
possibles pour ce champ sont : EXTI_Line0 EXTI_Line15.

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 13
4.6 Guide d'utilisation des lignes d'E/S en mmorisation d'tats
ou en gnration d'interruptions
4.6.1 Marche suivre pour initialiser des lignes d'E/S avec
mmorisation d'tat ou gnration d'interruptions
1. Idem tape 1 du 2.8.1.
2. Dclarer une variable de type EXTI_InitTypeDef
3. Activer l'horloge du dispositif de mmorisation d'tats et de gnration d'ITs (AFIO)
par la fonction RCC_APB2PeriphClockCmd
4. Initialiser le dispositif de mmorisation d'tats ou de gnration d'ITs par la fonction
EXTI_DeInit
5. Programmer en entre numrique la ligne utilise (idem tapes 2 6 du 2.8.1).
6. Initialiser la variable de type EXTI_InitTypeDef par la fonction EXTI_StructInit
7. Dans la variable de type EXTI_InitTypeDef indiquer la ligne, le mode (mmorisation
d'tat ou gnration d'IT), le front dclenchant et l'activer ou la dsactiver
8. Programmer la dtection par la fonction EXTI_Init
9. Choisir la ligne utiliser par la fonction GPIO_EXTILineConfig
10. Recommencer les tapes 5 9 pour les autres lignes

4.6.2 Consulter/modifier des tats mmoriss ou des indicateurs


d'interruption des lignes d'E/S
Lecture de l'tat mmoris d'une ligne en entre par la fonction EXTI_GetFlagStatus
Effacement de l'tat mmoris d'une ligne en entre par la fonction EXTI_ClearFlag

Lecture de l'indicateur d'IT d'une ligne en entre par la fonction EXTI_GetITStatus


Effacement de l'indicateur d'IT d'une ligne en entre par la fonction
EXTI_ClearITPendingBit

5 Les timers (TIM)


Le STM32F107VC dispose de 7 timers. Les timers TIM2 TIM5 sont des timers d'usage
gnral. Les timers TIM6 et TIM7 sont des timers possdant moins de fonctionnalits. Le
timer TIM1 est une version plus complte. Les fonctionnalits sont les suivantes :

Fonctionnalit TIM1 TIM2 TIM5 TIM6 et TIM7


Compteur sur 16 bits OUI OUI OUI
Comptage en incrmentation ou dcrmentation OUI OUI OUI
Rechargement automatique OUI OUI OUI
Pr division d'horloge OUI OUI OUI
Entres pour capture OUI OUI NON
Sorties pour gnration de signaux OUI OUI NON
Mode cycle unique OUI OUI NON
Sorties complmentaires OUI NON NON
Contrle du timer par lignes externes OUI OUI NON
Interconnexion avec d'autres timers OUI OUI NON
Horloge externe OUI OUI NON
Dclenchement des convertisseurs A/N OUI OUI sauf T5 NON

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 14
5.1 Remise l'tat initial d'un timer
La fonction TIM_DeInit permet de mettre un timer dans son tat initial (comme aprs un reset)
Sa dfinition est la suivante :

void TIM_DeInit(timer)
Le paramtre dsigne le timer rinitialiser. Il peut prendre les valeurs : TIM1 TIM7
5.2 Initialisation de la base de temps
La fonction TIM_TimeBaseInit permet d'initialiser la base de temps d'un timer. Elle utilise
comme paramtre une structure de donnes de type TIM_TimeBaseInitTypeDef dont les champs
sont les suivants :
uint16_t TIM_Prescaler
uint16_t TIM_Period
uint16_t TIM_CounterMode

Avant d'tre utilise par TIM_TimeBaseInit cette structure doit tre initialise par la fonction
TIM_TimeBaseStructInit dfinie comme suit :

void TIM_TimeBaseStructInit(structureDInitialisation *)
Le paramtre est un pointeur sur la structure de type TIM_TimeBaseInitTypeDef
initialiser.

Avant d'utiliser la fonction pour initialiser la base de temps d'un timer il faut remplir les
champs de cette structure en utilisant valeurs suivantes :

Champ TIM_Prescaler, il dfinit la division d'horloge appliquer au timer. Les valeurs


possibles pour ce champ sont 0 65535. La frquence de l'horloge est divise par cette
valeur+1 de sorte qu'une valeur de 0 provoque une division de la frquence d'horloge par 1
c'est--dire pas de division d'horloge.

Champ TIM_Period, il dfinit la limite de comptage du timer (priode). Les valeurs possibles
pour ce champ sont 0 65535. Le timer parcours les valeurs de 0 cette limite incluse.

Champ TIM_CounterMode, il dfinit le mode de comptage du timer. Les valeurs possibles


pour ce champ sont indiques dans le tableau suivant :

Le timer compte de 0 TIM_Period. Le dbordement est


TIM_CounterMode_Up signal au top d'horloge suivant lorsqu'il a atteint la valeur
TIM_Period
Le timer compte de TIM_Period 0. Le dbordement est
TIM_CounterMode_Down
signal au top d'horloge suivant lorsqu'il a atteint la valeur 0
Le timer compte de 0 TIM_Period puis de TIM_Period 0.
TIM_CounterMode_CenterAligned1 Le dbordement est signal lorsqu'il atteint la valeur
TIM_Period
Le timer compte de 0 TIM_Period puis de TIM_Period 0.
TIM_CounterMode_CenterAligned2
Le dbordement est signal lorsqu'il atteint la valeur 0
Le timer compte de 0 TIM_Period puis de TIM_Period 0.
TIM_CounterMode_CenterAligned3 Le dbordement est signal lorsqu'il atteint la valeur
TIM_Period et lorsqu'il atteint la valeur 0

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 15
La fonction TIM_TimeBaseInit est dfinie comme suit :

void TIM_TimeBaseInit(timer, structureDInitialisation *)


Le premier paramtre dsigne le timer initialiser. Il peut prendre les valeurs : TIM1
TIM7
Le second paramtre est un pointeur sur une structure de type TIM_TimeBaseInitTypeDef
prpare par la fonction TIM_TimeBaseStructInit puis dont les champs ont t remplis en
fonction du fonctionnement dsir.

Remarque : la dure maximale que l'on peut atteindre en utilisant l'horloge interne 72MHz
(voir 0) est de 59,6 secondes (TIM_Prescaler 65535 et TIM_Period 65535).

5.3 Modification de la valeur du compteur


Le compteur du timer volue lorsque le timer fonctionne, il est possible d'en changer la valeur
(en gnral on le fait lorsqu'il est arrt) par la fonction :

void TIM_SetCounter(timer, nouvelleValeur)


Le premier paramtre dsigne le timer dont on veut modifier le compteur. Il peut
prendre les valeurs : TIM1 TIM7
Le second paramtre dfinit la nouvelle valeur du compteur du timer. Les valeurs
possibles pour ce champ sont 0 65535.

5.4 Modification de la priode


La priode du timer, normalement dfinie par le champ TIM_Period lors de l'initialisation de
la base de temps du timer, peut tre modifie sans refaire une initialisation complte de la
base de temps par la fonction :

void TIM_SetAutoreload(timer, nouvellePeriode)


Le premier paramtre dsigne le timer dont on veut modifier la priode. Il peut prendre
les valeurs : TIM1 TIM7
Le second paramtre dfinit la nouvelle limite de comptage du timer. Les valeurs
possibles pour ce champ sont 0 65535.

5.5 Mode unique ou rptitif


Quel que soit le mode choisi le timer peut n'effectuer l'opration qu'une seule fois ou la
rpter lorsqu'il a fini. Ce fonctionnement est programm par la fonction suivante :

void TIM_SelectOnePulseMode(timer, rptition)


Le premier paramtre dsigne le timer initialiser. Il peut prendre les valeurs : TIM1
TIM7
Le second paramtre indique le choix de la rptition ou non. Les valeurs possibles
sont : TIM_OPMode_Single ou TIM_OPMode_Repetitive

5.6 Lancement/arrt d'un timer par programme

void TIM_Cmd(timer, nouvelEtat)


Le premier paramtre dsigne le timer lancer ou arrter. Il peut prendre les valeurs :
TIM1 TIM7

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 16
Le second paramtre indique si le timer est lanc ou arrt. Les valeurs possibles sont :
ENABLE ou DISABLE

5.7 Lignes externes lies un timer


Les timer 3 et 4 possdent 5 lignes permettant de les piloter. Il s'agit des lignes CH1
CH4 et de la ligne ETR.
Le timer 2 possde 4 lignes permettant de le piloter. Il s'agit des lignes CH1 CH4 (la
ligne ETR est la mme que la ligne CH1).
Le timer 5 possde 4 lignes permettant de le piloter. Il s'agit des lignes CH1 CH4 (il n'a
pas de ligne ETR).
Le timer 1 possde les mmes lignes que les timers 3 et 4 auxquelles viennent s'ajouter 4
lignes supplmentaires qui sont des lignes complmentaires CH1N CH3N et la ligne
de commande des sorties BKIN.
Les timers 6 et 7 n'ont pas de lignes permettant de les piloter.

Les lignes CH1 et CH2 peuvent tre utilises comme des entres (reset, commande
marche/arrt, dclenchement et horloge externe)
Les lignes CH1 CH4 peuvent tre utilises comme des sorties lorsque le timer sert
gnrer des signaux.
La ligne ETR ne peut tre utilise qu'en entre (reset, commande marche/arrt,
dclenchement et horloge externe). Elle permet des rglages plus prcis du
fonctionnement que les lignes CH1 et CH2.

Le tableau suivant indique les lignes physiques relies aux timers. Ces lignes peuvent tre
rediriges (voir 2.9) :

CH1 CH2 CH3 CH4 ETR


direct redirig direct redirig direct redirig direct redirig direct redirig
PA8 (1) PA9 (1) PA10 (1) PA11 (1) PA12 (1)
TIM1 PE9 PE11 PE13 PE14 PE7
TIM2 PA0 PA1 PB3 PA2 PB10 PA3 PB11 PA0
PA6 PC6 PA7 PC7 PB0 PC8 PB1 PC9 PD2
TIM3 PB4
(2)
PB5
(2)

TIM4 PB6 PD12 PB7 PD13 PB8 PD14 PB9 PD15 PE0
TIM5 PA0 PA1 PA2 PA3
(1) redirection totale de TIM1
(2) redirection partielle de TIM3

Les lignes spcifiques au timer 1 sont dcrites dans le tableau suivant :

CHIN CH2N CH3N BKIN


TIM1
direct redirig direct redirig direct redirig direct redirig
redirection partielle PA7 PB0 PB1 PA6
PB13 PB14 PB15 PB12
redirection totale PE8 PE10 PE12 PE15

Les lignes utilises comme entres pour les timers doivent avoir t programmes en mode
GPIO_Mode_IN_FLOATING (voir 2.2 ).
Les lignes utilises comme sorties pour les timers doivent avoir t programmes en mode
GPIO_Mode_AF_PP (voir 2.2 ).

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 17
5.8 Choix de l'horloge d'un timer
Les choix possibles pour l'horloge d'un timer sont les suivants :
 Utilisation de l'horloge interne du microcontrleur (72MHz)
 Horloge provenant de l'une des entres CH1 ou CH2 du timer (front montant)
 Horloge provenant de l'entre ETR du timer (choix du front montant ou descendant) et
possibilit d'ajouter une pr division par 1 , 2 , 4 ou 8
 Horloge provenant d'un autre timer (chanage)

5.8.1 Horloge interne


La fonction suivante permet de choisir de faire fonctionner un timer partir de l'horloge du
microcontrleur (72MHz) :

void TIM_InternalClockConfig(timer)
Le paramtre dsigne le timer pour lequel on veut utiliser l'horloge interne. Il peut
prendre les valeurs : TIM1 TIM7

5.8.2 Horloge externe


Pour utiliser les lignes CH1 ou CH2 comme horloges externes la fonction est la suivante :

void TIM_ITRxExternalClockConfig(timer, ligneDHorloge)


Le premier paramtre dsigne le timer initialiser. Il peut prendre les valeurs : TIM1
TIM5
Le second paramtre dsigne la ligne utilise comme horloge externe (le front actif est le
front montant). Les valeurs possibles sont dcrites dans le tableau suivant :

TIM_TS_TI1F_ED ligne CH1 directe


TIM_TS_TI1FP1 ligne CH1 aprs filtrage interne
TIM_TS_TI2FP2 ligne CH2 aprs filtrage interne

Pour utiliser la ligne ETR comme horloge externe la fonction est la suivante :

void TIM_ETRConfig(timer, prdivisionDHorloge, frontsDHorloge, filtrageDHorloge)


Le premier paramtre dsigne le timer initialiser. Il peut prendre les valeurs : TIM1
TIM5
Le deuxime paramtre permet d'appliquer une pr-division de cette horloge par 1, 2, 4
ou 8. Les valeurs possibles sont : TIM_ExtTRGPSC_OFF, TIM_ExtTRGPSC_DIV2 ,
TIM_ExtTRGPSC_DIV4 ou TIM_ExtTRGPSC_DIV8
Le troisime paramtre indique si le timer compte sur les fronts descendants ou
montants de cette horloge. Les valeurs possibles sont respectivement :
TIM_ExtTRGPolarity_Inverted ou TIM_ExtTRGPolarity_NonInverted
Le dernier paramtre correspond au filtrage appliqu cette ligne (plus la valeur est
leve plus la ligne est filtre). Les valeurs possibles sont 0 15.

Pour utiliser un autre timer comme horloge externe il faut utiliser le chanage de timers (voir
5.9).

5.9 Chanage de timers


Les timers sont, a priori, indpendants. Lorsque l'on dsire les chaner il faut en dsigner un
comme matre (celui qui pilote) et l'autre comme esclave (celui qui est pilot). Le chanage

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 18
permet de piloter un timer par un autre (reset, commande marche/arrt, dclenchement ou
horloge). Toutes les combinaisons de matre / esclave ne sont pas possibles :
Le timer 2 ne peut tre pilot que par le 1, le 3 ou le 4
Le timer 3 ne peut tre pilot que par le 1, le 2, le 4 ou le 5
Le timer 4 ne peut tre pilot que par le 1, le 2 ou le 3
Le timer 5 ne peut tre pilot que par le 2, le 3 ou le 4

Pour tablir le lien entre le matre et l'esclave (qui pilote qui) on utilise la fonction suivante :

void TIM_ITRxExternalClockConfig(timerEsclave, timerMatre)


Le premier paramtre dsigne le timer esclave piloter. Il peut prendre les valeurs : TIM2
TIM5
Le second paramtre dsigne le timer matre. Les valeurs possibles sont dcrites dans le
tableau suivant (les colonnes du tableau correspondent au timer esclave, les valeurs
dans les cases indiquent quel est le timer matre) :

timer esclave : TIM2 TIM3 TIM4 TIM5


TIM_TS_ITR0 TIM1 TIM1 TIM1 TIM2
TIM_TS_ITR1 TIM2 TIM2 TIM3
TIM_TS_ITR2 TIM3 TIM5 TIM3 TIM4
TIM_TS_ITR3 TIM4 TIM4

Le timer matre doit tre programm pour piloter le timer esclave. Ceci est obtenu par la
fonction suivante :

void TIM_SelectOutputTrigger(timerMatre, EvnementDePilotage)


Le premier paramtre dsigne le timer matre. Il peut prendre les valeurs : TIM1 TIM5
Le deuxime paramtre indique quel vnement du timer matre est transmis au timer
esclave. Les valeurs possibles sont dcrites dans le tableau ci-dessous :

TIM_TRGOSource_Reset Evnement d'initialisation du timer


TIM_TRGOSource_Enable Evnement de mise en marche du timer
TIM_TRGOSource_Update Evnement de rechargement du timer
Evnement de capture dclenche par CH1
TIM_TRGOSource_OC1Ref
ou activation du signal de sortie sur CH1
Evnement de capture dclenche par CH2
TIM_TRGOSource_OC2Ref
ou activation du signal de sortie sur CH2
Evnement de capture dclenche par CH3
TIM_TRGOSource_OC3Ref
ou activation du signal de sortie sur CH3
Evnement de capture dclenche par CH4
TIM_TRGOSource_OC4Ref
ou activation du signal de sortie sur CH4

Le timer esclave doit tre programm pour tre pilot par le timer matre. Ceci est obtenu par
la fonction suivante :
void TIM_SelectSlaveMode(timerEsclave, commandePilote)
Le premier paramtre dsigne le timer esclave. Il peut prendre les valeurs : TIM2 TIM5
Le deuxime paramtre indique comment le timer esclave est pilot par le timer matre.
les valeurs possibles sont dcrites dans le tableau ci-dessous :

TIM_SlaveMode_Reset Le matre pilote le reset du timer esclave (front montant)


TIM_SlaveMode_Gated Le matre pilote la commande marche/arrt du timer esclave (niveau 1)

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 19
TIM_SlaveMode_Trigger Le matre pilote le dmarrage du timer esclave (front montant)
TIM_SlaveMode_External1 Le matre pilote l'horloge du timer esclave (front montant)

Par exemple pour que le timer 2 utilise comme horloge les vnements de rechargement du
timer 3, on fera :
TIM_ITRxExternalClockConfig(TIM2, TIM_TS_ITR2); // TIM3 pilote TIM2
TIM_SelectOutputTrigger(TIM3, TIM_TRGOSource_Update); // l'vt transmis par TIM3 est le dbordement
TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_External1); // TIM2 utilise cet vnement comme horloge

Remarque : la dure maximale que l'on peut atteindre, partir de l'horloge interne 72MHz,
en chanant deux timers est de 2 965 333 jours soit un peu plus de 8000 ans (TIM_Prescaler
65535 et TIM_Period 65535 sur le timer matre et le timer esclave).

5.10 Pilotage d'un timer par des lignes externes


Les lignes CH1 et CH2 peuvent tre utilises pour piloter un timer (reset, commande marche /
arrt et dclenchement). Pour cela il faut choisir la ligne utiliser puis configurer le timer
pour qu'il soit pilot par cette ligne.

Le choix de la ligne de pilotage se fait par la fonction suivante :

TIM_SelectInputTrigger(timer, ligne)
Le premier paramtre dsigne le timer piloter. Il peut prendre les valeurs : TIM1 TIM5
Le second paramtre indique la ligne choisie. Les valeurs possibles sont dcrites dans le
tableau ci-dessous :

TIM_TS_TI1F_ED ligne CH1


TIM_TS_TI1FP1 ligne CH1 aprs filtrage interne
TIM_TS_TI2FP2 ligne CH2 aprs filtrage interne

La dsignation de ce que pilote cette ligne se fait par la fonction suivante :

void TIM_SelectSlaveMode(timer, commandePilote)


Le premier paramtre dsigne le timer pilot. Il peut prendre les valeurs : TIM1 TIM5
Le deuxime paramtre indique comment le timer est pilot par la ligne. les valeurs
possibles sont dcrites dans le tableau ci-dessous :

TIM_SlaveMode_Reset La ligne pilote le reset du timer (front montant)


TIM_SlaveMode_Gated La ligne pilote la commande marche/arrt du timer (niveau 1)
TIM_SlaveMode_Trigger La ligne pilote le dmarrage du timer (front montant)

5.11 Capture
La capture consiste copier la valeur du compteur du timer dans l'un des registres CCR1
CCR4 lors de la dtection d'un ou plusieurs fronts (montants ou descendants) sur l'entre
choisie (CH1 CH4). Un indicateur est positionn ou une interruption peut tre gnre
chaque capture.
Le choix de la ligne d'entre et du mode de capture se fait par la fonction TIM_ICInit qui prend
en paramtre un pointeur sur une structure de type TIM_ICInitTypeDef qui doit avoir au
pralable t initialise puis dont les champs sont remplis. La structure TIM_ICInitTypeDef
possde les champs suivants :

uint16_t TIM_Channel

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 20
uint16_t TIM_ICPolarity
uint16_t TIM_ICPrescaler

Avant d'tre utilise par TIM_ICInit cette structure doit tre initialise par la fonction :

void TIM_ICStructInit(structureDInitialisation *)
Le paramtre est un pointeur sur la structure initialiser.

Avant d'utiliser la fonction pour initialiser une ligne de capture il faut remplir les champs de
cette structure en utilisant valeurs suivantes :

Champ TIM_Channel, il indique la ligne d'entre (CH1 CH4) et donc le registre dans lequel
est mise la valeur capture. Les valeurs possibles sont : TIM_Channel_1 TIM_Channel_4

Champ TIM_ICPolarity, il indique le front (montant ou descendant) actif de cette ligne. Les
valeurs possibles sont : TIM_ICPolarity_Rising ou TIM_ICPolarity_Falling

Champ TIM_ICPrescaler, il indique le nombre de fronts dtecter sur la ligne avant de


dclencher la capture (1, 2, 4 ou 8). Les valeurs possibles sont : TIM_ICPSC_DIV1 ,
TIM_ICPSC_DIV2 , TIM_ICPSC_DIV4 ou TIM_ICPSC_DIV8

L'initialisation de la ligne se fait alors par la fonction :

void TIM_ICInit(timer, structureDInitialisation *)


Le premier paramtre dsigne le timer dont on veut capturer la valeur. Il peut prendre les
valeurs : TIM1 TIM5
Le second paramtre est un pointeur sur la structure initialise.

Lors d'une capture, la valeur capture est place dans le registre li la ligne choisie par le
champ TIM_Channel. Pour lire cette valeur on utilise, en fonction du registre, les fonctions :

uint16_t TIM_GetCapture1(timer)
uint16_t TIM_GetCapture2(timer)
uint16_t TIM_GetCapture3(timer)
uint16_t TIM_GetCapture4(timer)
Le paramtre dsigne le timer dont on veut lire la valeur capture. Il peut prendre les
valeurs : TIM1 TIM5
La valeur de retour est la dernire valeur capture

5.12 Cration de signaux de sortie


Un timer peut gnrer un signal de sortie sur les lignes CH1 CH4. Selon que le timer a t
programm en mode unique ou rptitif (voir 0) le signal peut tre rpt ou non. La ligne
utilise pour cette sortie doit avoir t initialise en entre numrique (voir 2.2).

Signal simple : quand le timer atteint la valeur contenue dans l'un des registres CCR1 CCR4
la sortie prend l'tat choisi (0 ou 1).
Ceci permet de faire changer l'tat d'une ligne aprs un dlai donn puisque le signal devient
actif quand le timer atteint CCRi (delai). Que le timer soit mis ou non en mode rptitif ne
change rien : la sortie ne bascule que la premire fois que le timer atteint CCRi et reste dans
cet tat.

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 21
Signal carr : La sortie change d'tat chaque fois que le timer atteint la valeur dfinie comme
priode. La frquence est donc dtermine par le double de cette valeur.

Signal modulation de largeur d'implusion : La frquence est dtermine par la valeur dfinie
comme priode du timer et le rapport cyclique par l'un des registres CCR1 CCR4.

Le choix de la ligne de sortie se fait par les fonctions TIM_OCxInit (o x vaut 1, 2, 3 ou 4 selon
la ligne de sortie choisie) qui prennent en paramtre un pointeur sur une structure de type
TIM_OCInitTypeDef qui doit avoir au pralable t initialise puis dont les champs ont t
remplis. La structure TIM_OCInitTypeDef possde les champs suivants :

uint16_t TIM_OCMode
uint16_t TIM_OutputState
uint16_t TIM_Pulse
uint16_t TIM_OCPolarity

Avant d'tre utilise par les fonctions TIM_OCxInit cette structure doit tre initialise par la
fonction :

void TIM_OCStructInit(structureDInitialisation *)
Le paramtre est un pointeur sur la structure initialiser.

Avant d'utiliser la fonction pour initialiser une ligne de gnration de signaux il faut remplir
les champs de cette structure en utilisant valeurs suivantes :

Champ TIM_OCMode, il indique le mode de fonctionnement de la ligne de sortie. Les valeurs


possibles sont dcrites par le tableau ci-dessous :

TIM_OCMode_Timing La sortie n'est pas utilise


Mode signal simple : le signal de sortie prend la valeur dfinie par le champ
TIM_OCMode_Active
TIM_OCPolarity quand le timer atteint la valeur de CCRi
Mode signal carr : le signal de sortie change d'tat chaque fois que le
timer atteint la valeur dfinie comme priode. Le champ TIM_Pulse ne
TIM_OCMode_Toggle
sert rien dans ce mode. La valeur initiale du signal de sortie est dfinie
par le champ TIM_OCPolarity
Mode modulation de largeur d'impulsion :
Si le timer est mis en mode incrmentation la sortie prend la valeur
dfinie par le champ TIM_OCPolarity tant que le timer est < CCRi
puis est inverse jusqu' ce que le timer atteigne la valeur de la
priode du timer.
Si le timer est mis en mode dcrmentation la sortie prend la valeur
TIM_OCMode_PWM1
inverse de celle dfinie par le champ TIM_OCPolarity tant que le
timer est > CCRi puis prend la valeur dfinie par le champ
TIM_OCPolarity jusqu' ce que le timer atteigne 0.
Si le timer est mis en mode centr le signal de sortie prend la valeur
dfinie par le champ TIM_OCPolarity tant que le timer est < CCRi
et la valeur inverse quand il est CCRi

Champ TIM_OutputState, il permet de relier la sortie du timer la ligne physique ou pas.


Les valeurs possibles sont : TIM_OutputState_Disable ou TIM_OutputState_Enable
Remarque : pour le timer 1, la sortie doit en plus tre active par l'appel de la fonction :
TIM_CtrlPWMOutputs(TIM1, ENABLE);

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 22
Champ TIM_Pulse, il contient la valeur mettre dans le registre CCRi. Les valeurs possibles
sont 0 65535.

Champ TIM_OCPolarity, il permet de choisir le niveau (0 ou 1) prsent sur la ligne de sortie


lorsqu'elle est active. Les valeurs possibles sont : TIM_OCPolarity_High ou TIM_OCPolarity_Low

Selon la ligne choisie (CH1 CH4), l'initialisation de la ligne se fait alors par l'une des
fonctions :

void TIM_OC1Init(timer, structureDInitialisation *)


void TIM_OC2Init(timer, structureDInitialisation *)
void TIM_OC3Init(timer, structureDInitialisation *)
void TIM_OC4Init(timer, structureDInitialisation *)
Le premier paramtre dsigne le timer utilis. Il peut prendre les valeurs : TIM1 TIM5
Le second paramtre est un pointeur sur la structure initialise.

Le contenu des registres CCRi utiliss pour la gnration de signaux peut tre modifi sans
rinitialiser les lignes par les fonctions :

void TIM_SetCompare1(timer, nouvelleValeurDeCCR1)


void TIM_SetCompare2(timer, nouvelleValeurDeCCR2)
void TIM_SetCompare3(timer, nouvelleValeurDeCCR3)
void TIM_SetCompare4(timer, nouvelleValeurDeCCR4)
Le premier paramtre dsigne le timer dont on veut modifier le contenu du registre
CCRi. Il peut prendre les valeurs : TIM1 TIM5
Le second paramtre dfinit la nouvelle valeur mettre dans le registre CCRi. Les
valeurs possibles sont 0 65535.

5.13 Tests de l'tat d'un timer


Le contenu d'un timer peut tre lu mme lorsqu'il est en fonctionnement par la fonction :

uint16_t TIM_GetCounter(timer)
Le paramtre dsigne le timer lire. Il peut prendre les valeurs : TIM1 TIM7
La valeur de retour est le contenu du compteur du timer au moment de la lecture

Lors de certains vnements des indicateurs peuvent tre positionns par le timer. Ces
indicateurs pourront par la suite tre tests par programme pour savoir quels vnements se
sont produits.
La fonction permettant de dfinir les vnements que le timer doit mmoriser dans ces
indicateurs est la suivante :

void TIM_GenerateEvent(timer, vnement)


Le premier paramtre dsigne le timer pour lequel on veut que les vnements soient
mmoriss. Il peut prendre les valeurs : TIM1 TIM7
Le second paramtre dsigne le ou les vnements mmoriser. Les valeurs possibles
sont dcrites dans le tableau suivant (plusieurs valeurs peuvent tre slectionnes en
mme temps en les sparant par des | ) :

TIM_EventSource_Update Rechargement du timer


TIM_EventSource_CC1 Evnement dclenchant une capture sur CH1

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 23
Ou quand le timer atteint la valeur contenue dans CCR1
Evnement dclenchant une capture sur CH2
TIM_EventSource_CC2
Ou quand le timer atteint la valeur contenue dans CCR2
Evnement dclenchant une capture sur CH3
TIM_EventSource_CC3
Ou quand le timer atteint la valeur contenue dans CCR3
Evnement dclenchant une capture sur CH4
TIM_EventSource_CC4
Ou quand le timer atteint la valeur contenue dans CCR4
Evnement de commande du timer (dclenchement,
TIM_EventSource_Trigger
marche/arrt ou reset)

L'tat de ces indicateurs peut tre lu par la fonction :

FlagStatus TIM_GetFlagStatus(timer, indicateurDEvnement)


Le premier paramtre dsigne le timer pour lequel on veut lire un indicateur. Il peut
prendre les valeurs : TIM1 TIM7
Le second paramtre dsigne l'indicateur lire. Les valeurs possibles sont dcrites dans
le tableau suivant:

TIM_FLAG_Update Rechargement du timer


Evnement dclenchant une capture sur CH1
TIM_FLAG_CC1
Ou quand le timer atteint la valeur contenue dans CCR1
Evnement dclenchant une capture sur CH2
TIM_FLAG_CC2
Ou quand le timer atteint la valeur contenue dans CCR2
Evnement dclenchant une capture sur CH3
TIM_FLAG_CC3
Ou quand le timer atteint la valeur contenue dans CCR3
Evnement dclenchant une capture sur CH4
TIM_FLAG_CC4
Ou quand le timer atteint la valeur contenue dans CCR4
Evnement de commande du timer (dclenchement, marche/arrt
TIM_FLAG_Trigger
ou reset)

La valeur en retour indique l'tat de cet indicateur. Les valeurs possibles sont : SET ou
RESET.

Les indicateurs peuvent tre effacs par la fonction :

void TIM_ClearFlag(timer, indicateurDEvnement)


Le premier paramtre dsigne le timer pour lequel on veut effacer les indicateurs. Il peut
prendre les valeurs : TIM1 TIM7
Le second paramtre dsigne l'indicateur effacer. Les valeurs possibles sont celles du
second paramtre de la fonction prcdente. Il est possible d'effacer plusieurs
indicateurs le fois en plaant plusieurs valeurs spares par des + .

5.14 Gnration d'interrutions


Lors de certains vnements des interruptions peuvent tre gnres par le timer. Les
procdures associes sont dcrites en 3.
La fonction permettant de choisir les vnements pour lesquels le timer doit gnrer des
interruptions est la suivante :

void TIM_ITConfig(timer, interrution, nouvelEtat)


Le premier paramtre dsigne le timer pour lequel on veut activer ou dsactiver les
interruptions. Il peut prendre les valeurs : TIM1 TIM7

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 24
Le deuxime paramtre dsigne l'interruption activer ou dsactiver. Les valeurs
possibles sont dcrites dans le tableau suivant:

TIM_IT_Update Rechargement du timer


Evnement dclenchant une capture sur CH1
TIM_IT_CC1
Ou quand le timer atteint la valeur contenue dans CCR1
Evnement dclenchant une capture sur CH2
TIM_IT_CC2
Ou quand le timer atteint la valeur contenue dans CCR2
Evnement dclenchant une capture sur CH3
TIM_IT_CC3
Ou quand le timer atteint la valeur contenue dans CCR3
Evnement dclenchant une capture sur CH4
TIM_IT_CC4
Ou quand le timer atteint la valeur contenue dans CCR4
Evnement de commande du timer (dclenchement, marche/arrt
TIM_IT_Trigger
ou reset)

Le dernier paramtre indique si l'interruption doit tre active ou dsactive. Les valeurs
possibles sont ENABLE ou DISABLE.

L'tat de ces interruptions peut tre test par la fonction :

ITStatus TIM_GetITStatus(timer, interruption)


Le premier paramtre dsigne le timer pour lequel on veut tester l'tat des interruptions.
Il peut prendre les valeurs : TIM1 TIM7
Le second paramtre dsigne l'interruption tester. Les valeurs possibles sont les mmes
que pour le deuxime paramtre de la fonction prcdente.
La valeur en retour indique l'tat de cette interruption. Les valeurs possibles sont : SET
ou RESET.

Lorsqu'une interruption est prise en compte, son tat doit tre effac, ceci est fait par la
fonction :
void TIM_ClearITPendingBit(timer, interruption)
Le premier paramtre dsigne le timer pour lequel on veut effacer l'tat des interruptions.
Il peut prendre les valeurs : TIM1 TIM7
Le second paramtre dsigne l'interruption effacer. Les valeurs possibles sont les
mmes que pour le deuxime paramtre de la fonction prcdente.

5.15 Guide d'utilisation des timers


5.15.1 Marche suivre pour initialiser les timers
1. Dclarer une variable de type TIM_TimeBaseInit
2. Initialiser le timer par la fonction : TIM_DeInit
3. Activer l'horloge du timer par la fonction RCC_APB1PeriphClockCmd pour le
timer1 ou RCC_APB2PeriphClockCmd pour les autres timers.
4. Initialiser la variable de type TIM_TimeBaseInit par la fonction TIM_TimeBaseStructInit
5. Dfinir dans la variable de type TIM_TimeBaseInit les paramtres du timer : division
d'horloge, priode (valeur limite) et mode de comptage
6. Programmer le timer par la fonction TIM_TimeBaseInit
7. Choisir le mode rptitif ou non par la fonction TIM_SelectOnePulseMode
8. Choisir d'utiliser une horloge interne ou externe par l'une des fonctions :
TIM_InternalClockConfig pour l'horloge interne

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 25
TIM_ITRxExternalClockConfig pour une horloge pilote par la ligne CH1 (avec ou
sans filtrage) ou par la ligne CH2
TIM_ETRConfig pour une horloge pilote par la ligne ETR
9. Autoriser, si ncessaire, la mmorisation de certains tats du timer par la fonction
TIM_GenerateEvent
10. Autoriser, si ncessaire, la gnration de certaines ITs par la fonction TIM_ITConfig
11. Recommencer les tapes 2 10 pour chaque timer programmer
12. Lancer chaque timer par la fonction TIM_Cmd

5.15.2 Commander un timer par une ligne externe


1. Suivre les tapes 1 10 comme en 5.15.1
2. Choisir la ligne de commande (CH1 ou CH2) par la fonction TIM_SelectInputTrigger
3. Choisir la fonction commander par la fonction TIM_SelectSlaveMode

La ligne utilise pour la commande du timer doit avoir t programme en mode


GPIO_Mode_IN_FLOATING (voir 2.2).

5.15.3 Utiliser le mode de capture dclenche par une ligne externe


1. Dclarer une variable de type TIM_ICInitTypeDef
2. Suivre les tapes 1 10 comme en 5.15.1
3. Initialiser la variable de type TIM_ICInitTypeDef par la fonction TIM_ICStructInit
4. Dfinir dans la variable de type TIM_ICInitTypeDef la ligne de commande (CH1 CH4),
le front de dclenchement de la commande et le nombre d'vnements pour activer la
commande (1, 2, 4 ou 8)
5. Programmer la capture par la fonction TIM_ICInit

La ligne utilise pour la capture doit avoir t programme en mode


GPIO_Mode_IN_FLOATING (voir 2.2 ).

5.15.4 Utiliser un timer pour gnrer des signaux sur une ligne externe
1. Dclarer une variable de type TIM_OCInitTypeDef
2. Suivre les tapes 1 10 comme en 5.15.1
3. Initialiser la variable de type TIM_OCInitTypeDef par la fonction TIM_OCStructInit
4. Dfinir dans la variable de type TIM_OCInitTypeDef le type de signal (mono coup, carr,
MLI), l'envoi ou non du signal gnr sur la ligne de sortie, la largeur d'impulsion
(sauf pour le signal carr) et la polarit (niveau actif 0/1)
5. Programmer la capture par l'une des fonctions TIM_OC1Init TIM_OC4Init selon la
ligne de sortie choisie (CH1 CH4)

La ligne utilise comme sortie doit avoir t programme en mode GPIO_Mode_AF_PP (voir
2.2 ).

5.15.5 Chaner deux timers


1. Suivre les tapes 1 10 comme en 5.15.1 pour chacun des deux timers
2. Indiquer quel est le timer matre (celui qui pilote l'autre) et quel est le timer esclave
(celui qui est pilot) par la fonction TIM_ITRxExternalClockConfig

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 26
3. Pour le timer matre indiquer l'vnement utilis pour piloter l'autre timer par la
fonction TIM_SelectOutputTrigger
4. Pour le timer esclave indiquer la commande pilote par l'autre timer par la fonction
TIM_SelectSlaveMode

5.15.6 Consulter/modifier des tats mmoriss ou des ITs de timers


Lecture de l'tat mmoris d'un timer par la fonction : TIM_GetFlagStatus
Effacement de l'tat mmoris d'un timer par la fonction : TIM_ClearFlag

Lecture de l'indicateur d'IT d'un timer par la fonction : TIM_GetITStatus


Effacement de l'indicateur d'IT d'un timer par la fonction : TIM_ClearITPendingBit

6 Convertisseur Analogique / Numrique (ADC)


Le microcontrleur possde 2 convertisseurs analogique/numrique. Ils peuvent tre utiliss
pour faire des mesures en mode continu ou non. Le dclenchement d'une mesure peut tre fait
par programme ou par un timer ( intervalles rguliers). Il est galement possible de dfinir
des seuils minimaux et maximaux, lorsque la valeur mesure sort de ces seuils le
convertisseur positionne un indicateur et peut lever une interruption.

6.1 Remise l'tat initial d'un convertisseur


La fonction ADC_DeInit permet de mettre un convertisseur dans son tat initial (comme aprs
un reset). Sa dfinition est la suivante :

void ADC_DeInit(convertisseur)
Le paramtre dsigne le convertisseur. Les valeurs possibles sont : ADC1 ou ADC2

6.2 Initialisation d'un convertisseur


La fonction ADC_Init permet d'initialiser un convertisseur. Elle utilise comme paramtre une
structure de donnes de type ADC_InitTypeDef dont les champs sont les suivants :
FunctionalState ADC_ContinuousConvMode;
uint32_t ADC_ExternalTrigConv;

Avant d'tre utilise par ADC_Init cette structure doit tre initialise par la fonction
ADC_StructInit dfinie comme suit :

void ADC_StructInit(structureDInitialisation *)
Le paramtre est un pointeur sur la structure de type ADC_InitTypeDef initialiser.

Avant d'utiliser la fonction pour initialiser un convertisseur il faut remplir les champs de cette
structure en utilisant valeurs suivantes :

Champ ADC_ContinuousConvMode, il indique si le convertisseur effectue des mesures en


continu ou pas. Les valeurs possibles sont : ENABLE ou DISABLE. En mode continu ds
qu'une mesure est termine le convertisseur redmarre la suivante. Ce mode n'est donc
utilisable qu'avec un dclenchement par programme (voir second paramtre).

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 27
Champ ADC_ExternalTrigConv, il indique comment sont dclenches les conversions (par
programme ou par un timer). Les valeurs possibles sont dcrites dans le tableau ci-dessous :

ADC_ExternalTrigConv_T1_CC3 Dclenchement par TIM1_CH3


ADC_ExternalTrigConv_None Dclenchement par programme
ADC_ExternalTrigConv_T1_CC1 Dclenchement par TIM1_CH1
ADC_ExternalTrigConv_T1_CC2 Dclenchement par TIM1_CH2
ADC_ExternalTrigConv_T2_CC2 Dclenchement par TIM2_CH2
ADC_ExternalTrigConv_T3_TRGO Dclenchement par le trigger du TIM3
ADC_ExternalTrigConv_T4_CC4 Dclenchement par TIM4_CH4

Remarque : Lorsque les conversions sont dclenches par timer le premier paramtre doit tre
DISABLE.

void ADC_Init(convertisseur, structureDInitialisation *)


Le premier paramtre dsigne le convertisseur initialiser. Il peut prendre les valeurs :
ADC1 ou ADC2
Le second paramtre est un pointeur sur une structure de type ADC_InitTypeDef prpare
par la fonction ADC_StructInit puis dont les champs ont t remplis en fonction du
fonctionnement dsir.

6.3 Mise en marche/arrt d'un convertisseur


Elle se fait par la fonction :

void ADC_Cmd(convertisseur, nouvelEtat)


Le premier paramtre dsigne le convertisseur lancer ou arrter. Il peut prendre les
valeurs : ADC1 ou ADC2
Le second paramtre indique si le convertisseur est mis en marche ou arrt. Les
valeurs possibles sont : ENABLE ou DISABLE

6.4 Lignes d'entre des convertisseurs


Les deux convertisseurs partagent les mmes lignes d'entre. Ils ont 18 canaux d'entre les 16
premiers sont connects 16 lignes d'entre externes et les deux derniers deux entres
internes correspondant un capteur de temprature et une tension de rfrence de 3,3V. Les
16 lignes utilisables comme entres externes sont les suivantes :

canal 0 PA0
canal 1 PA1
canal 2 PA2
canal 3 PA3
canal 4 PA4
canal 5 PA5
canal 6 PA6
canal 7 PA7
canal 8 PB0
canal 9 PB1
canal 10 PC0
canal 11 PC1
canal 12 PC2
canal 13 PC3
canal 14 PC4
canal 15 PC5

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 28
Les lignes utilises comme entres des convertisseurs doivent tre programmes en mode
analogique (GPIO_Mode_AIN) (voir 2.2).

6.5 Choix de l'entre convertir


Il faut dfinir la ligne sur laquelle est effectue la mesure et la faon dont le convertisseur
effectue cette mesure.

void ADC_RegularChannelConfig(convertisseur, canalDEntre, 1, tempsDEchantillonage)


Le premier paramtre dsigne le convertisseur dont on configure l'entre. Il peut prendre
les valeurs : ADC1 ou ADC2
Le deuxime paramtre indique l'entre du convertisseur configure. Les valeurs
possibles sont : ADC_Channel_0 ADC_Channel_15 , ADC_Channel_TempSensor ,
ADC_Channel_Vrefint
Le troisime paramtre doit tre 1 (ce paramtre n'a de sens que dans un mode de
fonctionnement particulier que nous n'utiliserons pas).
Le dernier paramtre indique le nombre de cycles d'horloges attendus avant que la
mesure ne soit faite pour assurer que le signal d'entre soit stable. Les valeurs
possibles sont celles dcrites dans le tableau suivant :

ADC_SampleTime_1Cycles5 1.5 cycles


ADC_SampleTime_7Cycles5 7.5 cycles
ADC_SampleTime_13Cycles5 13.5 cycles
ADC_SampleTime_28Cycles5 28.5 cycles
ADC_SampleTime_41Cycles5 41.5 cycles
ADC_SampleTime_55Cycles5 55.5 cycles
ADC_SampleTime_71Cycles5 71.5 cycles
ADC_SampleTime_239Cycles5 239.5 cycles

6.6 Lecture d'une mesure


Les valeurs mesures sont sur 12 bits (0 4095) pour une tension d'entre comprise entre 0 et
3,3V. La fonction suivante permet de rcuprer la dernire mesure faite :

uint16_t ADC_GetConversionValue(convertisseur)
Le paramtre dsigne le convertisseur dont on lit la mesure. Il peut prendre les valeurs :
ADC1 ou ADC2
La valeur de retour est la dernire mesure faite (elle doit tre mise en forme par un ET
avec la valeur 0x0FFF)

6.7 Lancement de conversion par programme


Lorsque le champ ADC_ExternalTrigConv a t initialis pour un dclenchement par
programme, ce dclenchement est fait par la fonction :

void ADC_SoftwareStartConvCmd(convertisseur, nouvelEtat)


Le premier paramtre dsigne le convertisseur lancer. Il peut prendre les valeurs :
ADC1 ou ADC2
Le second paramtre indique si le convertisseur est lanc ou pas. Les valeurs possibles
sont : ENABLE ou DISABLE

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 29
6.8 Dclenchement du convertisseur par commande externe
Lorsque le champ ADC_ExternalTrigConv a t initialis pour un dclenchement externe
(par timer), ce dclenchement est activ par la fonction :

void ADC_ExternalTrigConvCmd(convertisseur, nouvelEtat)


Le premier paramtre dsigne le convertisseur dont on configure le dclenchement. Il
peut prendre les valeurs : ADC1 ou ADC2
Le deuxime paramtre active ou dsactive le dclenchement externe. Les valeurs
possibles sont : ENABLE ou DISABLE

Le timer utilis pour dclencher les mesures doit tre programm :


Pour sa base de temps par la fonction TIM_BaseInit (division d'horloge, mode et
priode)
Pour produire un signal de sortie sur le canal adquat par la fonction TIM-OCxInit en
choisissant le mode TIM_OCMode_PWM1, une dure d'impulsion de 1 et en validant la
sortie avec un niveau actif 1). La ligne physique relie au timer n'a pas besoin d'tre
programme pour sa fonction alternative en mode numrique sauf si elle est galement
utilise comme sortie.

6.9 Mise en place du contrle de seuils analogiques


Il est possible de dfinir des seuils minimaux et maximaux, lorsque la valeur mesure sort de
ces seuils le convertisseur positionne un indicateur et peut lever une interruption. La fonction
utilise pour mettre en place ce contrle de seuil est :

void ADC_AnalogWatchdogCmd(convertisseur, entresConcernes)


Le premier paramtre dsigne le convertisseur dont on configure le contrle de seuils. Il
peut prendre les valeurs : ADC1 ou ADC2
Le deuxime paramtre indique comment s'applique le contrle de seuils. Les valeurs
possibles sont donnes dans le tableau ci-dessous :

ADC_AnalogWatchdog_SingleRegEnable Contrle de seuil sur l'entre


ADC_AnalogWatchdog_None Pas de contrle de seuil

La dfinition des seuils se fait par la fonction suivante :

void ADC_AnalogWatchdogThresholdsConfig(convertisseur, seuilHaut, seuilBas)


Le premier paramtre dsigne le convertisseur dont on configure les seuils. Il peut
prendre les valeurs : ADC1 ou ADC2
Le deuxime paramtre dfinit le seuil maximal (valeur entre 0 et 4095)
Le troisime paramtre dfinit le seuil minimal (valeur entre 0 et 4095)

La fonction suivante permet d'indiquer l'entre contrler :

void ADC_AnalogWatchdogSingleChannelConfig(convertisseur, canalContrl)


Le premier paramtre dsigne le convertisseur dont on configure l'entre contrle. Il
peut prendre les valeurs : ADC1 ou ADC2
Le deuxime paramtre indique la ligne contrler. Les valeurs possibles sont :
ADC_Channel_0 ADC_Channel_17

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 30
6.10 Tests de l'tat d'un convertisseur
La fonction suivante permet de lire l'tat d'un convertisseur :

FlagStatus ADC_GetFlagStatus(convertisseur, tatALire)


Le premier paramtre dsigne le convertisseur dont on teste l'tat. Il peut prendre les
valeurs : ADC1 ou ADC2
Le deuxime paramtre dsigne l'tat lire. Les valeurs possibles sont :

ADC_FLAG_AWD Lecture de l'indicateur de dpassement des seuils de contrle


ADC_FLAG_EOC Lecture de l'indicateur de fin de conversion
ADC_FLAG_STRT Lecture de l'indicateur de dbut de conversion

La valeur en retour indique l'tat de cet indicateur. Les valeurs possibles sont : SET ou
RESET.

Lorsqu'un indicateur a t lu il est possible de l'effacer par la fonction :

void ADC_ClearFlag(convertisseur, tatAEffacer)


Les deux paramtres sont les mmes que pour la fonction prcdente

6.11 Gestion des interruptions d'un convertisseur


On peut programmer les convertisseurs pour qu'ils gnrent une interruption en fin de
conversion ou lorsque les seuils de contrle ont t dpasss. Les procdures associes sont
dcrites en 3. Le choix des motifs d'interruption est fait par la fonction suivante :

void ADC_ITConfig(convertisseur, interruption, nouvelEtat)


Le premier paramtre dsigne le convertisseur dont on configure les interruptions. Il
peut prendre les valeurs : ADC1 ou ADC2
Le deuxime paramtre dsigne le motif d'interruption choisi (on peut activer ou
dsactiver les deux interruptions en mme temps en mettant dans ce paramtre les
deux valeurs possibles spares par + ). Les valeurs possibles sont :

ADC_IT_EOC Interruption cause par une fin de conversion


ADC_IT_AWD Interruption cause par un dpassement des seuils de contrle

Le dernier paramtre indique si l'on veut activer ou dsactiver cette interruption. Les
valeurs possibles sont : ENABLE ou DISABLE

Lorsqu'une interruption se produit, on peut consulter la raison pour laquelle elle a eu lieu
grce la fonction :

ITStatus ADC_GetITStatus(convertisseur, interruption)


Le premier paramtre dsigne le convertisseur dont on teste une interruption. Il peut
prendre les valeurs : ADC1 ou ADC2
Le deuxime paramtre dsigne le motif d'interruption test (mmes valeurs que pour le
deuxime paramtre de la fonction prcdente).
La valeur renvoye par cette fonction indique si l'interruption teste a eu lieu ou pas. Les
valeurs possibles sont SET ou RESET.

Enfin pour effacer un indicateur d'interruption on utilise la fonction :

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 31
void ADC_ClearITPendingBit(convertisseur, interruption)
Les deux paramtres sont les mmes que pour la fonction prcdente.

6.12 Guide d'utilisation des convertisseurs


6.12.1 Marche suivre pour initialiser les convertisseurs A/N
1. Dclarer une variable de type ADC_InitTypeDef
2. Activer l'horloge du convertisseur par la fonction RCC_APB2PeriphClockCmd
3. Rinitialiser ce convertisseur par la fonction ADC_DeInit
4. Initialiser la variable de type ADC_InitTypeDef par la fonction ADC_StructInit
5. Dans cette variable indiquer le mode mono/multi mesures et l'utilisation ou pas d'un
dclenchement par timer
6. Programmer le convertisseur par la fonction ADC_Init
7. Choisir la ligne d'entre et programmer le temps de conversion par la fonction
ADC_RegularChannelConfig
8. Autoriser si ncessaire la gnration de certaines ITs par la fonction ADC_ITConfig
9. Activer le convertisseur par la commande ADC_Cmd

Les lignes utilises comme entres des convertisseurs doivent tre programmes en mode
analogique (GPIO_Mode_AIN) (voir 2.2).

6.12.2 Dclencher un convertisseur A/N par programme


La conversion est lance par la fonction ADC_SoftwareStartConvCmd. Si le mode de
conversion est continu le convertisseur recommencera automatiquement une mesure
ds que la prcdente sera termine, sinon il devra tre relanc par la fonction
ADC_SoftwareStartConvCmd.

6.12.3 Dclencher un convertisseur A/N par un timer


1. Programmer le timer de dclenchement pour gnrer un signal sur l'une de ses sorties
en mode PWM1 avec une largeur d'impulsion de 1 au niveau haut (voir chapitre sur
les timers). Le timer et la sortie choisis doivent correspondre aux commandes
possibles du convertisseur.
2. Suivre les tapes 1 9 comme en 6.12.1 Marche suivre pour initialiser les
convertisseurs A/N. Le convertisseur doit tre mis en mode mono mesure puisqu'il est
relanc par le timer.
3. Autoriser la commande du convertisseur par ce timer par la fonction
ADC_ExternalTrigConvCmd
4. Activer le convertisseur par la commande ADC_Cmd

6.12.4 Lire une mesure sur un convertisseur A/N


Elle se fait par la fonction : ADC_GetConversionValue comme seulement 12 bits sont
significatifs la valeur renvoye par cette fonction doit tre ajuste par une opration de
ET avec 0x0FFF

6.12.5 Changer l'entre convertir


On peut changer la ligne d'entre et programmer le temps de conversion sur cette ligne
par la fonction ADC_RegularChannelConfig. Si le convertisseur est en mode mono

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 32
mesure, le changement de l'entre ne peut tre que fait lorsque la conversion en cours
est termine. S'il est en mode continu, il faut l'arrter par la fonction
ADC_SoftwareStartConvCmd avant de changer l'entre.

6.12.6 Utiliser le contrle de seuils sur un convertisseur A/N


1. Suivre les tapes 1 9 comme en 6.12.1.
2. Choisir comment s'applique le contrle de seuil par la fonction
ADC_AnalogWatchdogCmd
3. Dfinir l'entre sur laquelle s'applique le contrle de seuils par la fonction
ADC_AnalogWatchdogSingleChannelConfig
4. Dfinir les seuils haut et bas par la fonction ADC_AnalogWatchdogThresholdsConfig
5. Activer le convertisseur par la commande ADC_Cmd

6.12.7 Consulter/modifier des tats mmoriss ou des ITs de


convertisseurs A/N
Lecture de l'tat mmoris d'un convertisseur par la fonction : ADC_GetFlagStatus
Effacement de l'tat mmoris d'un convertisseur par la fonction : ADC_ClearFlag

Lecture de l'indicateur d'IT d'un convertisseur par la fonction : ADC_GetITStatus


Effacement de l'indicateur d'IT d'un convertisseur par la fonction :
ADC_ClearITPendingBit

7 Convertisseur numrique / analogique (DAC)


Le STM32F107VC dispose de 2 convertisseurs numrique/analogique. Ils permettent de
gnrer des niveaux analogiques. Le DAC peut galement tre programm pour ajouter au
signal produit un niveau de bruit ou un signal triangulaire.

7.1 Remise l'tat initial d'un convertisseur


La fonction DAC_DeInit permet de mettre un convertisseur dans son tat initial (comme aprs
un reset). Sa dfinition est la suivante :

void DAC_DeInit(convertisseur)
Le premier paramtre dsigne le convertisseur. Les valeurs possibles sont :
DAC_Channel_1 ou DAC_Channel_2

7.2 Initialisation d'un convertisseur


La fonction DAC_Init permet d'initialiser un convertisseur. Elle utilise comme paramtre une
structure de donnes de type DAC_InitTypeDef dont les champs sont les suivants :
uint32_t DAC_WaveGeneration
uint32_t DAC_LFSRUnmask_TriangleAmplitude
uint32_t DAC_OutputBuffer

Avant d'tre utilise par DAC_Init cette structure doit tre initialise par la fonction
DAC_StructInit dfinie comme suit :

void DAC_StructInit(structureDInitialisation *)

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 33
Le paramtre est un pointeur sur la structure de type DAC_InitTypeDef initialiser.

Avant d'utiliser la fonction pour initialiser un convertisseur il faut remplir les champs de cette
structure en utilisant valeurs suivantes :

Champ DAC_WaveGeneration, il indique si le convertisseur ajoute un bruit ou un signal


triangulaire au signal produit. Les valeurs possibles sont dcrites dans le tableau suivant :

DAC_WaveGeneration_None Aucun signal n'est ajout


DAC_WaveGeneration_Noise Ajout d'un bruit
DAC_WaveGeneration_Triangle Ajout d'un signal triangulaire

Champ DAC_LFSRUnmask_TriangleAmplitude, il indique le niveau de bruit ou de signal


triangulaire ajout au signal produit. Le signal ajout modifie un ou plusieurs bits de la valeur
crite dans le DAC, ce paramtre permet de choisir le nombre de bits modifis donc
l'amplitude du signal ajout. Les valeurs possibles sont dcrites dans le tableau suivant :

DAC_LFSRUnmask_Bit0 Ajout de bruit : seul le bit 0 est modifi


DAC_LFSRUnmask_Bit1_0 Ajout de bruit : seuls les bits 0 et 1 sont modifis
DAC_LFSRUnmask_Bit2_0 Ajout de bruit : les bits 0 2 sont modifis
DAC_LFSRUnmask_Bit3_0 Ajout de bruit : les bits 0 3 sont modifis
DAC_LFSRUnmask_Bit4_0 Ajout de bruit : les bits 0 4 sont modifis
DAC_LFSRUnmask_Bit5_0 Ajout de bruit : les bits 0 5 sont modifis
DAC_LFSRUnmask_Bit6_0 Ajout de bruit : les bits 0 6 sont modifis
DAC_LFSRUnmask_Bit7_0 Ajout de bruit : les bits 0 7 sont modifis
DAC_LFSRUnmask_Bit8_0 Ajout de bruit : les bits 0 8 sont modifis
DAC_LFSRUnmask_Bit9_0 Ajout de bruit : les bits 0 9 sont modifis
DAC_LFSRUnmask_Bit10_0 Ajout de bruit : les bits 0 10 sont modifis
DAC_LFSRUnmask_Bit11_0 Ajout de bruit : les bits 0 11 sont modifis
DAC_TriangleAmplitude_1 Ajout d'un signal triangulaire d'amplitude 1
DAC_TriangleAmplitude_3 Ajout d'un signal triangulaire d'amplitude 3
DAC_TriangleAmplitude_7 Ajout d'un signal triangulaire d'amplitude 7
DAC_TriangleAmplitude_15 Ajout d'un signal triangulaire d'amplitude 15
DAC_TriangleAmplitude_31 Ajout d'un signal triangulaire d'amplitude 31
DAC_TriangleAmplitude_63 Ajout d'un signal triangulaire d'amplitude 63
DAC_TriangleAmplitude_127 Ajout d'un signal triangulaire d'amplitude 127
DAC_TriangleAmplitude_255 Ajout d'un signal triangulaire d'amplitude 255
DAC_TriangleAmplitude_511 Ajout d'un signal triangulaire d'amplitude 511
DAC_TriangleAmplitude_1023 Ajout d'un signal triangulaire d'amplitude 1023
DAC_TriangleAmplitude_2047 Ajout d'un signal triangulaire d'amplitude 2047
DAC_TriangleAmplitude_4095 Gnration d'un signal triangulaire d'amplitude 4095

Champ DAC_OutputBuffer, il permet d'activer ou non l'amplificateur plac en sortie du DAC.


Les valeurs possibles sont : DAC_OutputBuffer_Enable ou DAC_OutputBuffer_Disable

void DAC_Init(convertisseur, structureDInitialisation *)


Le premier paramtre dsigne le convertisseur initialiser. Il peut prendre les valeurs :
DAC_Channel_1 ou DAC_Channel_2
Le second paramtre est un pointeur sur une structure de type DAC_InitTypeDef prpare
par la fonction DAC_StructInit puis dont les champs ont t remplis en fonction du
fonctionnement dsir.

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 34
7.3 Lancement d'un convertisseur par programme
Le lancement d'un convertisseur se fait par la fonction suivante :

void DAC_Cmd(convertisseur, nouvelEtat)


Le premier paramtre dsigne le convertisseur lancer. Il peut prendre les valeurs :
DAC_Channel_1 ou DAC_Channel_2
Le second paramtre indique si le convertisseur est lanc ou pas. Les valeurs possibles
sont : ENABLE ou DISABLE

7.4 Lignes de sortie des convertisseurs


DAC1 sur PA4
DAC2 sur PA5

Les lignes utilises comme sorties analogiques doivent tre programmes en mode sortie
analogique (voir 2.2).

7.5 Ecriture d'une valeur dans un convertisseur


Elle se fait par les fonctions :

void DAC_SetChannel1Data(tailleEtAlignement, valeur)


void DAC_SetChannel2Data(tailleEtAlignement, valeur)
Le premier paramtre indique la taille et la faon dont sont alignes les valeurs crites
dans le DAC. Il peut prendre les valeurs dcrites dans le tableau suivant :

DAC_Align_12b_R Donnes crites sur 12 bits cadrs droite


DAC_Align_12b_L Donnes crites sur 12 bits cadrs gauche
DAC_Align_8b_R Donnes crites sur 8 bits cadrs droite
Le second paramtre contient la valeur crire qui est contenue dans un mot de 16 bits
et doit correspondre au format dcrit par le premier paramtre.

7.6 Lecture de la valeur d'un convertisseur


On peut lire la valeur actuellement contenue dans un convertisseur par la fonction :

uint16_t DAC_GetDataOutputValue(convertisseur)
Le paramtre dsigne le convertisseur lire. Il peut prendre les valeurs : DAC_Channel_1
ou DAC_Channel_2
La valeur de retour est celle contenue dans ce convertisseur.

7.7 Guide d'utilisation des convertisseurs N/A


7.7.1 Marche suivre pour initialiser les convertisseurs N/A
1. Dclarer une variable de type DAC_InitTypeDef
2. Activer l'horloge du convertisseur par la fonction RCC_APB1PeriphClockCmd
3. Rinitialiser ce convertisseur par la fonction DAC_DeInit
4. Initialiser la variable de type DAC_InitTypeDef par la fonction DAC_StructInit
5. Dans cette variable indiquer si un amplificateur est ou pas plac en sortie et si un
signal doit tre ajout. Dans ce cas indiquer s'il s'agit d'un signal de bruit ou d'un
signal triangulaire et quelle est son amplitude

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 35
6. Programmer le convertisseur par la fonction DAC_Init
7. Activer le convertisseur par la commande DAC_Cmd
8. Recommencer les tapes 3 7 pour chaque convertisseur

Les lignes utilises comme sorties analogiques doivent tre programmes en mode sortie
analogique (voir 2.2).

7.7.2 Ecrire une valeur convertir en analogique


L'criture de la valeur convertir se fait par la fonction DAC_SetChannel1Data ou
DAC_SetChannel2Data selon le convertisseur, cette fonction permet galement de
prciser la taille et l'alignement de la valeur.

7.7.3 Lire la valeur actuellement convertie en analogique


La lecture de la valeur actuellement convertie se fait par la fonction
DAC_GetDataOutputValue

Programmation des priphriques du microcontrleur STM32F107VC


M. Dalmau IUT de Bayonne Pays-Basque 36