Keil uVision MDK-Lite, placa STM32F072B-Discovery e API flash

10

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.

netskink
fonte
Não tenho certeza, mas talvez o lado USB do CMSIS-DAP tenha sido ligado e desligado. Essa placa possui uma distribuição de energia bastante complexa para os componentes de depuração externos. Não é possível acessar o destino provavelmente significa que a conexão (por fio serial) ao DAP foi interrompida.
Sean Houlihane 29/03
Estamos falando do ST-LINK / V2 integrado como depurador?
Bence Kaulics 30/03
Se você puder compartilhar uma imagem de código, alguém poderá verificar (e descartar problemas de hardware). Só tem uma placa de M7-me ...
Sean Houlihane
Bence Kaulics, o depurador embutido na placa stm32f072B-disco. É o depurador ST-Link e não um depurador Keil ULINK2 que é ST-LINK / V2. Eu tenho um daqueles Keil usb depurador conectado, mas ele se conecta à placa com um cabo de fita. Estou usando o conector mini USB ST-Link na placa e não um conector de cabo de fita. A placa obtém energia do conector mini-usb e não de uma fonte de alimentação separada.
Netskink 30/03
11
Em relação ao exemplo de código. A amostra é fornecida pelo repot de descoberta do STMicro. O caminho do projeto no repot ST é Projects / STM32F072B-Discovery / Examples / FLASH / FLASH_EraseProgram. Estou usando o projeto MDK-ARM nesse diretório. Ele falha na linha 108, onde ele faz HAL_FLASHEx_Erase ()
netskink

Respostas:

7

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.

Sean Houlihane
fonte
Correto, ele funciona bem, mas quando eu apago um bloco, a conexão USB com o depurador cai. Eu estava usando um hub usb sem energia, então isso parecia lógico; no entanto, conectar-se diretamente ao computador e usar um hub diferente fornece o mesmo resultado.
Netskink 30/03
Se você estiver executando o código enquanto estiver acessando o flash, bloqueará o AHB por um tempo. A criação de imagens neste cenário pode ser confusa. stackoverflow.com/questions/3445598 tem mais.
Sean Houlihane 30/03