Le ST-LINK V2 est le programmateur et débogueur de STMicroelectronics, dans sa version la plus répandue : un boîtier qui se branche directement sur un port USB et qui écrit dans la mémoire d’un microcontrôleur STM32 ou STM8, sans carte intermédiaire, sans bootloader et sans adaptateur série.
Il parle les deux protocoles de programmation de ST : le SWD pour les STM32, une liaison de deux fils plus la masse, et le SWIM pour les STM8. Il peut aussi alimenter la carte cible en 3,3 V ou en 5 V, et il se présente à l’ordinateur comme un ST-LINK/V2 officiel : les outils de ST le reconnaissent sans configuration.
Ce qui le distingue d’une simple programmation par port série, c’est le débogage. Par le même câble, on pose un point d’arrêt dans le programme, on lit la valeur d’une variable, on avance instruction par instruction. Un programme qui « ne fait rien » se diagnostique alors en quelques minutes au lieu de se deviner à coups de voyants qui clignotent.
À quoi sert un ST-LINK V2 ?
- Programmer une carte STM32 — « blue pill », carte Nucleo, Discovery, ou un circuit monté sur mesure, par le connecteur SWD.
- Programmer un STM8 — par la ligne SWIM, le protocole à un fil de la famille STM8.
- Déboguer en direct — points d’arrêt, exécution pas à pas, inspection des variables et des registres, depuis STM32CubeIDE ou un autre environnement.
- Graver un bootloader — installer un chargeur de démarrage sur une carte qui n’en a pas, et se passer ensuite du programmateur pour les mises à jour par USB.
- Récupérer une carte devenue injoignable — un téléversement interrompu, un programme qui désactive les broches de débogage : la remise à zéro matérielle remet la carte en service.
- Alimenter une petite cible — 3,3 V ou 5 V pris sur le port USB pour une carte seule, le temps de la programmer.
Caractéristiques techniques
| Rôle | Programmateur et débogueur pour microcontrôleurs STM32 (SWD) et STM8 (SWIM) |
|---|---|
| Interface vers l’ordinateur | USB 2.0, prise mâle type A solidaire du boîtier : le programmateur se branche directement, sans câble |
| Identité USB | Se présente comme un ST-LINK/V2 de STMicroelectronics, identifiant 0483:3748 |
| Interface vers la cible | SWD (deux fils plus masse) pour les STM32, SWIM pour les STM8 |
| Connecteur cible | 10 broches, deux rangées de 5, pas de 2,54 mm |
| Alimentation du programmateur | Prise sur le port USB, aucune alimentation externe |
| Alimentation fournie à la cible | 3,3 V (broches 7 et 8) et 5 V (broches 9 et 10), pris sur le port USB — réserve de courant faible, à réserver à une carte seule |
| Voyant | Une LED d’activité, qui clignote pendant la programmation |
| Boîtier | Métallique, embouts en plastique noir, capuchon de protection sur la prise USB |
| Câble | Câble ruban fourni, qui ramène les signaux sur des embouts femelles séparés |
| Logiciels compatibles | STM32CubeProgrammer, STM32CubeIDE, ST-LINK Utility, Keil MDK, IAR Embedded Workbench, OpenOCD, PlatformIO, IDE Arduino avec le cœur STM32 |
| Systèmes | Windows avec le pilote ST-LINK de ST ; Linux et macOS sans pilote, avec les droits d’accès au périphérique USB |
Le brochage du connecteur 10 broches
Six signaux utiles se partagent ce connecteur : la remise à zéro, l’horloge et la donnée du SWD, la ligne SWIM, la masse et les deux tensions d’alimentation. Le reste, ce sont des masses et des alimentations supplémentaires.
Deux dispositions circulent sur le marché, et elles ne se devinent pas à l’œil. Les deux familles de programmateurs ont le même boîtier et une sérigraphie presque identique, mais les broches 2 à 6 n’y portent pas les mêmes signaux :
| Broche | Série courante | Autre série |
|---|---|---|
| 1 | RST | RST |
| 2 | SWDIO | SWCLK |
| 3 | GND | SWIM |
| 4 | GND | SWDIO |
| 5 | SWIM | GND |
| 6 | SWCLK | GND |
| 7 et 8 | 3,3 V | 3,3 V |
| 9 et 10 | 5 V | 5 V |
Le multimètre tranche en trente secondes. Programmateurs débranchés, en mode continuité : sur la série courante, les broches 3 et 4 sont reliées entre elles — deux masses côte à côte — et le SWIM se trouve en 5. Sur l’autre série, ce sont les broches 5 et 6 qui sont reliées, et le SWIM se trouve en 3. La sérigraphie du boîtier n’est pas une garantie : des exemplaires portent l’une des deux dispositions imprimée alors que le circuit est câblé selon l’autre, et certains documents marchands donnent même une combinaison qui ne correspond à aucun exemplaire réel.
La tension et la masse, elles, ne se déplacent pas : 3,3 V en 7 et 8, 5 V en 9 et 10 sur les deux séries. Un fil de masse posé par erreur sur une ligne de données ne détruit rien, mais la liaison ne s’établit pas — c’est exactement le symptôme d’un brochage deviné plutôt que vérifié.
Le câblage vers une carte STM32, en SWD
Programmateur SWDIO | → la broche SWDIO de la carte : PA13 sur un STM32F103 |
|---|---|
Programmateur SWCLK | → la broche SWCLK de la carte : PA14 sur un STM32F103 |
Programmateur GND | → la masse de la carte — le fil indispensable, c’est la référence commune des deux côtés |
Programmateur 3,3 V | → le 3,3 V de la carte, uniquement si elle n’est pas alimentée par ailleurs |
Programmateur RST | → la remise à zéro de la carte (NRST) — facultatif, utile seulement pour une carte verrouillée |
Trois fils suffisent pour programmer : SWDIO, SWCLK et GND. Sur une carte de développement, ces signaux sont presque toujours regroupés sur un petit connecteur marqué SWD, sur lequel la sérigraphie nomme les quatre broches. Branchez celles-ci par leur nom, pas par leur position : l’ordre change d’une carte à l’autre, et une horloge et une donnée inversées donnent un programmateur muet.
Le câblage vers un STM8, en SWIM
Le STM8 se programme par une seule ligne de données, mais il a besoin en plus de la remise à zéro : le protocole SWIM fait entrer le microcontrôleur en mode programmation par une impulsion sur NRST. Trois fils, donc — SWIM, RST et GND — plus l’alimentation si la cible n’est pas alimentée par ailleurs. Si une programmation SWIM expire en boucle, le fil de remise à zéro est presque toujours en cause.
Ce qu’il peut programmer
Le programmateur reconnaît le microcontrôleur STM32 ou STM8 qu’on lui présente, et c’est le logiciel de programmation qui tient la liste des modèles pris en charge. En pratique, toute la production ST récente passe par là :
- STM32 — séries F0, F1, F2, F3, F4, F7, L0, L1, L4, G0, G4, H7, et leurs équivalents en boîtier nu comme sur carte de développement.
- STM8 — séries STM8S et STM8L, par la ligne SWIM.
- Bootloaders — gravure d’un chargeur de démarrage série ou USB sur une carte qui n’en a pas, ce qui la rend ensuite programmable sans programmateur.
- Autres cœurs ARM Cortex-M — OpenOCD sait piloter un ST-LINK pour d’autres microcontrôleurs de la même architecture, mais le support n’est garanti que sur les puces ST.
Mini-projet : programmer une carte STM32 et faire clignoter sa LED
C’est le montage qui montre à quoi sert un ST-LINK : une carte qui n’a jamais été programmée, pas de bootloader, pas de port série, et un programme qui tourne à la fin. Comptez vingt minutes, dont l’essentiel passé à installer les deux logiciels.
Ce qu’il faut
| Le programmateur | Le ST-LINK V2 de cette page |
|---|---|
| La carte cible | carte STM32F103C8T6, la « blue pill », vendue neuve et non programmée |
| Les liaisons | fils de prototypage, ou le câble ruban fourni avec le programmateur |
| Les logiciels | Le STM32CubeProgrammer de STMicroelectronics, et l’IDE Arduino avec le cœur « STM32 MCU based boards » |
Le câblage
La blue pill porte, sur un de ses bords, un petit connecteur 4 broches dont la sérigraphie nomme les signaux 3V3, DIO, CLK et GND. C’est tout ce dont le SWD a besoin :
Programmateur SWDIO | → broche DIO du connecteur SWD de la carte |
|---|---|
Programmateur SWCLK | → broche CLK |
Programmateur GND | → broche GND |
Programmateur 3,3 V | → broche 3V3, sauf si la carte est déjà alimentée par sa prise micro-USB |
Les deux cavaliers BOOT0 et BOOT1 de la carte restent sur la position 0 : le SWD n’en dépend pas, et la carte démarrera sur le programme qu’on vient de graver. Avant de téléverser, vérifiez une dernière fois que le SWDIO et le SWCLK ne sont pas inversés — c’est de loin la première cause d’un programmateur qui répond « impossible de se connecter à la cible ».
Les réglages, une seule fois
- Installer le STM32CubeProgrammer de STMicroelectronics, et vérifier que son dossier
binest bien dans le chemin de recherche du système : l’IDE Arduino n’embarque pas l’outil de programmation, il l’appelle. - Dans l’IDE Arduino, ajouter l’adresse du gestionnaire de cartes du cœur STM32 dans les préférences, puis installer STM32 MCU based boards depuis le gestionnaire de cartes.
- Ouvrir ensuite le menu Outils et régler trois entrées : type de carte Generic STM32F1 series, Board part number BluePill F103C8, et méthode de téléversement STM32CubeProgrammer (SWD).
- Brancher le programmateur sur un port USB de l’ordinateur : sa LED doit s’allumer. C’est le seul voyant à surveiller, et il clignotera à chaque écriture.
- Écrire ou coller le programme ci-dessous, puis lancer le téléversement.
Le programme
À coller dans l’IDE Arduino, puis à téléverser avec le ST-LINK branché :
/*
* Clignotant sur une carte STM32F103C8T6 (blue pill), programme par un ST-LINK V2
* Carte : BluePill F103C8, coeur "STM32 MCU based boards"
* Methode d'upload : STM32CubeProgrammer (SWD)
* Liaisons : SWDIO, SWCLK et GND entre le ST-LINK et le connecteur SWD de la carte
*
* Composants, brochage et fiche complete : www.marocproduits.com
*/
void setup() {
pinMode(PC13, OUTPUT); // PC13 = la LED presente sur la carte
}
void loop() {
digitalWrite(PC13, LOW); // LED allumee
delay(500);
digitalWrite(PC13, HIGH); // LED eteinte
delay(500);
}Comment ça marche
PC13est la broche du port C qui porte la LED de la blue pill : elle est câblée entre le 3,3 V et cette broche, donc elle s’allume quand la sortie est mise à l’état bas. Sur quelques cartes le câblage est inverse, mais le clignotement reste visible dans les deux cas.pinModeetdigitalWritefont ici exactement ce qu’ils font sur une carte Arduino : le cœur STM32 se charge des registres du microcontrôleur à votre place.- Rien ne passe par le port série. Le programme est écrit dans la mémoire flash par le SWD, donc la carte n’a pas besoin de bootloader : une puce sortie d’usine se programme directement, ce qu’aucun téléversement série ne permet.
- L’IDE Arduino signale la fin du téléversement et le compteur de mémoire utilisée ; le voyant du programmateur clignote pendant l’écriture.
- La même liaison, utilisée depuis un environnement qui sait déboguer, permet ensuite de poser un point d’arrêt et de lire les variables pendant que le programme tourne.
Si le téléversement échoue
- « STM32_Programmer_CLI not found » — le STM32CubeProgrammer n’est pas installé, ou son dossier
binn’est pas dans le chemin de recherche. Le programme est compilé, mais ne part pas vers la carte. - « Impossible de se connecter à la cible » — dans l’ordre : masse non reliée, SWDIO et SWCLK inversés, broches du programmateur déduites au lieu d’être vérifiées par continuité, carte non alimentée.
- La connexion échoue alors que le câblage est bon — l’outil de programmation ouvert en parallèle occupe déjà le programmateur. Le fermer avant de téléverser depuis l’IDE Arduino.
- La carte a déjà été programmée, mais ne répond plus — voir la variante ci-dessous : c’est le cas où le fil de remise à zéro devient utile.
Variante : remettre en service une carte devenue injoignable
Une carte dont le programme désactive les broches de débogage, ou dont la mémoire a été effacée au milieu d’une écriture, ne se laisse plus joindre par le SWD : la liaison s’établit après le démarrage du programme fautif, donc trop tard. Le programmateur, lui, sait prendre la main avant.
- Ajouter un cinquième fil : la broche
RSTdu programmateur vers la brocheNRSTde la carte. - Ouvrir le STM32CubeProgrammer, choisir le mode de connexion « sous remise à zéro » (Under reset) et la remise à zéro matérielle, puis connecter. Le programmateur maintient la carte en reset pendant qu’il établit la liaison SWD.
- Lancer un effacement complet de la mémoire (« Full chip erase »), ce qui efface le programme fautif.
- Revenir au mode normal et téléverser le programme voulu. Sans le fil de remise à zéro, cette récupération est impossible : c’est le seul cas où ce cinquième fil sert.
Questions fréquentes
Faut-il un pilote sous Windows ?
Oui. Le pilote USB de ST, distribué gratuitement sous la référence STSW-LINK009, doit être installé avant de brancher un ST-LINK/V2 : sans lui, le programmateur n’énumère pas correctement et la plupart des logiciels ne le voient pas. Sous Linux et macOS, il n’y a aucun pilote à installer, mais le système doit accorder à l’utilisateur le droit d’accéder au périphérique USB — c’est le rôle des règles fournies avec l’utilitaire de mise à jour du firmware de ST.
Le programmateur peut-il alimenter la carte cible ?
Oui : 3,3 V sur les broches 7 et 8, 5 V sur les broches 9 et 10, tous deux pris sur le port USB. La réserve de courant reste celle d’un port USB, ce qui suffit pour une carte seule et ne suffit pas pour un montage à moteurs, à servomoteurs ou à afficheur rétroéclairé. Et dès que la carte a sa propre alimentation, mieux vaut ne pas relier ces broches : deux sources en parallèle ne font pas bon ménage.
Peut-il servir de port série pour le moniteur série ?
Non. Les cartes Nucleo embarquent un ST-LINK qui expose en plus un port série virtuel, mais ce dongle se limite au débogage : il n’y a aucun port COM à ouvrir. Pour afficher ce qu’un programme STM32 envoie sur sa liaison série, il faut ajouter un convertisseur USB vers série et le brancher sur les broches TX et RX de la carte.
Quelle différence avec un ST-LINK officiel ?
Le programmateur officiel de ST expose un connecteur 20 broches qui ajoute le JTAG et la trace SWO, et ses versions récentes proposent un port série virtuel. Le dongle, lui, se limite au SWD et au SWIM, ce qui couvre la totalité des usages de programmation et de débogage des STM32 et STM8. Les outils de ST le reconnaissent comme un ST-LINK/V2 standard et toutes les fonctions de base sont disponibles.
Faut-il mettre à jour son firmware ?
Non, dans la grande majorité des cas. ST distribue un utilitaire de mise à jour (STSW-LINK007) qui fonctionne aussi sur ces exemplaires, mais un programmateur qui programme correctement n’a rien à y gagner — et une mise à jour interrompue rendrait le boîtier inutilisable. À ne tenter que si l’appareil se comporte anormalement, et seulement après avoir vérifié le câblage et les logiciels.
Un programme qui clignote ne prouve pas qu’il tourne correctement. Comment aller plus loin ?
C’est justement l’intérêt du SWD : dans STM32CubeIDE, on lance la session de débogage et l’exécution s’arrête où l’on veut. On regarde alors la valeur des variables, l’état des registres du microcontrôleur, et le temps passé dans chaque portion du programme — des informations qu’aucun voyant ne donne.
À combiner avec
Pour suivre ce que le programme écrit sur sa liaison série, un convertisseur USB vers série complète parfaitement le programmateur : le ST-LINK s’occupe de la flash et du débogage, le convertisseur du dialogue avec l’ordinateur. Pour monter la carte et ses périphériques sans souder quoi que ce soit, une plaque d’essai 830 points sert de support à tout le montage. Et quand un signal ne se comporte pas comme prévu, un analyseur logique USB montre ce qui circule réellement sur les broches, ce que le débogueur ne voit pas.











