Le microcontrˆoleur STM32 : un cœur ARM Cortex-M3
G. Goavec-M´erou, J.-M Friedt
28 f´evrier 2012
Au sein de la gamme des cœurs de processeurs propos´es par ARM, le
Cortex-M3, op´erant sur des registres de 32 bits, fournit un compromis en-
tre une puissance de calcul appr´eciable et une consommation r´eduite qui,
sans atteindre les performances du MSP430 (16 bits), propose n´eanmoins
des modes de veille en vue de r´eduire la consommation moyenne d’une
application. Bien que les nombreux p´eriph´eriques disponibles ainsi que
l’´enorme quantit´e de m´emoire associ´ee `a ce processeur puissent jus-
tifier l’utilisation de biblioth`eques dont une impl´ementation libre est
disponible sous le nom de libopencm3, nous verrons qu’il est possible
d’appr´ehender un certain nombre de ces p´eriph´eriques pour en faire un
usage optimal en acc´edant directement aux registres qui en contrˆolent
l’acc`es. Le cœur M3 est d´eclin´e par de nombreux fondeurs : nous nous
focaliserons ici sur l’impl´ementation de ST Microelectronics sous le nom
de STM32F1 (dans la suite, le microcontrˆoleur sera nomm´e simplement
STM32 car la plupart des applications sont portables sur les autres
mod`eles).
1 Introduction
La famille des microprocesseurs STM32 de ST Microelectronics fournit une vaste gamme de
p´eriph´eriques autour d’un cœur d’ARM Cortex-M3 [CortexM3], allant du simple GPIO (port
d’entr´ee-sortie g´en´eraliste) et interface de communication s´erie synchrone (SPI) ou asynchrone
(RS232) aux interfaces aussi complexes que l’USB, ethernet ou HDMI. Un point remarquable est
qu’un certain nombre de ces processeurs poss`edent deux convertisseurs analogique-num´eriques,
permettant un ´echantillonnage simultan´e de deux grandeurs analogiques. Cadenc´e sur un r´esonateur
interne ou sur un quartz externe haute fr´equence 8 MHz (multipli´e en interne au maximum `a
72 MHz), ce processeur est compatible pour des applications faibles consommations (section 9) avec
un mode veille dont le r´eveil s’obtient par une condition sur une horloge interne ou une interrup-
tion externe. La multiplicit´e des horloges et leur utilisation pour cadencer les divers p´eriph´eriques
est d’ailleurs un des aspects les plus d´eroutant dans la prise en main du STM32.
Notre choix d’investissement de temps sur ce microcontrˆoleur en particulier est dirig´e par
quelques contraintes techniques :
– avant tout, un double convertisseur analogique-num´erique rapide (1 M´echantillons/s) sens´e
garantir la simultan´eit´e des conversions sur deux voies, un point cl´e si du traitement num´erique
additionel est effectu´e sur une combinaison des deux voies,
– une architecture ARM Cortex-M3 exploit´ee par d’autres constructeurs : nous ne nous en-
fermons pas sur une architecture support´ee par un unique fondeur, les principes de base
concernant le cœur du processeur et la toolchain peuvent ˆetre r´eutilis´es ult´erieurement sur
un autre processeur bas´ee sur la mˆeme architecture (par exemple Atmel SAM3),
– un mode veille proposant une consommation raisonnable pour les application embarqu´ees
autonomes qui nous int´eressent.
2 Architecture du processeur – impl´ementation d’un circuit
Le lecteur d´esireux de simplement exploiter un circuit commercialement disponible devrait
pouvoir travailler sur le circuit STM32H103 de Olimex 1.
1. http://www.olimex.com/dev/stm32-h103.html
1