Le circuit stm32 appelé bluepill est un circuit imprimé conportant un microprocesseur STM32F103C8T6, 32-bit ARM Cortex M3 pouvant fonctionner à 72 MHz, avec flash et ram intégré. Le format du circuit imprimé est celui d'un microprocesseur Intel 8031 ou Motorola 6800 avec 2 rangées de 20 pins espacées de 6 pas (0.6 in). On peut le trouver sur internet au prix de environ 2 euros chez Ebay ou Aliexpress.
Ce circuit est identique fonctionnellement au circuit maple-mini décrit dans la page maple-mini. Par contre les circuits ne sont pas interchangables à cause du pinout.
Voici les caractéristiques principales du processeur:
Photo du circuit coté processeur.
![]() |
![]() |
Avant de pouvoir utiliser un circuit comme le bluepill, il faut un schéma en tête ou même dans un fichier. Le schéma va se faire en fonction de la disposition des fonctionnalités, montrées dans le tableau suivant, et des fonctionnalités dont on a besoin. Par exemple, on sait que l'on va avoir besoin de l'uart1, on peut réserver PA9, PA10, TX1, RX1 et réserver un connecteur.
Il s'agit ici du brochage du module et non du proceseur. La numérotation est établit suivant le principe de numérotation des circuits intégrés: c'est à dire, dans le sens contraire des aiguilles d'une montre, a partir de la référence indiquant la pin 1..
Le schéma minimal est un symbole d'un dil 40 broches pour concrétiser le module avec une partie du circuit se trouvant sur le module. La pin 1 est l'ntrée VBAT.
Voir page Boot du processeur stm32f103 par liaison série
Pour atteindre le mode Bootloader en ROM, on utilise les straps sur la carte:
Pour atteindre le mode Bootloader Usb, il faut, après avoir brancher le cable mini-usb:
Le micro du bluepill est un STM32F103C8T6 pour lequel la taille de la mémoire flash est définie à 64 ko par la spécification. Par contre le boot loader en rom indique 128 ko. Pour lever le doute il suffit de faire un test
### créer un fichier aléatoire de 128 ko avec dd $ dd if=/dev/urandom of=file.ori bs=1024 count=128 ### envoyer le fichier dans la flash avec stm32flash $ stm32flash -w file.ori -v /dev/ttyS0 stm32flash 0.5 http://stm32flash.sourceforge.net/ Using Parser : Raw BINARY Interface serial_posix: 57600 8E1 Version : 0x22 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0410 (STM32F10xxx Medium-density) - RAM : 20KiB (512b reserved by bootloader) - Flash : 128KiB (size first sector: 4x1024) - Option RAM : 16b - System RAM : 2KiB Write to memory Erasing memory Wrote and verified address 0x08020000 (100.00%) Done. ### lire la flash dans un fichier flash.bin avec stm32flash $ stm32flash -r flash.bin /dev/ttyS0 stm32flash 0.5 http://stm32flash.sourceforge.net/ Interface serial_posix: 57600 8E1 Version : 0x22 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0410 (STM32F10xxx Medium-density) - RAM : 20KiB (512b reserved by bootloader) - Flash : 128KiB (size first sector: 4x1024) - Option RAM : 16b - System RAM : 2KiB Memory read Read address 0x08020000 (100.00%) Done. ### comparer le fichier d'origine et l'image de la flash avec md5sum $ md5sum flash.bin file.ori 89ba3d5ff31d59705ed46be6d7d1945f flash.bin 89ba3d5ff31d59705ed46be6d7d1945f file.ori
Dans notre cas, la taille de la flash est bien 128 ko. Dans le cas contraire, on aurait sans doute un problème d'écriture et un résultat différent avec md5sum.