Depois de carregar alguns programas para tentar piscar o led interno usando o platformio (no vscode) para uma bord stm32nucleo com o STM32F411RE, o carregamento (upload) deixou de funcionar e indicava o erro
error init mode failed (unable to connect to the target)
** opencd init failed **
O STM32CubeProgrammer também não se conseguia ligar. Na ultima linha do log dava os seguinte erro:
15:57:33 : STM32CubeProgrammer API v2.1.0
15:57:33 : ST-LINK error (DEV_CONNECT_ERR)
15:57:52 : ST-LINK SN : 066EFF555071494867112440
15:57:52 : ST-LINK FW : V2J33M25
15:57:52 : Voltage : 3.26V
15:57:52 : Error: No STM32 target found!
Entretanto depois de várias horas perdidas, na qual desconfigurei os drivers e voltei a ter que reinstalar tudo de novo, e com pesquisas muitas infrutíferas na web descobri uma que talvez tenha ajudado. Confesso que não sei se foi disso se foi uma mistura de duas coisas.
Mas antes dessa pagina, e depois de voltar a por os drivers em condições, depois descobri que conseguia ligar a placa e enviar o ficheiro elf usando o STM32CubeProgrammer.
Para ligar a placa bastou trocar o reset mode de software para hardware mode.

Com esta troca já consegui ligar STM32CubeProgrammer à placa.

O log ficou com o seguinte:
15:55:00 : ST-LINK SN : 066EFF555071494867112440
15:55:00 : V2J33M25
15:55:00 : Connected via SWD.
15:55:00 : SWD Frequency = 4,0 MHz.
15:55:00 : Connection mode : Connect Under Reset.
15:55:00 : Debug in Low Power mode enabled.
15:55:00 : Device ID:0x431
15:55:00 : Device flash Size : 512KBytes
15:55:00 : Device family :STM32F411xC/E
Por esta altura comecei a pensar que poderia alterar platformio.ini com alguma opção de reset mode e voltar a conseguir fazer o upload com o platformio.
Adicionei a seguinte linha e tentei
upload_resetmethod = hardware
Não funcionou.
Entretanto numa pesquisa sobre como reconfigurar o platformio.ini para fazer o reset descobri uma página que dizia para acrescentar o seguinte bloco ao platformio.ini:
upload_flags =
-f
interface/stlink.cfg
-c
transport select hla_swd
-f
target/stm32f4x.cfg
-c
init; reset halt; stm32f4x unlock 0; reset run
Mas também não funcionou. Mas curiosamente o erro “opencd init failed” desapareceu, ficou só o erro: “error init mode failed (unable to connect to the target)”, que já lá estava antes.
Por esta altura decidi voltar ao STM32CubeProgrammer e usa-lo para enviar o programa gerado pelo platformio.
Com o botão open file abri o ficheiro firmware.elf, e cliquei no botão download.
O ficheiro foi enviado para o mcu.
Posteriormente experimentei enviar através do platformio e funcionou bem. Fez o envio do programa.
Ai comecei a retirar os blocos de código que tinha colocado no platformio.ini e ficou simplesmente.
[env:genericSTM32F411RE]
platform = ststm32
board = genericSTM32F411RE
framework = arduino
upload_protocol = stlink
debug_tool = stlink
Mesmo assim, continuo a enviar o programa normalmente.
Problema resolvido