Manual

do

Maker

.

com

STM32 Blue Pill - ARM Cortex M3, baixo custo, alto poder

STM32 Blue Pill - ARM Cortex M3, baixo custo, alto poder

Diversos projetos independem de conexão WiFi e bluetooth, ou às vezes a necessidade é utilizar uma RF qualquer que não as anteriormente citadas. Mas não só isso, então vamos apreciar a STM32 Blue Pill e ver quais suas vantagens.

STM32 Blue Pill specs

Não sei se todas vem assim, mas caso não tenha o bootloader instalado, será necessário fazê-lo previamente. Aqui tenho um ST-Link V2, USBASP e FTDI para gravar o bootloader. O ST-Link é  essa plaquinha da imagem. Não conecte a Blue Pill ao computador antes de configurar o sistema.

st-link-300x258.webp

A Blue Pill vem com a MCU STM32F103C8, com 64 ou 128KB de flash. O clock é de 72MHz, bem acima dos Arduinos, um pouco abaixo do ESP8266.

Possui 20KB de RAM, conector micro-USB, LED no pino 13. Seu nível lógico é 3v3, regulador de tensão de 300mA.

O hardware

O padrão USB requer um resistor de pullup no data plus de 1k5, mas por alguma razão o valor está errado no R10. Experimente utilizá-lo e em último caso, troque o resistor por 1k5. Não desanime, só estou adiantando o que eventualmente pode vir a ser um problema.

De qualquer modo, não tenho o resistor SMD de 1k5 então estou fazendo a gravação somente pelo FTDI, sem saber se realmente é possível fazer a gravação do sketch pela USB ou não.

Bootloader para STM32 Blue Pill

O bootloader pode ser gravado com USB-Serial, um Arduino Nano ou UNO (veja esse artigo sobre dois modos de gravar firmware, nesse caso) ou com o ST-Link. Claro que é mais fácil a maioria dos makers terem o USB-serial ou Arduino UNO por razões óbvias; o STM32 não é a plataforma mais popular dos embarcados. O procedimento será descrito mais adiante, mas é divertido e simples, primeiro quero descrever a configuração do ST-Link no Linux.

Configurando o ST-Link no Linux

Precisaremos da libusb. Para quem usa derivados de Debian (como Ubuntu), o primeiro passo é instalar a biblioteca. Abra um terminal e digite:

sudo apt-get install libusb-1.0-0-dev

O próximo passo é clonar o repositório do ST-Link. Depois, deveremos compilar e copiar os arquivos relacionados para seus respectivos diretórios.

cd stlink
make release
make debug

O ST-Link é um JTAG, que converte os comandos de USB para JTAG. Os comandos acima fazem apenas o primeiro passo, que é criar os diretórios e criar os targets. Para instalar, podemos fazê-lo no home do usuário mesmo, mas prefiro que fique por padrão no sistema.

 

cd build/Release
sudo make install

cd ../Debug
sudo make install

#Então...
ldconfig
sudo udevadm control --reload-rules
sudo udevadm trigger

Se o mouse parar de funcionar após o último comando, desconecte e conecte-o novamente. Agora conecte o ST-Link e teste:

st-util.webp

O legal mesmo é ter o debugger. Para usá-lo, primeiramente instale o pacote:

sudo apt-get install gdb-multiarch

E se desejar:

sudo apt-get install binutils-arm-none-eabi gcc-arm-none-eabi

Ou nenhum, se não quiser ter um debugger.

Gravar bootloader no STM32 Blue Pill

Linux; apenas Linux. Não uso Windows, mas para ajudar, pegue o bootloader aqui e o programa Flash Loader Demonstrator para Windows aqui. Procedimento em inglês, nesse link.

Para Linux, faça o seguinte:

sudo su
apt-get install stm32flash

Agora, conecte um FTDI com RX em A9 e TX em A10. O FTDI deve estar em 3v3. Conecte o GND também, claro. Repare também a posição dos jumpers; com a placa na posição da imagem abaixo, o jumper superior fica à direita e o jumper inferior fica à esquerda.

stm32-bluepill.webp

Ainda com sudo su (acesso com usuário root), digite:

stm32flash -w generic_boot20_pb12.bin -v -g 0x0 /dev/ttyUSB0

Considere estar no mesmo nível de diretório do binário ou passe o caminho absoluto.

O resultado deve ser algo como:

stm32-flash.webp

Volte o jumper para 0, desconecte. Conecte pela USB e digite:

dmesg

Deve aparecer:

maple003.webp

Baixar o repositório da STM32

Agora vá ao git da placa e clone o repositório dentro do diretório Arduino/hardware.  Feito isso, abra a IDE do Arduino e deixe nesse padrão:

stm32-board.webp

Gravar o hello world

Hora de subir o primeiro sketch, mas preste atenção nisso, porque pra mim só funcionou dessa maneira:

  • Coloque o jumper superior (posicionando a placa como mostrado mais acima) na posição 1.
  • Grave o sketch e espere o resultado.
  • Troque o jumper para a posição 0 novamente.
  • Desconecte e conecte a placa novamente e veja se o sketch se manteve.
  • Subiu sketch e quer subir outro? Faça reset da placa antes de subir novamente (com o jumper na posição 1 ainda).

Citei esse procedimento porque o sketch não gravava com o jumper superior na posição 0 e também não mantinha o sketch se desconecta-se antes de trocar o jumper de posição.

Um blink para o teste, mas com charme:

struct blinker{
  int stat :1;
} blkr;

void setup() {
  pinMode(PC13,OUTPUT);
}

void loop() {
  blkr.stat += 1;
  digitalWrite(PC13,blkr.stat);
  delay(1000);
}

FreeRTOS no STM32 Blue Pill

Agora começa a parte legal!

Podemos utilizar alguns recursos do FreeRTOS no STM32, que é uma placa _ e x t r e m a m e n t e  _   barata. Se gostaria de brincar com RTOS mas está sem grana para comprar um ESP32, comece pelo STM32 Blue Pill, é diversão garantida!

Já escrevi alguns artigos utilizando o STM32 Blue Pill com NUTTX, vale a pena conferir também.

Para começar brincar agora mesmo na IDE do Arduino com FreeRTOS, pegue a biblioteca que fará a interface, nesse link. Descomprima a biblioteca dentro do diretório Arduino/libraries. Experimente esse blink agora com uma task:

#include <MapleFreeRTOS821.h>

struct blinker{
  int stat :1;
} blkr;

static void vBlink(void *pvParameters){
  while (true){
      vTaskDelay(250);
      blkr.stat += 1;
      digitalWrite(PC13,blkr.stat);
  }
  
}

void setup() {
  pinMode(PC13,OUTPUT);
  xTaskCreate(vBlink,"blink",configMINIMAL_STACK_SIZE,
                            NULL,
                            tskIDLE_PRIORITY + 3,
                            NULL);
  vTaskStartScheduler();
}

void loop() {
  
}

Dá pra fazer HORRORES com essa placa, vamos ver se consigo tempo para mostrar algumas coisas de cair o queixo.

Onde comprar?

Essa placa está disponível no nosso parceiro MASUGUX através desse link e custa menos que ir e voltar do trabalho, pegue a sua e boa diversão!

  Inscreva-se no nosso canal Manual do Maker no YouTube.

Também estamos no Instagram.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.