Objectif:

Dans cet article, nous allons :

  • Compiler un programme avec TinyGO pour faire clignotter la LED intégrée à la carte BluePill
  • Flasher la BluePill avec un adaptateur USB-Serie TTL en utilisant le bootloader intégré au microcontrolleur STM32F103.

Compilation du code

(Nous supposons ici que TinyGo est déja installé sur le poste)

  • Créer un fichier blink.go
package main

import (
	"machine"
	"time"
)

func main() {
	led := machine.LED
	led.Configure(machine.PinConfig{Mode: machine.PinOutput})
	for {
		led.High()
		time.Sleep(time.Second)
		led.Low()
		time.Sleep(time.Second)
	}
}
  • Compiler le code source
$ tinygo build -target bluepill  -o flash.bin blink.go 
$ ls -la
total 20
-rwxr-xr-x  1 olivier olivier 6340 Oct 12 23:08 flash.bin
-rw-r--r--  1 olivier olivier  363 Oct 12 22:53 blink.go

A ce point, vous avez compilé le firmware (flash.bin) à partir du fichier source (blink.go)

Flasher le binaire

Il faut commencer par connecter correctement l'adaptateur USB Serie TTL à l'UART de la BluePill.

  • Connexions:

Connecter la pin TX du convertisseur à PA10 du BluePill
Connecter la pin RX du convertisseur à PA9 du BluePill
Connecter la pin 3.3v du convertisseur à 3.3v du BluePill
Connecter la pin GND du convertisseur à GND du BluePill

  • Activer le mode flash

Positionner le jumper BOOT0 sur 1
Positionner le jumper BOOT1 sur 0
Appuyer brièvement sur le bouton Reset et relacher.

La bluepill est maintenant en mode bootloader et en attente de commandes.


Tester la bonne détection du bootloader avec l'outil stm32flash:

$ stm32flash /dev/ttyUSB0
stm32flash 0.7

http://stm32flash.sourceforge.net/

Interface serial_posix: 57600 8E1
Version      : 0x22
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0410 (STM32F10xxx Medium-density)
- RAM        : Up to 20KiB  (512b reserved by bootloader)
- Flash      : Up to 128KiB (size first sector: 4x1024)
- Option RAM : 16b
- System RAM : 2KiB

C'est bon, stm32flash voit bien un STM32F10xxx.

  • Flasher
$ stm32flash -w flash.bin -v /dev/ttyUSB0 
stm32flash 0.7

http://stm32flash.sourceforge.net/

Using Parser : Raw BINARY
Size         : 6340
Interface serial_posix: 57600 8E1
Version      : 0x22
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0410 (STM32F10xxx Medium-density)
- RAM        : Up to 20KiB  (512b reserved by bootloader)
- Flash      : Up to 128KiB (size first sector: 4x1024)
- Option RAM : 16b
- System RAM : 2KiB
Write to memory
Erasing memory
Wrote and verified address 0x080018c4 (100.00%) Done.
  • Exécuter l'application

Re-positionner le jumper BOOT0 sur 0 et le jumper BOOT1 sur 0
Appuyer et relacher le bouton Reset

=> Le microcontroleur exécute le code et la led clignote.

Références

"https://www.rvq.fr/arm/stm32boot.php"