Neste artigo vou mostrar como gravar um binário em uma placa de desenvolvimento STM32-VL-DISCOVERY, que possui um debugger antigo, o ST-LINK v1.
O ST-LINK v1 já não é mais suportado pela STMicroeletronics, o que causa dor de cabeça para quem possui essa versão do debugger, uma vez que as IDEs atuais não consegue se comunicar com o ST-LINK v1 e executar ações como gravar ou depurar o código.
Atualmente o ST-LINK está na versão v3, mas a versão v2 ainda funciona normalmente com as IDEs atuais, inclusive com a IDE oficial, a STM32-Cube-IDE, mas infelizmente, a versão v1 não funciona.
O ST-LINK v1, em teoria permite depuração (debug) de código, entretanto, mesmo tentando diversos caminhos, não consegui fazer isso funcionar. Sendo assim, você não terá todas as ferramentas originais, mas pelo menos será capaz de gravar um firmware e não irá inutilizar sua placa.
Se você realmente precisar do debug, pode utilizar uma placa ST-LINK v2 externa, ou um debugger JTAG. Para isso, consulte a documentação do STM32-VL-DISCOVERY para saber quais jumper e headers utilizar.
Se você quiser se aprofundar neste tópico e tentar por conta própria faz a depuração funcionar, vou deixar minhas tentativas registradas aqui, que talvez possam ser um ponto de partida para você.
Softwares utilizados
- Windows 10
- Drivers do ST-LINK
Passo 1: Testar a conectividade do ST-LINK
Utilize a ferramenta “STM32 ST-LINK Utility” para testar se os drivers foram instalados corretamente e você consegue se comunicar com a placa. Aqui no meu PC, a ferramenta foi instalada na seguinte pasta:
C:\Program Files (x86)\STMicroelectronics\STM32 ST-LINK Utility\ST-LINK Utility\STM32 ST-LINK Utility.exe
Clique no botão “Connect to the target”
Verifique se houve sucesso na conexão, através das mensagens de status e se o conteúdo da memória foi lido com sucesso.
Em caso afirmativo, podemos passar para a próxima etapa.
Passo 2: Gravar via ST-LINK_CLI
É possível utilizar o “STM32 ST-LINK Utility” para gravar seu firmware, e você deve conseguir fazer isso com sucesso. Entretanto, para integrar o processo de gravação à sua IDE, é necessário conseguir gravar também via linha de comando. Desse modo, o ST-LINK_CLI é o software que permite fazer essa gravação via linha de comando.
O ST-LINK_CLI se encontra na mesma pasta do STM32 ST-LINK Utility e a linha de comando completa para gravar o firmware é essa:
ST-LINK_CLI.exe -c SWD -P C:\Users\Andriy\STM32CubeIDE\workspace_1.4.0\vltest1\Debug\vltest1.bin 0x08000000 -V -Run -NoPrompt
Você deve substituir C:\Users\Andriy\STM32CubeIDE\workspace_1.4.0\vltest1\Debug\vltest1.bin
pelo seu binário (firmware) que pretende gravar.
Você deve acessar um prompt de comando, executar este comando e confirmar que funcionou antes de passar para o próximo passo.
Passo 3: Configurar no STM32-Cube-IDE
Agora vamos configurar esta linha de comando no STM32-Cube-IDE, para que possamos realizar a gravação do firmware com o clique de um botão (ou pressionamento de uma tecla de atalho).
Para isso, iremos configurar um “External Tool”
Como o STM32-Cube-IDE é baseado no Eclipse, essa configuração também vale para o Eclipse. Adicionalmente, você pode usar essa mesma “lógica” para configurar outras IDEs.
Primeiramente vamos em “Run > External Tool > External Tools Configurations…”
Vamos em “New Configuration” e vamos fazer a seguinte configuração:
Lembre-se acertar o caminho em que se encontra se binário e salvar esta configuração.
Agora para gravar o firmware na placa (executar este comando configurado) é só ir em “Run > External Tools > 1 Program”, ou clicar no atalho mostrado na figura abaixo:
Conclusão
Neste artigo mostrei como gravar um uma placa de desenvolvimento STM32-VL-Discovery com um ST-LINK v1.
A seguir vou deixar um registro “extra” de algumas tentativas frustadas que tive para fazer o debugger funcionar. Estas informações estão espalhadas na internet e resumi aqui as informações que coletei com meus testes. Se você tiver algum sucesso me avise nos comentários!
Extra: Algumas tentativas de configuração do debugger
Como disse, se você quiser se aprofundar neste tópico e tentar por conta própria fazer a depuração funcionar, vou deixar minhas tentativas registradas aqui, para que, talvez possam ser usadas como um ponto de partida para você.
Utilizar o OpenOCD
Pensei nesta possibilidade após escrever o artigo e pelo jeito é promissora, portanto não cheguei a testar, mas de acordo com o autor deste artigo, é possível sim!
Atualizar ST-LINK v1 para ST-LINK v2
Esse é segundo caminho mais promissor de todos que vi, atualizar o ST-LINK v1 para v2. Entretanto, exige um segundo ST-LINK para efetuar a gravação, e como eu só tenho uma placa, não consegui testar esse método.
Entretanto, o ST-Link v2 não é apenas uma atualização de software, mas também de hardware e em teoria o microcontrolador do STM32-VL-DISCOVERY não suporta o firmware v2. Mesmo assim, o autor deste artigo alega que conseguiu a façanha e o firmware funciona com algumas restrições de porta UART, mas funciona. O problema é que ele não disponibiliza o binário do firmware que ele usou, apesar que consegui encontrar em outra página (neste link direto). Vale ressaltar que não testei e se você quiser tentar usar, é por sua conta e risco!
Este artigo também pode ser útil e mostra como gravar o firmware do ST-LINK v2 no STM32 Blue Pill / Black Pill.
Usar o GDB Server
Este é o link para baixar o ST-LINK Server, que, pelo que entendi, em teoria é a ferramenta oficial para criar um servidor GDB a partir do ST-Link. Entretanto, não sei nem se consegui instalar ele na minha máquina, pois o programa de instalação fecha rapidamente quando tento instalar. Mesmo assim, reparei que uma pasta foi criada em C:\Program Files (x86)\STMicroelectronics\stlink_server
contendo o arquivo stlinkserver.exe
.
Ao tentar executar o stlinkserver, uma porta local é criada, como normalmente ocorre em um servidor GDB. Configurei a STM32-Cube-IDE para utilizar esta porta e um servidor GDB na máquina local. Aparentemente, a IDE consegue se conectar no servidor, mas os comandos não são reconhecidos, até que, após um tempo, a IDE derruba a conexão por “timeout”.
Usar o projeto stlink versão open source
Este projeto promete conseguir usar o ST-LINK v1, mas utilizando mesmo com a opção -1
(para usar o ST-LINK v1) ele não conseguiu se conectar com a placa.
Deixe um comentário