Como gravar um STM32-VL-DISCOVERY com o ST-LINK v1

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

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”

Tela do STM-32 ST-LINK Utility

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…”

Run > External Tool > External Tools Configurations…

Vamos em “New Configuration” e vamos fazer a seguinte configuração:

External Tool Configuration

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:

Botão para executar o comando de gravação

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!

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”.

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.

Comentários

5 respostas para “Como gravar um STM32-VL-DISCOVERY com o ST-LINK v1”

  1. Avatar de Wilko Lunenburg

    Hi Andriy,
    Thank you for menioning my post on Visserslatijn. As I cannot read Portugese I had to use Google-Translate. But I still do not quite understand what you did. Are you using the STLink in STM32CubeIDE while it still is a V1 version?

    I also upgraded my STM32-VL-Discovery board with the latest firmware from STMicroelectronics (V2.J37.S0). And because it is unprotected (Read Out Protection is Disabled) I extracted it to my pc and uploaded it to Google Drive. So, if you want to give it a try, here it is.
    https://drive.google.com/file/d/1IsVp9rCgPiXnGW4YtdnXPi2zRrkGwkMO/view?usp=sharing

    Of course you will have to solder the wires to the STM32F103C8 as I showed in my article.

    Best regards,
    Wilko

    1. Avatar de Andriy Krefer

      Hi Wilko,

      I’m glad you leave a message in my post! And glad you shared the v2 firmware!
      I basically said that I wasn’t able to get the debugging feature working on the ST-LINK v1 (only the firmware flashing), but your article seems to be a very promising way to get it working on the STM32-VL-DISCOVERY over the updated ST-LINK. Though I only have one ST-LINK and couldn’t test myself yet (if I understood correctly I need a second one to update the ST-LINK uC).

      Best Regards,

      Andriy

  2. Avatar de Wojtek
    Wojtek

    Hi Andriy,
    even though I don’t understand portuguese either, I came across Your blog.
    Of course, Your method to just program the STM32 Discovery board with STLink V1, works just fine. However, more interesting part, about Debugging is still not resolved for me.
    What I tried (and it didn’t work for me 🙂 ):
    -> Using chinese St-link V2 and connectors on Discovery board (https://imgur.com/oG8JAau, taken from STM32VLDISCOVER User Manual) connected to PC and upload .bin file of latest firmware provided by Wilko Lunenburg (in comment above), using ST-Utility
    -> The upload was successful, but after disconnecting the Chinese ST-Link, placing the jumpers on CN3 again, the built-in programmer is still recognized as V1

    Regards,
    Wojtek

    1. Avatar de Andriy Krefer

      Hi Wojtek,

      In the meantime I was able to update the STM32-VL-DISCOVERY firmware successfully, from ST-LINK-V1 to V2, as described in the Wilko’s blog post. I am planning to write a post showing the step-by-step process. I will let you know when it is ready 🙂

      Regards

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *