STM32F bluepill, Platformio, Roger Clark arduino stm32 core & stm32duino bootloader

Este artigo é sobre o uso conjunto do seguinte conjunto de hardware e software and basic config.

  • STM32F103C8, the Bluepill
  • IDE, vscode/platformio,
  • ststm32 with arduino framework
  • Arduino_STM32 Core (roger clark melbourne core, maple core)
  • STM32duino-bootloader

 

Instalar o STM32duino-bootloader

Ver outro artigo….

Depois de instalar o STM32duino-bootloader deixa de ser possível de usar a serial 1 para enviar os programas.

De notar que quando usado com programas compilados com o Arduino_STM32 Core do Roger Clark, a serial 1, nos pinos PA9 e PA10 deixa de funcionar como uart (serial 1).

No entanto se for com programas compilados com o STM32duino core (o core da ST) a serial 1, nos pinos PA9 e PA10 deixa de funcionar como uart.

Usar compilar com o Arduino_STM32 Core do Roger Clark (maple core)

Para usar o core Arduino_STM32 Core do Roger Clark, e as suas bibliotecas na programação dos STM32F, é necessário usar as seguintes entradas no ficheiro platformio.ini do projecto.

board = genericSTM32F103C8
board_build.core = maple

Do not use the following board because it will use the STM32duino core (ST core).

#board = bluepill_f103c8

Enviar os programas por USB com o STM32duino-bootloader instalado

Para enviar os programas por USB com o STM32duino-bootloader do roger clark instalado é necessário usar as seguintes entradas no ficheiro platformio.ini do projecto.

# send by usb
upload_protocol = dfu
upload_port = anything

O boot1 deve ter o jumper no 1, (led verde deve piscar rapidamente)

Serial ports e default serial port (Porta serie principal)

Com o  STM32duino-bootloader o serial input/output deixa de funcionar nos pinos A9 e A10, e é redireccionado para a porta USB. Ou seja Serial.print(“hello”), é redireccionado para a porta USB normalmente em /dev/ttyACM0.

Notar que no restart, quebra a ligação serie, pelo que no restart, se não colocarmos um delay suficientemente longo para voltarmos a restabelecer a ligação, perderemos todo o output que estiver a ser feito na função setup.

Estudar as outras serial ports (Serial1, e Serial2)

Ficheiro de configuração de um projecto com o bootloader e o maple do roger clark

platformio.ini

[env:genericSTM32F103C8]
platform = ststm32
board = genericSTM32F103C8
framework = arduino

board_build.core = maple

# send by usb
upload_protocol = dfu
upload_port = anything

#monitor_port = /dev/ttyACM0
# set monitor speed for
# serial on STM32 pins RX/TX
monitor_speed = 115200

 

PWM com o Roger Clark / maple arduino_stm32 core

Configurar, no setup, o pino para ser usado com PWM

pinMode(PB6, PWM);

Atribuir o ciclo de trabalho (duty cycle) o pino previamente configurado.

pwmWrite(PB6, 32000);

O valor pode variar entre 0 e 65535.

Atenção aos pinos usados como PWM, usar um pino indevido crasha o programa.

Existem na web alguns diagramas com pinos que indicam como pinos PWM pinos que não o são, por exemplo o PB4, e o PB5, e por isso não produzem o resultado esperado.

O seguinte diagrama tem a indicação dos pinos correctos.

 

https://github.com/rogerclarkmelbourne/Arduino_STM32

https://github.com/rogerclarkmelbourne/STM32duino-bootloader

 

vscode

Version: 1.56.2
Commit: 054a9295330880ed74ceaedda236253b4f39a335
Date: 2021-05-12T16:45:26.313Z
Electron: 12.0.4
Chrome: 89.0.4389.114
Node.js: 14.16.0
V8: 8.9.255.24-electron.0
OS: Linux x64 5.8.0-53-generic snap

platformio

Core 5.1.1 /Home 3.3.4