Estou usando o MDK-Lite versão 5.23 com uma placa STMicroelectronics STM32F072B-Disco "Discovery" e estou tentando usar o exemplo em Flash fornecido pelos exemplos do Discovery.
Usei esta placa e a cadeia de ferramentas para outros exemplos e codifiquei alguns trabalhos de SPI e GPIO. O IDE funciona como um campeão. No entanto, para este projeto em particular, posso criar o código e executá-lo baixando e usando o botão de redefinição. Não consigo usar o depurador no projeto assim que uso a rotina HAL_FLASHEx_Erase (). Depois de executar essa rotina, o IDE exibe uma caixa de diálogo "Não é possível acessar o destino. Desligando a sessão de depuração".
Pelo que vale, sei que não é um erro de programação, porque se eu fizer o download do código e depois executá-lo pressionando o botão de reset, ele funcionará. Eu usei esse mesmo depurador com uma placa de TI e ele foi capaz de programar o flash e executar rotinas também. Tenho certeza de que não estou apagando a parte do flash em que o código está armazenado, então não é isso.
Se eu pular essa linha em main.c
if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK)
então deixa cair a sessão de depuração. Se, em vez disso, pular para a mesma linha e passar por cima de cada uma das chamadas na rotina de exclusão do flash, ela funcionará e eventualmente sairá da rotina e eu posso depurar o restante do código.
Respostas:
Meu palpite é que esta é uma fonte de alimentação relacionada em algum nível. A fonte externa ou comutação on-board dos trilhos de potência.
Para esclarecer o cenário, a depuração funciona bem após uma redefinição do hardware, mas quando seu destino apaga um bloco de flash, a conexão de depuração é descartada?
A depuração não se importa com o código sendo executado corretamente - você pode estar no estado de bloqueio e interromper a depuração ainda deve funcionar. A única coisa no lado da CPU que bloqueia a depuração é um acesso AHB com impasse. Isso significa que o problema está na interface SWD entre o STM32F7 e no chip de interface USB-SWD on-board (também um STM32, presumo). Este dispositivo possui alguns comutadores de trilho de energia a bordo que me confundiram na primeira vez em que usei a placa.
Vale a pena notar que a eliminação do flash aumentará o consumo de energia atual do dispositivo - sua PSU externa está pronta para o trabalho e você pode usar uma alternativa?
Editar: com base nos seus comentários de que passar o código em questão causa uma falha no depurador, enquanto o passo único não, acho que seu problema está relacionado a essa pergunta .
A transição é implementada usando um ponto de interrupção (e sondagem para o estado de parada), enquanto a etapa única é suportada no hardware. Isso ainda não explica por que o depurador parece estar ficando confuso, mas permite que o depurador esteja tentando acessar o código (a partir do flash) enquanto o controlador flash está ativo.
Com base nessas observações, sugiro que você defina um ponto de interrupção após a exclusão e tente evitar o desencadeamento desse cenário.
fonte