sexta-feira, 23 de setembro de 2016

Programando a Blue Pill (STM32F103C8T6) pela porta USB usando a IDE Arduino

Boa noite, garotada!



Alguns de vocês já devem ter visto uma plaquinha assim rolando pelo Mercado Livre e outros buracos da Internet. Ela é uma plaquinha com um microcontrolador com arquitetura ARM, 64kb de memória flash e várias outras características legais, além de ser relativamente barata. Ela possui 4 pinos para você programá-la com um ST-LINK V2 genérico, mas você sabia que também é possível programá-la diretamente pelo conector USB que existe na própria plaquinha, usando a IDE Arduino?

Para isso você precisa fazer duas coisas:

1- Colocar os arquivos de suporte da plataforma dentro da pasta hardware da pasta da sua IDE Arduino, instalar as placas "Arduino SAM" no gerenciador de placas e instalar o driver da placa Maple Mini. Como o chip STM32F103 utiliza uma arquitetura diferente da AVR, o compilador padrão (avr-gcc) não vai servir, e é por isso que você instala as placas "Arduino SAM" no gerenciado de placas: esse procedimento realiza o download e instalação do compilador de ARM arm-gcc.

Os arquivos de suporte podem ser obtidos aqui, baixando o galho master inteiro do projeto como arquivo ZIP: https://github.com/rogerclarkmelbourne/Arduino_STM32



A versão mais recente da IDE Arduino (1.6.11 no momento em que este post é escrito) aceita os arquivos de suporte sem problema algum, porém algunas versões (depois da 1.6.5 e antes da 1.6.11) podem não exibir as placas novas no gerenciador de placas.


Descompacte o arquivo Arduino_STM32-master e coloque o conteúdo dele dentro da pasta hardware da sua IDE Arduino.
Selecione a opção "Arduino SAM Boards (32-bits ARM Cortex-M3)" e mande a IDE fazer a instalação. É um download razoável, algo como 100 mbs.
Para instalar o driver que permite o Windows reconhecer a plaquinha quando está em modo DFU (Device Firmware Update, que é o protocolo utilizado para fazer o upload do programa para ela, que é o mesmo protocolo utilizado para fazer o upload de um programa compilado para o Arduino Leonardo), você deve rodar o arquivo install_drivers.bat que vem com os arquivos de suporte da plataforma STM32duino. Depois que você instalar os drivers, a sua placa poderá ser reconhecida como dispositivo em modo DFU sempre que for resetada, permitindo que o programa compilado seja transferido para ela.



Com o driver instalado, arquivos de suporte colocado na pasta /hardware, você já pode programar a sua plaquinha. Para isso, você deve configurar a sua IDE da seguinte forma:


Pronto! Agora você consegue programar a sua placa usando a IDE Arduino, sem precisar de qualquer adaptador ou programador externo. A programação é realizada reiniciando a placa por um pulso na linha D- e enviando o programa compilado em .bin com o dfu-util. Note que às vezes o programa que realiza o upload não consegue reiniciar a placa por software. Neste caso, você deve reiniciar a placa manualmente, apertando o botãozinho de reset quando aparecer a mensagem "Searching for DFU device [1EAF:0003]...".

Observação importante: esta placa pode ser reconhecida não só como um dispositivo de comunicação serial, mas também como dispositivo HID (teclado, joystick e mouse), dispositivo MIDI (você escolhe o tipo de dispositivo na configuração USB Type) ou como nenhum dispositivo (por algum erro de programação, porque você escolheu um chip diferente na hora de fazer o upload, etc...). Neste caso, você também precisará resetar a placa manualmente para colocá-la novamente em modo DFU e poder fazer upload do programa compilado para o chip!

Normalmente o uploader é capaz de reiniciar a placa. Caso isso não aconteça, será exibida uma mensagem dizendo que ele não conseguiu encontrar o dispositivo em modo DFU. Isso indica que você precisará reiniciar a placa manualmente, apertando no botãozinho de reset que ela tem.
Quando o uploader reconhece a placa em modo DFU, aparece essa mensagem, o upload é feito e a placa é reiniciada novamente, executando o programa.

Isso tudo também pode ser feito no Linux, mas o procedimento é diferente. Abordarei esse tema específico em outra postagem. A vantagem de usar o Linux é que a compilação é muito mais rápida, e o upload é praticamente instantâneo.

Parece complicado, mas é simples! Observem a apertada do botão de reset em ação:

Um vídeo publicado por Ruy Jorje (@ruyjorje) em


2- Você precisa, obviamente, de uma plaquinha dessas! Mas não é só isso. Elas possuem um resistor Pull-Up no pino PA12 (que está conectado à linha D- do barramento USB) de valor "incorreto", que pode permitir ou não que o chip seja reconhecido pelo seu computador. Isso pode ser corrigido de duas formas: você pode colocar um resistor de 1k5 entre o 3v3 da plaquinha e o pino PA12, ou substituir o resistor R10 por um resistor de 1.5k. Você só precisa fazer isso se a sua placa vier com um resistor de 10k marcado com "R10".

Ainda não cheguei a receber nenhuma placa desse modelo que viesse com o bendito resistor de 1.5k no pino PA12, então eu simplesmente troco o resistor errado pelo correto em todas as placas que chegam para mim. Feito isso, é hora de gravar o bootloader STM32duino (que é uma derivação do Maple Mini, se eu não me engano) no microcontrolador usando um ST-LINK ou um adaptador USB-Serial. Pra fazer isso você precisa colocar o STM32 no modo bootloader serial, e então fazer a gravação do bootloader novo (generic_boot20_pc13.bin) usando o ST-Link Utility ou o Flash Loader Demonstrator, sendo que ambos os programas você consegue baixar no site da ST (vou colocar o link dos dois no final do post de qualquer forma).

Para quem não quer ter o trabalho de dessoldar/soldar um resistor 0603, este que vos escreve vende essa plaquinha já com o resistor trocado e com o bootloader STM32duino/Maple Mini gravado, bastando que você faça a primeira parte deste post ( Link do anúncio no Mercado Livre aqui. No momento em que este post é escrito o anúncio está pausado pois ainda estou esperando o Correio entregar o último lote que eu encomendei para realizar a conversão...). Assim que este último lote chegar, escreverei uma postagem ensinando a fazer troca do resistor.


Links úteis:

  • Flash Loader Demonstrator: http://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-programmers/flasher-stm32.html
  • ST-Link Utility: http://www.st.com/content/st_com/en/products/embedded-software/development-tool-software/stsw-link004.html
  • Bootloader Stm32duino 2.0 para a plaquinha Blue Pill (generic_boot20_pc13.bin) pode ser baixado entre estes arquivos: https://github.com/rogerclarkmelbourne/STM32duino-bootloader/tree/master/STM32F1/binaries

Nenhum comentário:

Postar um comentário