STM32 e ST-LINK - Não é possível conectar ao MCU após a programação bem-sucedida

13

Eu construí minha própria placa com STM32F7-45VGT6. Programei com sucesso com o ST-LINK v2 (embora não o original) e agora não consigo nem me conectar ao MCU.

Eu uso o Utilitário ST-Link da interface ST e SWD. Pode ser que eu use pinos SWD como saída e no meu código eu os defino como saída GPIO. Pode ser o caso?

No entanto, conecto meu pino de redefinição ao GND e defino a opção "Conectar sob redefinição" no Utilitário ST-Link, mas ele não funciona ... O que posso fazer?

Na Internet, descobri algo sobre o uso do BOOT0 Pin, mas não sei exatamente ...

zupazt3
fonte
"Pode ser o caso de eu usar pinos SWD como saída", isso é possível, mas o único que saberia é você, a menos que você queira dizer uma carga corrompida de um firmware que não é intencional, mas pode resultar de o erro, que realmente acontece. Geralmente, isso é recuperável executando a conexão SWD inicial com a redefinição do hardware declarada, manual ou automaticamente. Se você deseja usar os pinos SWD, pois as E / S atrasam alguns segundos antes de fazer essa configuração, pode facilitar o desenvolvimento, mas perceba que ainda significa que você não pode usar o depurador.
Chris Stratton

Respostas:

21

Eu consegui resolver esse problema. Se alguém encontrar um problema semelhante, aqui está o que eu fiz:

Eu usei o ST-Link v2 e o ST-Link Utility. Na configuração, defino "Connect under reset" e a interface SWD (não tenho certeza sobre a frequência).
Então eu pressiono o botão reset na minha placa e clicou em "Target" -> "Erase chip" e logo após clicar soltei o botão - Ele apagou o chip para que eu possa reprogramar meu MCU.


De qualquer forma, se você precisar usar pinos SWD como saída, adicione algum atraso no início do programa ou use algum jumper para desativar / ativar a configuração desses pinos como saídas.

zupazt3
fonte
Sim, isso é bastante esperado se você usar os pinos do SWD para uma finalidade diferente. A experiência mostra que mesmo os projetos do STM32 que não o fazem intencionalmente podem ocasionalmente "ficar presos" em um modo em que os pinos do SWD não respondem (programa corrompido?) E requerem esse tratamento para recuperação.
22815 Chris Stratton
11
No Linux, eu usei esse comando bash para apagar o chip: apagar st-flash
Nathan
O chip Erase não funcionou para mim. Eu fui para Alvo -> Apagar setores -> Selecionar tudo -> Aplicar. Depois disso, recuperei o acesso ao meu quadro. Não sei por que o apagamento do chip não deu uma palavra
andrew
6

Para que a conexão sob redefinição funcione, o ST-Link deve ter controle sobre o pino de redefinição, se você o amarrar ao terra, o ST-Link não terá chance de colocar o alvo em funcionamento e obter acesso a ele.


Se você puxar o pino BOOT0 alto durante a inicialização, o MCU iniciará no carregador de inicialização interno e você poderá obter acesso usando vários protocolos seriais (consulte o manual de referência para obter mais detalhes).

Dentro do gerenciador de inicialização, os pinos do SWD devem estar disponíveis para obter acesso, mas não tenho 100% de certeza disso.

O ST Flash Loader Demonstrator é uma ferramenta que permite apagar / programar o micro usando a interface UART. Se você não conseguir acessar nenhum dos UARTs do seu micro, esta solução não funcionará para você.

Arsenal
fonte
Posso acessar o USART3, que é suportado pelo gerenciador de inicialização, então tentarei isso mais tarde - será complicado, pois o BOOT0 está vinculado ao GND no PCB ... Mas quero saber o que há de errado. Que erro eu cometi? Defino pinos SWD / JTAG como saídas na minha função main (). Mas diz no manual que, durante a redefinição, todos os pinos têm sua função padrão e podem ser usados ​​imediatamente. Então, por que não consigo apagar o flash sob redefinição? Também testei o programador U-LINK 2 e o uVision 5. Espero que nenhum nível de proteção - de alguma forma acidental - seja definido. Eu não defini nenhum desses bits, mas existe alguma maneira de testar se os bits de proteção estão ok?
zupazt3
@ zupazt3 Não quero parecer grosseiro, mas releia minha primeira frase. Ele contém uma resposta para o problema com a conexão sob redefinição. Se você não entender, poste um comentário mais específico.
Arsenal
Mas eu não amarro o tempo todo :) No meu primeiro post, eu quis dizer que MESMO amarrei diretamente ao GND para verificar se isso ajudaria. Mas normalmente não vinculo NRST ao GND, mas a um programador, por isso ele tem controle sobre a redefinição. E ainda não se conectará. Também tentei usar o U-Link 2 e o Keil uVision 5, mas com o mesmo resultado. Qual pode ser a razão?
precisa saber é o seguinte
@ zupazt3 que não ficou muito claro em sua pergunta. Talvez aumentar o relógio do SWD possa ajudar, pois pode obter a conexão antes que o destino alterne para a saída. Mas acidentalmente configurei os pinos do SWD para a saída e não consegui conectar-me ao meu destino. Somente usando o BOOT0 consegui recuperá-lo, se você os amarrasse diretamente ao terra (sem resistor), difícil.
Arsenal
11
Eu finalmente consegui apagar o chip! Com o ST-Link Utility - pressionei o botão de reset, cliquei em "apagar completamente" e soltei o botão, que de alguma forma se apagou e agora funciona. Eu tentei isso antes, mas só agora funcionou.
Zupazt3
3

se você estiver usando stmcubemx, precisará configurar o fio serial na guia pinagem do stmcube. na guia pinagem, clique em SYS e altere a opção de depuração para fio serial. isso resolve meu problema e talvez também o seu problema.

dili
fonte
Embora isso possa ser um problema, se deixar os pinos do SWD no modo de inicialização do SWD não for a configuração padrão deste pacote de software, é um defeito de usabilidade bastante grave que precisa de um relatório e correção de erros. Tem certeza de que não alterou as configurações dos valores originais ou começou com um projeto específico que exigia o uso desses pinos de maneira não padrão?
Chris Stratton
Primeiramente, apenas defino meus pinos como SYS_SW .... mas eles são coloridos em laranja. Também tive problemas para conectar ao chip após o upload do código. Quando selecionei o modo de depuração no SYS-Serial Wire, o chip se conecta normalmente após a queima.
gtu 18/03
1

Eu baixei algum código para minha própria placa STM32F427. Então não consigo mais conectar à minha placa usando o Utilitário ST-LINK. Eu acho que meu código messup as configurações de pinos da porta de depuração (? Não é possível confirmar). O que fiz foi o seguinte para fazer a conexão e reprogramar minha placa:

  1. Abra o Utilitário ST-LINK e prepare-se para "Conectar" no menu Destino.
  2. Ligue a sua placa (no meu caso, eu uso um cabo USB) e AO MESMO TEMPO, clique em "Conectar" no ST-LINK Utility.

Eu restaurei duas placas com esse truque. Espero que isto ajude. --Prumo

Bob Liu
fonte
1

Como dili disse:

se você estiver usando stmcubemx, precisará configurar o fio serial na guia pinagem do stmcube. na guia pinagem, clique em SYS e altere a opção de depuração para fio serial. isso resolve meu problema e talvez também o seu problema.

O STM32CubeMx não configura a porta de depuração por padrão; consequentemente, o ST-Link deixará de funcionar assim que você atualizar seu código. Você precisa apagar o chip com o ST-link Utility, por exemplo. Para conectar com o MCU, tive que puxar o pino BOOT0 alto durante a inicialização para ativar o carregador de inicialização. Então vá ao menu Tarjet e apague o chip .

Pablo Soria
fonte
0

Para reprogramar o MCU, mantenha pressionado o botão de redefinição e escolha conectar ao dispositivo no ST-Link Utility ou pressione o download no seu IDE (por exemplo, Keil) e solte o botão de redefinição.

Misagh
fonte
-1

Os pinos de inicialização (bits em algumas versões) podem impedir que o depurador seja iniciado. Certifique-se de não implementar o padrão de inicialização na inicialização (certo padrão binário nos pinos boot0 e boot1), caso contrário, o seu MCU entrará no estado de inicialização.

Lior Bilia
fonte
Eu tenho o pino boot0 vinculado ao GND ... Não sei ao certo o que você escreveu, porque - como eu disse - consegui programar com êxito o meu flash e o programa ainda se executa no MCU - simplesmente não consigo me conectar ao MCU com ST -Link pela interface SWD. Sob redefinir, ele não deve executar a inicialização e os pinos devem estar no estado padrão, então não entendo por que ele não se conecta.
precisa saber é o seguinte
Você tem certeza sobre isso? Qual combinação você acredita que desabilitaria o SWD de uma maneira que a manipulação da redefinição não pode substituir?
Chris Stratton