La carte STM32F103C8T6, connue sous le nom de « Blue Pill », est le passage le plus simple vers les microcontrôleurs 32 bits : un cœur ARM Cortex-M3 à 72 MHz, 64 Ko de mémoire Flash et 20 Ko de mémoire vive, sur une carte de la taille d’une plaque d’essai. Elle se programme aussi bien depuis l’IDE Arduino que depuis les outils professionnels de ST, et son brochage au pas de 2,54 mm se plante directement sur une plaque d’essai.
C’est la carte qui fait le pont entre le monde Arduino et l’électronique embarquée réelle : plus de vitesse, plus de broches, plus de périphériques, et un microcontrôleur qui se retrouve dans d’innombrables appareils industriels. Pour un projet qui demande du calcul, plusieurs liaisons série, du CAN ou beaucoup d’entrées analogiques, elle coûte moins cher qu’une carte Arduino et va plus loin.
À quoi sert une carte STM32 ?
Un Arduino Uno s’arrête vite sur les projets qui demandent du calcul, des interruptions précises ou plusieurs communications simultanées. La Blue Pill prend le relais sans changer de méthode de travail : le même IDE, le même langage, mais un microcontrôleur nettement plus capable.
- Mesure et instrumentation — deux convertisseurs analogiques-numériques 12 bits pour lire plusieurs capteurs en même temps.
- Robotique et moteurs — minuteries de précision et sorties PWM pour piloter des servomoteurs ou des ponts en H.
- Communication et passerelles — trois USART, deux SPI, deux I2C et un contrôleur CAN pour dialoguer avec du matériel professionnel.
- Régulation et automatisation — un thermostat, un variateur, une séquence d’arrosage ou de remplissage.
- Apprentissage de l’embarqué — le microcontrôleur le plus documenté pour découvrir ARM avant de passer à une carte professionnelle.
- Périphérique USB — le contrôleur USB 2.0 du microcontrôleur permet d’écrire un périphérique qui se présente au PC (clavier, port série, interface de mesure).
Caractéristiques techniques
| Microcontrôleur | STM32F103C8T6, boîtier LQFP48 |
|---|---|
| Cœur | ARM Cortex-M3 32 bits, jeu d’instructions Thumb-2 |
| Fréquence | 72 MHz |
| Mémoire Flash | 64 Ko |
| Mémoire vive | 20 Ko de SRAM |
| Horloge | Quartz 8 MHz sur la carte, multiplié en interne jusqu’à 72 MHz |
| Tension de fonctionnement | 2,0 à 3,6 V — alimentée en 3,3 V sur la carte |
| Alimentation | Port USB ou broche 5 V — régulateur 3,3 V intégré à la carte |
| Entrées/sorties | 32 broches d’entrées/sorties sur les deux rangées latérales, pas de 2,54 mm |
| Entrées analogiques | 10 canaux 12 bits sur deux convertisseurs (PA0 à PA7, PB0 et PB1) |
| Interfaces | 3 USART, 2 SPI, 2 I2C, contrôleur CAN, USB 2.0 pleine vitesse |
| Minuteries | 4 minuteries 16 bits, 2 minuteries avancées pour la commande moteur, horloge temps réel |
| Commandes sur la carte | Bouton RESET, voyant d’alimentation, LED utilisateur, cavaliers BOOT0 et BOOT1 |
| Dimensions | Environ 53 mm × 22 mm, format du modèle d’origine |
Ce que porte la carte
| Le microcontrôleur | La puce centrale, en boîtier carré : c’est elle qui porte la référence et le code de date, à relire au déballage si le lot doit être tracé. |
|---|---|
| Le quartz 8 MHz | La base de temps de la carte. C’est à partir de lui que la puce fabrique ses 72 MHz. |
| Le régulateur | Il transforme les 5 V du port USB ou de la broche 5 V en 3,3 V pour le microcontrôleur. |
| Le connecteur SWD | Quatre broches sur le petit côté : l’accès de programmation et de débogage. |
| Les cavaliers BOOT | Deux cavaliers qui choisissent la mémoire depuis laquelle la puce démarre. |
| La LED utilisateur | Reliée à la broche PC13, allumée à l’état bas. C’est le voyant que l’on fait clignoter pour vérifier une première programmation. |
| Les barrettes de broches | Deux barrettes mâles de 20 broches sont fournies. Sur la photo du produit elles sont présentées non soudées : selon le lot, elles arrivent soudées ou à souder soi-même. Prévoir alors un fer à souder. |
Le brochage : les repères à connaître
Le brochage de la Blue Pill est normalisé d’un lot à l’autre, contrairement à beaucoup de cartes bon marché. Retenez ces broches : elles couvrent la quasi-totalité des premiers montages.
| PA9 et PA10 | Le port série USART1 — TX sur PA9, RX sur PA10. C’est aussi l’interface du chargeur de démarrage d’usine. |
|---|---|
| PA13 et PA14 | SWDIO et SWCLK : les deux lignes de programmation par le connecteur SWD. |
| PC13 | La LED de la carte, allumée quand la sortie est à l’état bas. |
| PB6 et PB7 | SCL et SDA de l’I2C numéro 1. |
| PA5, PA6 et PA7 | SCK, MISO et MOSI du SPI numéro 1, avec PA4 comme sélection de composant. |
| PA0 à PA7, PB0 et PB1 | Les dix entrées analogiques, également utilisables comme entrées/sorties ordinaires. |
| 5 V, 3,3 V et GND | Les alimentations, disponibles sur les deux rangées. GND est présent à plusieurs endroits, ce qui simplifie le câblage. |
| NRST | La remise à zéro, doublée du bouton RESET sur la carte. |
| VBAT | À laisser libre si aucun élément de sauvegarde n’alimente l’horloge temps réel. |
Trois remarques évitent les mauvaises surprises. Les broches PA15, PB3 et PB4 portent des fonctions de débogage actives après chaque remise à zéro : elles redeviennent des entrées/sorties ordinaires dès que le programme les libère. La broche PB2 sert de sélection BOOT1 sur cette carte : mieux vaut l’éviter comme entrée/sortie banale. Enfin, la broche PC13 est prévue par le fabricant pour un usage lent, un voyant d’état : elle ne peut pas piloter de charge et ne doit pas servir de sortie rapide.
Alimentation
La carte s’alimente de trois façons : par son port USB, par la broche 5 V, ou directement en 3,3 V. Une seule à la fois.
- Par le port USB — la méthode du premier essai. Le câble alimente la carte et permet en plus d’utiliser son contrôleur USB dans votre propre programme.
- Par la broche 5 V — alimentation régulée de 5 V, ou pile de 9 V à travers un régulateur. Le régulateur de la carte fait le reste.
- Par la broche 3,3 V — uniquement avec une alimentation 3,3 V déjà régulée. Cette broche est la sortie du régulateur de la carte : y injecter du 5 V l’endommagerait.
Ne cumulez pas deux sources : brancher l’USB alors que la broche 5 V est alimentée met les deux alimentations en opposition. Le niveau logique des entrées/sorties est du 3,3 V. La plupart des broches numériques du STM32F103 sont déclarées tolérantes au 5 V par le fabricant, mais une broche bascule en mode analogique dès qu’elle lit une tension : dans ce mode elle ne supporte plus que 3,3 V et ne doit jamais recevoir davantage.
Programmer la carte : deux méthodes
La première programmation d’une carte neuve se fait par le connecteur SWD ou par le port série. Le port USB de la carte, lui, ne sert pas au téléversement : le microcontrôleur STM32F103C8 n’embarque pas de chargeur de démarrage USB, son chargeur d’usine passe par l’USART1.
Par le connecteur SWD, avec un ST-LINK V2
C’est la méthode la plus fiable et la seule qui permette aussi de déboguer pas à pas. Elle ne demande de toucher à aucun cavalier et fonctionne même si le programme déjà présent plante au démarrage.
| ST-LINK 3,3 V | vers la broche 3,3 V de la carte |
|---|---|
| ST-LINK GND | vers une broche GND de la carte |
| ST-LINK SWDIO | vers SWDIO de la carte |
| ST-LINK SWCLK | vers SWCLK de la carte |
Deux précautions apprises à la dure. La ligne 3,3 V sert d’abord de référence de tension au programmateur : reliez-la même si la carte est alimentée par son propre câble USB, sinon l’outil refuse de travailler en annonçant une tension de cible trop faible. Et ne vous fiez pas à l’ordre des broches sérigraphié sur les clones de programmateur, ni à celui du petit connecteur : repérez GND puis la masse, et vérifiez le reste à l’ohmmètre. Un ST-LINK V2 se raccorde en quatre fils, sans soudure.
Par le port série, avec un convertisseur USB-TTL
Sans programmateur dédié, le chargeur de démarrage d’usine accepte le téléversement par l’USART1. Il faut alors un convertisseur USB-TTL — un adaptateur CP2102, CH340 ou FT232 fait l’affaire.
| Adaptateur TX | vers PA10 de la carte (réception) |
|---|---|
| Adaptateur RX | vers PA9 de la carte (émission) |
| Adaptateur GND | vers une broche GND de la carte |
| Cavalier BOOT0 | sur la position 1 pendant le téléversement, puis de nouveau sur 0 |
Les lignes TX et RX se croisent : l’émission de l’adaptateur entre dans la réception de la carte et inversement. Le cavalier BOOT0 est lu uniquement à la remise à zéro : après l’avoir déplacé, appuyez sur RESET, sinon rien ne change. Une fois le programme envoyé, remettez BOOT0 sur 0 et appuyez de nouveau sur RESET, sans quoi le programme ne démarre jamais — c’est l’oubli le plus courant.
Installer la carte dans l’IDE Arduino
Le support STM32 ne fait pas partie du paquet Arduino de base. Trois étapes, une seule fois :
- Ajouter l’adresse du paquet — dans Fichier, Préférences, champ « URL de gestionnaire de cartes supplémentaires » :
https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json. - Installer le paquet — dans Outils, Gestionnaire de cartes, chercher « STM32 » par STMicroelectronics, puis installer.
- Choisir la carte — dans Outils, Type de carte, sélectionner « Generic STM32F1 series », puis « BluePill F103C8 » comme modèle, et régler la méthode de téléversement sur « STM32CubeProgrammer (SWD) » ou « (Serial) » selon votre câblage.
Pour les projets plus ambitieux, STM32CubeIDE offre le débogage pas à pas et la configuration graphique des broches, à partir de la même carte.
Mini-projet : deux LED qui clignotent en alternance
Le premier programme à faire tourner sur une carte neuve tient en deux vérifications : la carte se laisse programmer, et elle exécute bien ce qu’on lui demande. On fait clignoter la LED déjà présente sur la carte, et une seconde LED montée sur la plaque d’essai, pendant que la carte raconte son état sur le port série.
Ce qu’il faut
| La carte | La STM32F103C8T6 de cette page, avec ses barrettes soudées |
|---|---|
| Le programmateur | Le ST-LINK V2 ou le convertisseur USB-TTL décrits plus haut — l’un des deux suffit |
| Le support | Plaque d’essai 830 points, assez large pour la carte et ses deux rangées |
| Les liaisons | Fils de prototypage mâle-mâle, pour relier la plaque à la carte |
| La LED externe | LED 5 mm bleue, livrée par dix |
| La résistance | Résistance 1/4 W de 330 ohms, en série avec la LED |
La résistance n’est pas facultative : sans elle, la LED appelle un courant que la broche de sortie ne peut pas fournir, et c’est le microcontrôleur qui souffre. Avec 330 ohms sous 3,3 V, le courant reste autour de 6 milliampères, largement dans les limites de la broche.
Le câblage
| LED externe, patte longue | vers la broche PB12 de la carte |
|---|---|
| LED externe, patte courte | vers la résistance de 330 ohms |
| Résistance, autre patte | vers une broche GND de la carte |
| Adaptateur ou programmateur | raccordé comme décrit plus haut, GND commun |
La patte longue de la LED est l’anode, la patte courte la cathode. Si vous inversez les deux, rien ne s’allume et rien ne casse : retournez simplement la LED. Pour lire les messages de la carte, laissez l’adaptateur USB-TTL branché sur PA9, PA10 et GND, et ouvrez le moniteur série de l’IDE à 9600 bauds.
Le programme
À copier dans l’IDE Arduino, après avoir choisi la carte et la méthode de téléversement, puis à envoyer :
/*
* Deux LED en alternance - carte STM32F103C8T6 (Blue Pill)
* LED de la carte sur PC13, allumee quand la sortie est a l'etat bas
* LED externe sur PB12, allumee quand la sortie est a l'etat haut
* Messages d'etat sur l'USART1, broches PA9 et PA10
*
* Composants, brochage et fiche complete : www.marocproduits.com
*/
const int LED_CARTE = PC13;
const int LED_EXTERNE = PB12;
int periode = 1000; // duree d'un etat, en millisecondes
void setup() {
pinMode(LED_CARTE, OUTPUT);
pinMode(LED_EXTERNE, OUTPUT);
Serial.begin(9600); // USART1 : PA9 en emission, PA10 en reception
Serial.println("Carte prete");
}
void loop() {
digitalWrite(LED_CARTE, LOW); // LOW allume la LED de la carte
digitalWrite(LED_EXTERNE, HIGH); // HIGH allume la LED externe
Serial.print("LED externe allumee, periode en millisecondes : ");
Serial.println(periode);
delay(periode);
digitalWrite(LED_CARTE, HIGH); // HIGH eteint la LED de la carte
digitalWrite(LED_EXTERNE, LOW);
delay(periode);
}Comment ça marche
setup()ne s’exécute qu’une fois, au démarrage : il déclare les deux broches en sortie et ouvre le port série.loop()tourne ensuite sans fin. Chaque passage allume une LED et éteint l’autre, attend, puis inverse.- La LED de la carte s’allume à l’état bas, la LED externe à l’état haut : c’est une différence de câblage, pas une incohérence. La première est montée entre la broche et le 3,3 V, la seconde entre la broche et la masse.
Serialest ici l’USART1. Branchez l’adaptateur USB-TTL sur PA9, PA10 et GND pour lire les messages ; une fois le programme installé, BOOT0 doit être revenu sur 0.- Pour ralentir ou accélérer le clignotement, il suffit de changer la valeur de
periode: 200 pour un clignotement rapide, 2000 pour un signal lent.
Variante : lire une tension et l’afficher sur un écran
Une fois ce premier programme validé, la suite naturelle est d’ajouter un afficheur autonome. Un afficheur LCD 16 par 2 en I2C ne demande que quatre fils — alimentation, masse, et les deux lignes I2C sur PB6 et PB7 — et affiche en clair la valeur lue sur une entrée analogique. Un potentiomètre ou un capteur branché sur PA0 fournit la mesure, et la conversion 12 bits donne une résolution de 4096 points, bien plus fine que les 1023 points d’une carte Arduino.
Questions fréquentes
Peut-on téléverser le programme par le port USB de la carte ?
Non. Le port USB alimente la carte, et le contrôleur USB du microcontrôleur peut servir dans votre propre programme : la carte se présente alors au PC comme un périphérique écrit par vous. Mais le STM32F103C8 n’a pas de chargeur de démarrage USB en mémoire d’usine : pour téléverser un programme, il faut le connecteur SWD ou le port série.
La carte peut-elle remplacer un Arduino Uno ?
Pour tout ce qui est électriquement ordinaire, oui : la même boucle setup() et loop(), les mêmes fonctions de base, trois fois plus rapide. Deux différences à retenir : la tension de travail est de 3,3 V et non de 5 V, et certaines bibliothèques écrites pour les puces AVR doivent être remplacées par leurs équivalents STM32.
Quelle est la différence entre les deux méthodes de programmation ?
Le SWD, avec un programmateur, téléverse en quelques secondes et permet de déboguer le programme pas à pas. Le port série ne demande qu’un adaptateur bon marché, mais impose de déplacer le cavalier BOOT0 et d’appuyer sur RESET à chaque envoi, et n’offre aucun débogage. Pour un travail régulier, le programmateur fait gagner beaucoup de temps.
La carte est-elle tolérante au 5 V ?
La plupart des broches numériques sont déclarées tolérantes au 5 V par le fabricant. En revanche, dès qu’une broche lit une tension en mode analogique, elle ne supporte plus que 3,3 V, avec un maximum absolu de 3,6 V : un capteur alimenté en 5 V dont la sortie dépasse cette limite doit passer par un diviseur de tension.
Pourquoi la LED de la carte s’allume-t-elle quand on met la sortie à zéro ?
Parce qu’elle est câblée entre la broche et le 3,3 V. La sortie à l’état haut n’établit aucune différence de tension aux bornes de la LED, qui reste éteinte ; la sortie à l’état bas crée la différence et la LED s’allume. Une LED montée entre la broche et la masse fonctionne exactement à l’inverse, comme celle du mini-projet.
Faut-il souder les barrettes de broches ?
Selon le lot, la carte arrive avec ses barrettes soudées ou avec les deux barrettes à souder soi-même — c’est le cas sur la photo de ce produit, où elles sont présentées libres. Si vous devez les souder, positionnez-les d’abord sur une plaque d’essai : elles resteront bien parallèles. Cette étape ne se rattrape pas facilement, un pistolet à air chaud ou une tresse à dessouder étant nécessaires pour reprendre un alignement.
À combiner avec
Pour transformer la carte en station de mesure autonome, un capteur de température et d’humidité AM2302 se raccorde sur une seule broche de données et affiche ses mesures sur le moniteur série ou sur l’écran I2C cité plus haut — l’humidité, en plus de la température, est ce qui distingue ce capteur de son prédécesseur. Et si le projet doit fonctionner sans ordinateur à portée, la carte s’alimente par sa broche 5 V depuis une pile de 9 V associée à un régulateur, ou depuis deux cellules lithium avec un module d’alimentation dédié. Pour débuter sans multiplier les références, la plaque d’essai, les fils et les deux LED cités dans le mini-projet suffisent à couvrir les premières semaines.







