Manual
do
Maker
.
com
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.
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.
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 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.
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.
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:
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.
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.
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:
Volte o jumper para 0, desconecte. Conecte pela USB e digite:
dmesg
Deve aparecer:
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:
Hora de subir o primeiro sketch, mas preste atenção nisso, porque pra mim só funcionou dessa maneira:
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);
}
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.
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.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.