Convertendo o STM32 Blue Pill em uma Black Magic Probe

Black Magic Probe

Neste artigo apresentaremos a ferramenta de gravação e debug Black Magic Probe, como embarcar o firmware dela em uma placa STM32 Blue Pill (STM32F103C8) e como configurá-la na IDE de desenvolvimento da STM32CubeIDE.

 

Para a escrita deste artigo usamos uma máquina com Ubuntu 16.04. Para quem estiver usando uma máquina Windows, os arquivos binários usados neste artigo estarão disponíveis no github.

 

Black Magic Probe

 

A Black Magic Probe é uma ferramenta de código e hardware aberto, onde é usado o microcontrolador STM32F103CB. Com ela é possível monitorar variáveis e examinar o comportamento de seu firmware a cada ciclo de instrução executada. O seu preço varia entre $60 a $75 dólares.

 

Black Magic Probe

 

Principais funções:

  • Carregar sua aplicação na memória Flash ou RAM no device de destino;
  • Depuração em tempo real;
  • Examinar e modificar registradores e variáveis alocadas na memória RAM;
  • Configurar até 6 pontos de interrupção assistidos por hardware;
  • Configurar até 4 dispositivos de leitura, gravação ou acesso assistidos por hardware;
  • Definir pontos de interrupção ilimitados de software ao executar seu aplicativo a partir da RAM.

 

A lista de Cortex-M/A que a Black Magic Probe consegue depurar é mostrada na imagem abaixo.

 

Cortex - M suportados
Cortex - A suportados

 

STM32 Blue Pill

 

A placa Blue Pill vem com um microcontrolador STM32F103C8 (ARM Cortex-M3), com 20 KB de RAM e 64 KB de flash. Através da PLL interna dele conseguimos chegar a um clock de até 72 MHz. Como periféricos ele possui uma porta USB e um LED. O preço dela é em torno dos R$ 20 no Brasil.

Placa STM32 Blue Pill

 

O binário da Black Magic Probe pode ser compilado para diferentes tipos de hardwares. A STM32 Blue Pill está entre elas.

 

Gerando o binário para a Blue Pill

 

Instale as seguintes ferramentas para poder compilar os binários da Black Magic Probe:

 

Em seguida baixe o repositório do blackmagic e compile o projeto para o Hardware da Blue Pill:

 

No final do build os seguintes arquivos binários serão gerados:

 

Saída de build esperada

 

blackmagic - ELF binary of the Black Magic debug probe.

blackmagic.bin - Flat binary of the Black Magic debug probe, load at 0x8002000.

blackmagic_dfu - ELF binary of the Black Magic DFU bootloader.

blackmagic_dfu.bin - Flat binary of the DFU bootloader, load at 0x8000000.

 

Os valores 0x8000000 e 0x8002000 são os endereços onde gravaremos o firmware de bootloader e aplicação do blackmagic.

 

Gravando o Binário da Black Magic Probe

 

Procedimento para executar as etapas 1 e 2

 

Etapa 1

 

Nesta etapa gravaremos a aplicação de bootloader da Black Magic Probe usando o modo dfu a partir do endereço inicial (0x08000000) da flash.

 

Para gravar o binário blackmagic_dfu.bin usaremos o programa stm32loader.py e um conversor USB Serial. Realize a conexão elétrica como mostrado na imagem abaixo.

 

Conexão em modo dfu

 

Execute o comando:

 

Saída esperada

 

Etapa 2

 

Após finalizar a etapa 1, remova o conversor USB Serial e retorne os pinos de boot ao estado zero. Conecte o cabo USB à Blue Pill. Para nos certificar de que a gravação do firmware de bootloader foi feita com sucesso, digite o comando “dmesg | tail”. Seu computador deverá reconhecer um dispositivo Black Magic conectado à porta USB de seu computador.

 

Saída esperada

 

Após essa confirmação, grave a aplicação da Black Magic Probe executando o comando abaixo:

 

Saída esperada

 

Após a gravação, executando o comando “ dmesg | tail”, podemos ver que o sistema reconheceu a nossa Blue Pill como uma Black Magic Probe, e em cima dela criou 2 conexões seriais: /dev/ttyACM0 e /dev/ttyACM1

 

Dispositivo Black Magic Probe detectado

Obs: Fique atento se o seu computador não monta a unidade USB da Blackmagic com outro nome.

 

GDB

 

O GNU Debugger, mais conhecido por GDB, é um depurador do GNU. Com ele podemos depurar e verificar linha a linha o funcionamento do programa, alterar e monitorar valores de variáveis, registradores e regiões de memória. É uma ferramenta fundamental durante o desenvolvimento de um programa.

 

Black Magic Probe via GDB Text User Interface

 

Neste exemplo usaremos 2 placas Blue Pill. Uma será nossa ferramenta de gravação e debug com o firmware da blackmagic e a outra será a placa que conterá nossa aplicação de exemplo. Na figura abaixo é mostrada a conexão elétrica que precisa ser feita.

 

Black Magic Probe
Usando a Black Magic Probe

 

Na rotina abaixo é mostrado como iniciar uma depuração usando o arquivo exemplo1.elf com GDB text user interface (tui). O arquivo com extensão .elf é gerado ao final da compilação de sua aplicação.

 

 

Debug via GDB Text User Interface

 

Na figura acima é mostrada a saída esperada. Nela podemos ver que iniciamos uma sessão de debug via DBG text user interface.

 

Ao usar os comandos break main, run, next e continue, nós estamos depurando nossa aplicação manualmente. Para melhor entendimento de todos os comandos GDB suportados pelo blackmagic, você pode acessar o seguinte link.

 

Usar o debug via GDB TUI é uma boa forma de verificar se a gravação do firmware da blackmagic foi feita da forma correta, visto que podem ocorrer outros problemas ao se usar diretamente a IDE do eclipse, como: instalação incorreta do plugin “GDB Hardware Debugging”, ou configurar o GDB e comandos de inicialização de debug da forma incorreta, etc.

 

Black Magic com STM32CubeIDE

 

As rotinas mostradas nas imagens abaixo mostram o passo a passo de como devemos configurar a sessão de debug da Black Magic Probe usando a IDE Eclipse com o plugin de debug “GDB Hardware Debug”. Por padrão o STM32CubeIDE já vem com esse plugin instalado. Se você estiver usando outra IDE, você precisará instalar o plugin “GDB Hardware Debug” para executar as rotinas abaixo:

 

Criando uma nova sessão de debug

 

Informe o GDB para arquitetura ARM. Ele conversará com a interface SWD ou JTAG durante o processo de depuração de sua aplicação. Se estiver com dificuldade de instalar o pacote gdb-arm-none-eabi, você pode usar o pacote GDB do próprio STM32CubeIDE passando o parâmetro: “${gnu_tools_for_stm32_compiler_path}/arm-none-eabi-gdb”

 

Informando o local do arquivo GDB

 

Em seguida. passe os comandos de inicialização para que a Black Magic consiga detectar o microcontrolador usado na Blue Pill, estabelecer uma conexão com ela e iniciar a sessão de debug.

 

Comandos de inicialização:

 

Ainda nesta etapa adicionaremos um break point na função main e inicializaremos a execução da nossa aplicação usando o comando start.

 

Configurando as rotinas de inicialização

 

obs.: fique atento aos portes criados pela Black Magic /dev/ttyACM0. Ocasionalmente eles poderão mudar e você precisará atualizar o comando “target extended-remote /dev/ttyACM0”

 

Pronto, agora podemos finalmente depurar nossa aplicação. Como podemos ver na imagem abaixo, você conseguirá avançar linha a linha, colocar break point em pontos que você acha importante monitorar, visualizar e alterar valor de variáveis.

 

 

Um outro ponto interessante é que você consegue executar o GDB Text User Interface através da aba “Debugger Console”. Nesta etapa mostramos alguns comandos diferentes do GDB como: next, continue, set variable e print. Para reiniciar o debug você pode usar o comando start. Sinta-se a vontade e explore outros comandos, seja mais programador raiz.

 

Executando comandos de GDB no console de debug

 

Conclusão

 

Neste artigo mostramos como criar uma ferramenta de debug usando um hardware de baixo custo com o projeto aberto Black Magic Probe. Ela é uma alternativa bem barata se comparada com o ST-Link e J-link (ferramenta de depuração).

 

Mostramos o passo a passo de como gravar o firmware da Black Magic Probe em uma placa Blue Pill e como realizar uma sessão de debug usando o GDB TUI e STM32CubeIDE.

 

Espero que este artigo ajude as pessoas que querem aprender mais sobre arquitetura ARM, e que a Black Magic Probe os incentive a conhecer outras ferramentas de desenvolvimento que vão muito além do Arduino IDE.

 

Código

https://github.com/JorgeGzm/STM32-ArtigoBlackMagic

 

Referências

 

https://gojimmypi.blogspot.com/2017/07/BluePill-STM32F103-to-BlackMagic-Probe.html

https://github.com/blacksphere/blackmagic/wiki/Upgrading-Firmware

NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Jorge Guzman
Sou formado em engenharia da computação com pós-graduação em automação industrial e engenharia de software. Possuo experiência no desenvolvimento de hardware, firmware, distribuições Linux e software para sistemas embarcados. Sou adepto ao compartilhamento do conhecimento e totalmente contra a metodologia de desenvolvimento GHP (Go Horse Process) em projetos.

3
Deixe um comentário

avatar
 
2 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
3 Comment authors
Jorge GuzmanJonathan GonzagaTiago - Trilean Software Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Jonathan Gonzaga
Visitante
Jonathan Gonzaga

Sabe se consigo usar uma Black Magic dessa para depurar um ESP32?

Tiago - Trilean Software
Visitante
Tiago - Trilean Software

O mais legal é que da para usar o mesmo processo para converter os dongles clone de STLinkV2 chineses no Black Magic Probe já que usam um MCU compatível, e de quebra o projeto já fica numa caixinha bacana.