STM32 blue pill com Arduino

Posted by

Você já deve ter ouvido falar ou lido sobre usar a STM32 blue pill com Arduino. Essa pequena placa é baseada no microcontrolador STM32F103C8T6 da ST semicondutores, tendo as seguintes especificações:

STM32 blue pill
STM32 blue pill
  • 12kBytes de memória de programa (Flash)
  • 20kBytes de memória SRAM
  • 3 Timers de uso geral
  • 2x SPI, 2x I2C
  • 3 USART, 1 CAN
  • 1 USB
  • 37 GPIO
  • Conversor analógico-digital: 2x 10 canais
  • Operação em 72MHz
  • Tensão de alimentação entre 2V e 3,6V

Em termos de consumo e também recursos é um microcontrolador muito superior ao ATMEGA328 do Arduino. Seu preço o torna atraente para substituir diretamente microcontroladores similares, aliado ao fato que ele pode também ser programado via IDE do Arduino.

Como transforma-lo num Arduino?

O procedimento que eu segui veio deste link. Você vai precisar de um conversor USB-serial qualquer, além do software STM32CubeProgrammer, download aqui (tem que fazer um cadastro gratuito). Monte o circuito abaixo.

Programar STM32F103 com conversor USB-serial
Programar STM32F103 com conversor USB-serial
Gravando firmware da STM32 blue pill
Gravando firmware da STM32 blue pill

Antes de abrir o STM32CubeProgrammer, faça o download do binário “generic_boot20_pc13.bin” disponível aqui. Este é o bootloader, código que faz a STM32 blue pill poder ser programada via IDE do Arduino.

Ao Abri o STM32CubeProgrammer selecione “open file” e procure no computador pelo arquivo “generic_boot20_pc13.bin”. Á direita selecione “UART” e clique em “Connect”.

STM32CubeProgrammer
STM32CubeProgrammer

Então clique á direita em “Download” e aguarde a finalização da gravação.

Clique em "Download" no STM32CubeProgrammer
Clique em “Download” no STM32CubeProgrammer

Configurando a IDE do Arduino

Considerando que você já tem o software IDE do Arduino instalado, seguindo este procedimento, execute os passos abaixo. Copie o link disponibilizado abaixo e cole-o em “Arquivo > Preferências > URLs adicionais para Gerenciadores de placas:”

https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json

Vá em “Ferramentas > Placa > Gerenciador de placas” e digite “STM32”, a biblioteca a ser instalada é esta:

Instalar STM32 na IDE do Arduino
Instalar STM32 na IDE do Arduino

É necessário instalar um driver USB, conforme mencionado neste link. Está disponível aqui. O penúltimo passo é configurar as opções da placa conectada, no menu “Ferramentas” conforme imagem abaixo.

Configurações da IDE do Arduino para blue pill. Fonte: https://www.electronicshub.org/how-to-upload-stm32f103c8t6-usb-bootloader/
Configurações da IDE do Arduino para blue pill. Fonte: https://www.electronicshub.org/how-to-upload-stm32f103c8t6-usb-bootloader/

As configurações mais importantes são: “Board: Generic STM32F1 series”, “U(S)ART support: enabled” e “Upload method: Maple DFU Bootloader 2.0”.

O último passo para que seja possível gravar códigos na placa é gravar um sketch que use a porta serial, pode ser o sketch abaixo. Descobri sobre isso neste link. Colocar o jumper BOOT1 em 1 e deixar o BOOT0 em 0. Neste momento você já pode remover o conversor USB-serial e conectar um cabo USB diretamente á blue pill.

// constants won't change. Used here to set a pin number:
const int ledPin =  PC13;// the number of the LED pin

// Variables will change:
int ledState = LOW;             // ledState used to set the LED

// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0;        // will store last time LED was updated

// constants won't change:
const long interval = 500;           // interval at which to blink (milliseconds)

void setup() {
  // set the digital pin as output:
  pinMode(ledPin, OUTPUT);
  Serial.begin(115200);
}

void loop() {
  // here is where you'd put code that needs to be running all the time.

  // check to see if it's time to blink the LED; that is, if the difference
  // between the current time and last time you blinked the LED is bigger than
  // the interval at which you want to blink the LED.
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
      Serial.print("teste");
    }

    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
  }
}

É necessário fazer isso (gravar um código com a porta serial com o BOOT1 em 1) apenas uma vez. Após executar este procedimento, voltar o jumper BOOT1 para 0.

Finalmente com os dois jumpers da placa sempre em 0, é só escrever código na IDE do Arduino e apertar o botão “-> Carregar”. No gif abaixo estou rodando o famoso sketch “BlinkWithoutDelay”. Note que o nome do pino do LED onboard da blue pill é “PC13”.

STM32 blue pill piscando led
STM32 blue pill piscando led

Palavras finais

Quer adquirir uma Blue pill STM32F103? compre aqui. Esta placa tem um apelo muito interessante pelo seu alto poder e baixo custo, além de poder ser programada pela IDE do Arduino. No futuro trarei mais artigos sobre a mesma.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *