Convertendo o STM32 Blue Pill em uma Black Magic Probe

Conheça a ferramenta de gravação e debug Black Magic Probe e embarque o firmware dela em uma placa STM32 Blue Pill (STM32F103C8).
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.

A image14
Cortex – M suportados
A image17
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.

A image5
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:

A image19
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

A image15
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.

A image11
Conexão em modo dfu

Execute o comando:

A image1
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.

A image18
Saída esperada

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

A image2
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

A image13
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.

A image6
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:

A image10
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 gdbarmnoneeabi, você pode usar o pacote GDB do próprio STM32CubeIDE passando o parâmetro: “${gnu_tools_for_stm32_compiler_path}/arm-none-eabi-gdb”

A image7
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.

A image4
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.

A image3

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.

A image9
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

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.

Notificações
Notificar
guest
4 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Haroldo Amaral
Haroldo Amaral
Membro
31/07/2020 16:38

Boa tarde Jorge.
Sabe informar se a Black Magic é compatível com os KM Series Cortex-M0+?

Jonathan Gonzaga
Jonathan Gonzaga
16/10/2019 08:57

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

Tiago - Trilean Software
Tiago - Trilean Software
15/10/2019 05:22

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.

WEBINAR

Imagens de Ultrassom: Princípios e Aplicações

DATA: 26/10 ÀS 19:30 H