Académique Documents
Professionnel Documents
Culture Documents
SOMMAIRE :
. introduction
. Les registres
. Timer
. ADC
. Remerciement
INTRODUCTION :
STMicroelectronics a développé depuis 2006 une
gamme de microcontrôleur appelée STM32. Ces
processeurs sont basés sur un cœur Cortex M conçu
par ARM. Comme son nom l'indique, ces STM32 sont
des microcontrôleur 32 bits.
+ Le Reference manual
Le morceau de choix avec ses 1137 pages est sans
conteste le Reference manual. Ce document est déjà
plus générique que le précédent puisqu il
’
concerne tous les STM32 F10x (101, 102, 103 105 et
107). Ce document est découpé en chapitres qui
contiennent chacun une partie ou un périphérique
bien spécifique. Par exemple le chapitre 11 est
dédié aux ADC.
’
est appuyé, ouvrir une électrovanne tout ou rien,
détecter la présence d une pièce avec un capteur
’
inductif
…
’
reçoit du process sont binaires. En étant capable
de piloter l état binaire d une broche (en
’
’
entrée ou en sortie), il devient facile d un
’
point de vue fonctionnel de réaliser ces services.
Même si ce n est pas le sujet ici, il faudra tout
’
’ ’
Le timer :
La gestion du temps est une problématique
générique et essentielle pour les systèmes
embarqués et on se doute bien que les
périphériques de type timer vont répondre à ce
besoin. Mais la notion « d unité timer » est plus
’
’
choisie comme étant une broche du circuit, il est
possible de dénombrer un événement. Si le signal
que cette unité voit est une horloge synchrone
(donc un signal carré périodique) dont la
fréquence est fixe et connue, la conversion entre
le nombre de changements d états et le temps
’
écoulé est directe. On parle alors de timer bien
que le mécanisme soit strictement similaire. En
interne, un processeur possède au minimum une
horloge pour cadencer le fonctionnement du cœur.
Les unités de timer sont donc naturellement
connectées à de telles horloges via un diviseur de
fréquence pour pouvoir choisir la base de temps.
’
vaut 0xFFFF et qu un nouveau front apparait il ne
’
’
précédemment accumulée est alors perdue, ce qui
peut être fort regrettable. Un tel événement est
heureusement détectable car l unité va alors
’
’
système (le programme en l occurrence) ne reste
’
pas bloqué dans le traitement qu il exécute
’
(typiquement une boucle infinie). C est donc une
’
sorte de sablier qu il faut venir retourner avant
’
’
alerte (interruption) est levée. Bien évidemment
le temps propre au watchdog (la quantité de sable
dans le sablier) est paramétrable.
Les Capture/Compare :
Ces unités sont en quelque sorte des sous-
fonctions des timers. Elles sont parfois
directement associées aux unités timer, parfois
elles sont indépendantes, mais auquel cas, elles
intègrent une capacité propre de type timer.
La fonction Capture consiste à dater un évènement
lorsqu apparaît sur une broche du circuit un
’
’
mesure le temps pendant lequel un bouton poussoir
a été appuyé.
La fonction Compare est un peu le symétrique. Il
y a toujours un signal de type binaire, mais le
timer est remplacé par un compteur qui compte les
événements (toujours les fronts) qu il détecte
’
sur la broche. Il a également, stocké dans un
registre interne, une valeur dite de comparaison.
Lorsque le compteur égale cette valeur l unité va
’
déclencher une demande d interruption. Exemple
’
d application : je compte le nombre de pièces qui
’
L'ADC :
Le monde que l on cherche à piloter peut nous
’
Converter.
Très généralement cette unité est branchée sur un
multiplexeur, c est à dire que plusieurs broches
’
sont capables de porter un signal analogique et
qu il revient au programmeur de sélectionner
’
’
multiplexeur il doit connecter l ADC.
’
Converter) qui permet de transformer une valeur
numérique en une valeur analogique proportionnelle
permettant de commander le process. Cependant ces
unités sont peu courantes dans une gamme complète
de microcontrôleur. La raison principale est que
ce genre de circuit consomme beaucoup (on
transfère directement de l énergie électrique).
’’
On peut d autant mieux s en passer qu une unité
’
’
Pulse Width Modulation peut très correctement
remplacer un DAC.
’
nommera par la suite des ports d entrée/sortie
’
(I/O ports). Du point de vue logiciel, un port est
un ensemble de registres.
Une broche peut être pilotée soit directement par
le biais de registres dédiés (on parle alors de
General Purpose Input Output, GPIO) soit
indirectement par le biais d un périphérique (on
’
parle alors d Alternate Function). Dans tous les
’
cas, il sera nécessaire de configurer l'étage
électronique qui permet d'interfacer le matériel
et le logiciel.
’
l existence dans la documentation des ports E, F
’
’
microcontrôleur sur lequel nous basons nos
exemples.
Pour désigner un port, nous utiliserons par la
suite la notation GPIO suivie de la lettre le
désignant. Ainsi GPIOA désigne le port A. On
ajoutera parfois un point suivi d un nombre pour
’
désigner la broche, ainsi GPIOB.10 désigne la
broche 10 du port B. Comme les différents ports
sont structurés et fonctionnent de la même
manière, la documentation fait généralement
référence aux GPIOx, où x est à remplacer par la
lettre correspondante au port concerné.
Trouver la bonne adresse
Pour la famille des microcontrôleurs STM32F1xx, le
document de référence est le
https://cutt.ly/auvqrEv disponible sur le site de
la société ST. Nous pouvons y trouver la liste des
adresses associées à chaque périphérique. Ainsi,
nous découvrons page 50 que, par exemple,
l ensemble des registres du port B sont fixés sur
’
’
port.
EXEMPLE :
Passons à un exemple concret. Vous allez créer un
programme qui allume la led branchée sur la broche
5 du port A et l éteindre quand le bouton USER
’
’
du bouton. Pour cela, déclarez dans le main une
variable state :
’
événements. Ces événements sont usuellement
générés par une horloge avec une fréquence fixée.
Dans ce cas, le timer
“
compte le temps
”
d où
’
son nom. Il est cependant possible de configurer
le timer pour compter des événements qui ne sont
pas périodiques, par exemple un signal venant
d une broche et présentant des fronts montants et
’
d événements.
’
’
obtenir un débordement du timer toutes les
secondes ?
Considérons le cas où le prescaler vaut 1, nous
avons alors :
le timer.
Pour cela, la documentation (p. 404) indique que
le bit 0, nommé CEN, du registre CR1 permet de
lancer et d arrêter le compteur. Il
’
faut donc
ajouter
’
Compiler et passer en debug pour vérifier votre
configuration. Mettez un point d arrêt sur la
’
ligne TIM2->CR1 |= TIM1_CR1_CEN et ouvrez la
fenêtre liée au timer 2 dans Peripheral. Vous
devriez observer que les registres ARR et PSC
prennent bien les valeurs 0x270F (pour 9999) et
0x1C1F (pour 7199).
Avancez le simulateur pour lancer le comptage et
observez que le compteur, représenté par le
registre CNT, s incrémente bien.
’
Les interruptions :
Classiquement une interruption est provoquée par
une source extérieure au processeur comme un
périphérique. Le processeur doit donc être capable
de différencier les différentes sources pour
réaliser le traitement voulu. Pour gérer cela, le
processeur dispose d un gestionnaire
’
il va falloir :
.autoriser le périphérique à lancer une
interruption ;
.configurer le processeur pour gérer
l'interruption ;
.écrire le code associé à l
’
interruption.
EXEMPLE :
Pour illustrer ces trois étapes, nous allons
réaliser le clignotement de la LED vu dans le
chapitre précédent, non plus par scrutation, mais
avec une interruption. Pour cela, commençons avec
le code suivant pour lequel le timer 2 est
configuré pour déborder toutes les secondes et la
broche 5 du port A est configurée en sortie pour
contrôler la LED USER.
passer à 1.
Ainsi en ajoutant, la ligne suivante avant le
lancement du timer.
changement.
Donc, essayez, dans la mesure du possible, de
favoriser une implémentation avec des
interruptions.
Le microcontroleur STM32 a deux types
•
d'interruptions :
les exceptions systeme
• • •
les interruptions externes numérotées de 0 a 59
le numéro de l'interruption en cours de service
peut-être connue par
le registre spécial IPSR (Interrupt
•
- Exception du systeme :
-Interruption externes :
-ADC STM32 : caracteristiques principales
• Résolution de 12 bits
• Interruption de fin de conversion
• Mode simple conversion ou conversion continue
• Mode de balayage multi-canal
• Auto-Calibration
• Alignement des donn´ees sur 16 bits (droite ou gauche)
• Temps de conversion programmable canal par canal
• Déclenchement par signal externe
• Mode de conversion discontinue lors de balayage
• Chainage de convertisseur (si le circuit en possède au
moins 2)
• Tension requise entre 2,4 V et 3,6V
• Plage de conversion entre Vref − < Vin < Vref +
• Requete DMA pour la conversion régulière
CR2 de l'ADC)
La premi`ere mise `a 1 du bit ADON met sous tension
•
l'ADC
La seconde mise a 1 du bit ADON d´emarre la conversion
•
quelques µA .
Horloge
l'horloge ADCCLK du convertisseur est synchrone
•
réguliers
Une fois le canal converti
•
réguliers
Une fois le canal converti
•
16bits DR
Le drapeau EOC est positionnée
•
registres ADC :
Remerciement :
Avec un grand plaisir que j'ai realisé ce travail
et je voulais vous remercier infiniment car vous
m'avez donné l'occasion de decouvrir ce type de
microcontrolleur 'STM32'.
Réaliser par : BENHMIMOU MEHDI