Blue Pill

Les ATMegas (coeur des Arduinos) sont limités en mémoire, GPIO et puissance de processeur, j'ai voulu expérimenter une alternative de la famille des STM32 : le STM32F103C8. Ce micro controlleur est doté de 37 GPIOs, 64 Ko de flash, 20 Ko de RAM et un processeur 32 bit à base d'ARM à 72 MHz. Et la carte ne coûte que quelques euros =)
STM32F103C8T6 Bluepill

De nombreux clones existent sur le marché, fonctionnant plus ou moins bien. La première chose à vérifier est que le programme chargé par défaut fait bien clignoté la led intégrée au PCB, ce qui est bien le cas. La suite consiste à le flasher, et là, les choses se gâtent :'(.

Mon objectif est d'utiliser ce µC pour faire un clavier avec qmk. Le bootloader supporté est STM32duino : il permet de le flasher en mode DFU, c'est à dire directement par l'USB sans passer par un programmateur externe.

Pour installer ce bootloader, j'ai testé plusieurs méthodes avant d'arriver à quelque choses qui marche : le flashage via un port série, le flashage via l'IDE Arduino en ayant installé la carte… J'étais un peu perdu car mon expérience se limite aux Arduinos qui fonctionnent du premier coup. Et je ne concevais pas qu'il faille utiliser un programmateur externe et manipuler des cavaliers (pièces jaunes sur la photo) à chaque programmation.

Bref, après pas mal de recherches (autant sur le net que dans mon matériel), l'unique méthode qui fonctionne pour moi est d'utiliser un programmateur via un st-link v2 :

STM32F103C8T6 Bluepill avec le programmateur st-link v2

Le branchement s'effectue avec 4 fils Dupont femelle↔femelle via le port SWD situé à l'opposé du connecteur USB en respectant le nommage décrit sur le verso du PCB du STM32 vers le programmateur st-link v2.

Il faut installer stlink, brancher le programmateur sur un port USB de l'ordinateur, basculer en mode flashage le µC en changant la position du jumper `BOOT0` à 1, puis lancer la commande suivante afin de verifier que tout est bien reconnu :

st-info --probe
Found 1 stlink programmers
  version:    V2J37S7
  serial:     49FF6C064883545336561087
  flash:      131072 (pagesize: 1024)
  sram:       20480
  chipid:     0x0410
  descr:      F1xx Medium-density

Récupérer le firmware dans le dossier binaries/generic_boot20_pc13.bin et flasher :

st-flash write generic_boot20_pc13.bin 0x8000000
st-flash 1.7.0
2021-05-13T16:39:02 INFO common.c: F1xx Medium-density: 20 KiB SRAM, 128 KiB flash in at least 1 KiB pages.
file generic_boot20_pc13.bin md5 checksum: f6d7639c776ddc06d62a1b612ef7876, stlink checksum: 0x00192077
2021-05-13T16:39:02 INFO common.c: Attempting to write 22268 (0x56fc) bytes to stm32 address: 134217728 (0x8000000)
2021-05-13T16:39:02 INFO common.c: Flash page at addr: 0x08000000 erased
2021-05-13T16:39:02 INFO common.c: Flash page at addr: 0x08000400 erased
2021-05-13T16:39:02 INFO common.c: Flash page at addr: 0x08000800 erased
2021-05-13T16:39:02 INFO common.c: Flash page at addr: 0x08000c00 erased
2021-05-13T16:39:02 INFO common.c: Flash page at addr: 0x08001000 erased
2021-05-13T16:39:02 INFO common.c: Flash page at addr: 0x08001400 erased
2021-05-13T16:39:02 INFO common.c: Flash page at addr: 0x08001800 erased
2021-05-13T16:39:02 INFO common.c: Flash page at addr: 0x08001c00 erased
2021-05-13T16:39:02 INFO common.c: Flash page at addr: 0x08002000 erased
2021-05-13T16:39:02 INFO common.c: Flash page at addr: 0x08002400 erased
2021-05-13T16:39:02 INFO common.c: Flash page at addr: 0x08002800 erased
2021-05-13T16:39:02 INFO common.c: Flash page at addr: 0x08002c00 erased
2021-05-13T16:39:02 INFO common.c: Flash page at addr: 0x08003000 erased
2021-05-13T16:39:02 INFO common.c: Flash page at addr: 0x08003400 erased
2021-05-13T16:39:02 INFO common.c: Flash page at addr: 0x08003800 erased
2021-05-13T16:39:02 INFO common.c: Flash page at addr: 0x08003c00 erased
2021-05-13T16:39:02 INFO common.c: Flash page at addr: 0x08004000 erased
2021-05-13T16:39:02 INFO common.c: Flash page at addr: 0x08004400 erased
2021-05-13T16:39:02 INFO common.c: Flash page at addr: 0x08004800 erased
2021-05-13T16:39:02 INFO common.c: Flash page at addr: 0x08004c00 erased
2021-05-13T16:39:02 INFO common.c: Flash page at addr: 0x08005000 erased
2021-05-13T16:39:02 INFO common.c: Flash page at addr: 0x08005400 erased
2021-05-13T16:39:02 INFO common.c: Finished erasing 22 pages of 1024 (0x400) bytes
2021-05-13T16:39:02 INFO common.c: Starting Flash write for VL/F0/F3/F1_XL
2021-05-13T16:39:02 INFO flash_loader.c: Successfully loaded flash loader in sram
2021-05-13T16:39:02 INFO flash_loader.c: Clear DFSR
 22/ 22 pages written
2021-05-13T16:39:03 INFO common.c: Starting verification of write complete
2021-05-13T16:39:03 INFO common.c: Flash written and verified! jolly good!

Repasser le jumper `BOOT0` à 0, débrancher le stlink, connecter le cable USB au STM32 puis lancer une console série :

screen /dev/cu.usbmodem14401
 
Congratulations, you have installed the STM32duino bootloader
See https://github.com/rogerclarkmelbourne/STM32duino-bootloader
 
 
For more information about Arduino on STM32
See https://www.stm32duino.com

La trace ci dessus indique que le bootloader a bien été remplacé =).

L'IDE Arduino est utilisable pour programmer le STM32. Il faut ajouter l'adresse http://dan.drown.org/stm32duino/package_STM32duino_index.json dans le champ “Additional Boards Manager URLs” de “Preferences” :

Configuration d'une nouvelle source STM32 de l'Arduino IDE

Puis aller dans “Tools” > “Board manager” et saisir “STM32” puis sélectionner “STM32F1xx/GD32F1xx board” :

Board manager

Dans le menu “Tools” > “Board”, sélectionner la carte “Generic STM32F103C6/fake STM32F103C8” et le bootloader “STM32duino bootloader” :

Configuration de la carte STM32 de l'Arduino IDE

  • realisations/stm32/start.txt
  • Dernière modification: 2021/07/02 00:00
  • (modification externe)