STM32 'Blue Pill' como upgrade ao Arduino


#1

Boas pessoal, como alguns de voces sabem (quem nao sabe fica a saber :slight_smile: ), sou um grande Fan de Arduinos, e sou apologista de que devemos usar os recursos necessarios para os nosso projectos, e nao alocar um Core i7 com 16GB de RAM e disco SSD para fazer um Blink :thinking:

Alguns já devem ter ouvido falar, mas existe um chip, na classe dos Micro Controladores que é MUITO! barato e tem um potencial bastante interessante, com o extra de poder ser programado com o Arduino IDE (não que isto seja um plus para mim, mas para quem esta a iniciar é super interessante, pois nao tem de se desfocar em multi IDE’s e multi plataformas e linguagens para aprender novas coisas).

Ora este CHIP é o STM32F103C8T6 (Entre outros, mas neste tópico vamos-nos focar neste em particular), mas mais conhecido por Blue Pill ou STM32.

Os seus pontos fortes para mim (entre outros) são:
- Processador de 32Bits
- 20Kbytes de RAM
- 64Kbytes de FLASH (*) Ver abaixo
- 72Mhz Clock Speed
- 2x I2C
- 2x SPI
- 3x USART
- ADC 12Bits

(*) - Primeira supressa (boa) embora nas especificações diga que este chip tem 64K de flash, na realidade tem 128k de flash.
- ?? como assim ??
- Verdade, na realidade este chip tem dois “bancos” de 64K disponíveis, no caso da versão que termina em T6 no nome do chip, na fabrica, durante os testes á memoria, o segundo banco não passa nos controlos de erro, e para segurança esta desabilitado (se correr programas em cima desta memoria danificada o código pode “pendurar”), o truque aqui é, o erro pode ser no inicio, a meio, no fim , ou em qualquer outro endereço de memoria ao longo desses 64k extra e no limite pode ser apenas um byte, a boa noticia é que podemos “habilitar” esse segundo banco e fazer flash de um firmware que tenha mais do que 64k de flash usando esta memoria extra, claro que pode correr bem ou correr mal, mas até agora, já usei firmwares de 94k sempre com sucesso. (posso ter tido sorte) mas é sempre bom saber :slight_smile:

Mais tarde vou colocar um tutorial de como podemos fazer isso.

Uma coisa estranha que me deparei quando tentei usar este chip pela primeira vez, foi que não tinha nenhum chip para fazer conversão USB para serial muito embora tenha porta USB, e como tal, não é possivel fazer UPLOAD de um sketch pela porta USB como no Arduino, sendo necessario usar um USB to serial converter como por exemplo um FTDI ou CP2102 ou um STLINK.

Como nao gosto de andar com cabos pendurados, pensei que deveria ser possivel usar este USB para fazer o UPLOAD e começei a investigar.

O que vou colocar a de seguida, é um tutorial com os “findings” que obtive na procura desta opção.

Para seguirmos necessitamos das seguintes tools:

O primeiro passo é ver se temos a versão correcta do STM32, podemos faze-lo olhando para o led e verificar se tem escrito ao lado PC13 (se for diferente o bootloader tem de ser outro que nao é coberto pelo tutorial)

Depois de validado que estamos a trabalhar na versão correcta do STM32, devemos instalar o python 2.7 (Link acima)

Antes podemos validar se temos alguma versão de python instalado com o comando
python_ver

De seguida instalamos o pyserial com o commando
pyserial

Se já estiver instalado devem ver a mensagem acima, se nao estiver é instalado e o que aparece é um pouco diferente, mas o resultado final é igual.

De seguida fazemos download do stm32Loader e copiamos o ficheiro para um directorio no disco, no meu caso c:\stm32

stmloader

Agora verificamos que o stm32loader esta a funcionar com o comando
loader_help

Se tudo esta a correr bem até aqui, ja falta pouco.

Agora arranjamos um USB to Serial programmer, no meu caso vou usar um baseado no chip FTDI e fazer as seguintes ligações.

USB Serial STM32

VCC --------- 5V
GND --------- GND
RX --------- A9
TX --------- A10

Ligamos o cabo USB ao SERIAL PROGRAMMER e no Device Manager do Windows vemos qual o COM port associado

Copiamos o bootloader para o mesmo directorio que o stm32loder.

Colocamos o jumper do BOOT0 na posição 1

Na consola executamos o comando

A partir deste momento, ja temos o STM32 com bootloader que suporta USB.

Desligamos todos os fios e ligamos directamente o STM32 ao USB, o mais provavel é o STM32 nao ser identificado como um device USB, podera aparecer como na imagem abaixo, ou nas COM ports com o sinal de esclamação com a palavra MAPLE.

Sem problemas, lá atras fizemos download dos ficheiros para o IDE do arduino.

Abrindo o IDE do arduino, vamos a FILE > PREFERENCES e vemos a localização da nossa pasta onde o arduino guarda os SKETCHS por default.

La dentro criamos uma PASTA chamada HARDWARE (se ja nao existir) e descomprimimos o conteudo do ZIP

Na consola vamos a pasta que acabamos de descomprir e dentro a uma pasta chamada drivers/win e executamos o ficheiro INSTALL_DRIVERS.BAT.
O resultado devera ser este
drivers

Antes de continuarmos, temos de colocar o JUMPER que colocamos a 1 do BOOT0 de volta a 0

Desligamos o STM32 do USB e voltamos a ligar, e o dispositivo já devera ser reconhecido.

Desligamos o IDE do Arduino e voltamos a abrir, no menu das boards ja devemos ter uns dispositivos novos, escolhemos de acordo com estas definições.

Vamos aos exemplos e abrimos o seguinte exemplo

Alteramos o codigo para reflectir o PINO PC13.

Fazemos upload para a board, e se tudo correr bem deveremos ter um led vermelho a piscar com intervalos de 1 segundo.

Espero que seja util, nos proximos tempos vou fazer mais tutorials para este MCU.


#2

Bem tenho aqui 1 e nao sabia o que fazer a ele agora fiquei picado :slight_smile:


em relação a este Teensy já testas-te?


#3

Não, nunca testei, o teensy e bues caro :slight_smile:


#4

foi-me oferecido hehehe


#5

Já utilizei ambos.

O Teensy é brutal e tem um poder de cálculo brutal.
Além disso as bibliotecas estão bem desenvolvidas sem grandes erros.

O STM32 é uma excelente hipótese para projetos Low cost (É super barato) É preciso cuidado porque a solda é mesmo chincoca então pode haver problema.
Quem colocar o bootloader para programar via USB tem que ter em atenção porque umas das resistências tem o valor errado e tem que ser substituído.


#6

Tambem ja vi pessoal a dizer para trocar uma das resistencias, mas até agora nao tive necessidade de o fazer. Tem funcionado tudo OK sem trocar nada, mas deve haver alguma razão para a troca, talvez em modelos anteriores, ou se usar alguma funcionalidade em particular.


#7

Só é preciso trocar caso queiras usar USB


#8

Foi isso que quis dizer, eu uso o USB e nao tive de trocar as resistencias, faço o upload do codigo directo por usb


#9

Então já devem ter corrigido esse erro


#10

@Nuno_Miguel

Diz uma coisa. O bootloader que utilizas tem alguma coisa em especial?

É que eu uso o bootloader que a ST fornece “Flash Loader Demo”. Sabes se são diferentes?

É que se calhar para pessoal com menos experiência em linha de comandos este torna-se mais fácil de utilizar.


#11

Boas,

Se bem entendi estas a falar nao do bootloader, mas do programa que flasha os ficheiros .bin?

Ja usei o Flash Loader Demo, mas nunca tentei fazer upload do bootloader via o software deles, diria que em teoria deve funcionar, mas nunca testei. Posso fazer o teste logo a noite e depois coloco aqui os meus findings :slight_smile:


#12

Eu uso o software deles e funciona bem por isso. A pergunta era com o intuito de saber se usavas esse script em python por algum motivo em especial mas parece -me que não :stuck_out_tongue:


#13

Pois, não é por nenhum motivo em particular, é so porque é pequeno e nao necessita de instalação :slight_smile: e como gosto de coisas de consola :slight_smile: … Old school :stuck_out_tongue:


#14

Está explicado :stuck_out_tongue: