Programmation Des Périphériques Du STM32F107VC PDF
Programmation Des Périphériques Du STM32F107VC PDF
Programmation Des Périphériques Du STM32F107VC PDF
du microcontrleur
STM32F107VC
Avant d'tre utilise par GPIO_Init cette structure doit tre initialise par la fonction
GPIO_StructInit dfinie comme suit :
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 +
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
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
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
Le second paramtre indique si la redirection est faite ou pas. Les valeurs possibles de
ce paramtre sont : ENABLE ou DISABLE
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
void NVIC_Init(structureDInitialisation *)
Le paramtre est un pointeur sur une structure de type NVIC_InitTypeDef dont les champs
ont t remplis.
Les procdures d'interruption ont des noms prdfinis du type : xxx_IRQHandler (voir tableau en
3.3).
void EXTI_DeInit ()
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_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)
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
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.
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
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.
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_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.
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).
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) :
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 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 ).
void TIM_InternalClockConfig(timer)
Le paramtre dsigne le timer pour lequel on veut utiliser l'horloge interne. Il peut
prendre les valeurs : TIM1 TIM7
Pour utiliser la ligne ETR comme horloge externe la fonction est la suivante :
Pour utiliser un autre timer comme horloge externe il faut utiliser le chanage de timers (voir
5.9).
Pour tablir le lien entre le matre et l'esclave (qui pilote qui) on utilise la fonction suivante :
Le timer matre doit tre programm pour piloter le timer esclave. Ceci est obtenu par la
fonction suivante :
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 :
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).
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 :
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
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
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
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.
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 :
Selon la ligne choisie (CH1 CH4), l'initialisation de la ligne se fait alors par l'une des
fonctions :
Le contenu des registres CCRi utiliss pour la gnration de signaux peut tre modifi sans
rinitialiser les lignes par les fonctions :
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 :
La valeur en retour indique l'tat de cet indicateur. Les valeurs possibles sont : SET ou
RESET.
Le dernier paramtre indique si l'interruption doit tre active ou dsactive. Les valeurs
possibles sont ENABLE ou DISABLE.
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.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 ).
void ADC_DeInit(convertisseur)
Le paramtre dsigne le convertisseur. Les valeurs possibles sont : ADC1 ou ADC2
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 :
Remarque : Lorsque les conversions sont dclenches par timer le premier paramtre doit tre
DISABLE.
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
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)
La valeur en retour indique l'tat de cet indicateur. Les valeurs possibles sont : SET ou
RESET.
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 :
Les lignes utilises comme entres des convertisseurs doivent tre programmes en mode
analogique (GPIO_Mode_AIN) (voir 2.2).
void DAC_DeInit(convertisseur)
Le premier paramtre dsigne le convertisseur. Les valeurs possibles sont :
DAC_Channel_1 ou DAC_Channel_2
Avant d'tre utilise par DAC_Init cette structure doit tre initialise par la fonction
DAC_StructInit dfinie comme suit :
void DAC_StructInit(structureDInitialisation *)
Avant d'utiliser la fonction pour initialiser un convertisseur il faut remplir les champs de cette
structure en utilisant valeurs suivantes :
Les lignes utilises comme sorties analogiques doivent tre programmes en mode sortie
analogique (voir 2.2).
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.
Les lignes utilises comme sorties analogiques doivent tre programmes en mode sortie
analogique (voir 2.2).