Como usar o ST-Link externo para depurar / programar o STM32F103 MCU?

16

Estou usando o STM32F103 MCU para o meu próprio projeto e quero usar o ST-Link da placa STM32F411 Nucleo para fins de depuração / programação externos.

Desativei os jumpers CN2 e minha pergunta real está nas pinagens do SWO (CN2). Como procedo é o seguinte:

  • O PIN 1 (do SWO) é VDD_Target
  • O PIN 2 é SWCLK
  • PIN 3 é GND
  • O PIN 4 é SWDIO
  • O PIN 5 é NRST
  • O PIN 6 é SWO

Que eu saiba, não devo usar todos esses pinos acima. Como em, eu conectei

  • PIN 2 a PIN 37 (ou PA14) no MCU
  • PIN 3 a GND
  • PIN 4 a PIN 34 (ou PA13)
  • PIN 5 a PIN 7 ou (RESET) no MCU de destino.

Não tenho certeza se devo conectar o pino SWO, pois está definido como "reservado" (Por quê?). Também estou dando 3,3 V ao pino VIN do MCU, significa que não preciso conectar o VDD (PIN 1 do stlink).

Consulte esta tabela que tirei da folha de dados oficial:

insira a descrição da imagem aqui insira a descrição da imagem aqui

Aqui está a configuração geral de pinagem do MCU aqui:

insira a descrição da imagem aqui

Eu testei "quase" tudo com osciloscópio e testador e tudo parece bem. O que mais estou perdendo aqui? Devo fazer algo com os pinos BOOT0 ou BOOT1?

baqx0r
fonte

Respostas:

11

Antes de tudo, você está certo, se sua placa já possui uma fonte de tensão de alimentação, não é necessário conectar o pino VDD da ST-Link.

A segunda coisa que eu recomendaria é abrir o manual de referência da placa STM32F411 Nucleo e examinar os esquemas. Especialmente a parte em que o ST-Link está conectado ao controlador na placa.

insira a descrição da imagem aqui

Por ST Microelectronics, SWCLK, SWDIO, NRST e SWO (e GND, é claro) são conectados ao MCU de destino. O pino SWO adicional é usado para fins de depuração. Você pode acessar os dados impressos com a printffunção através deste pino com o ST-Link Utility .

O Printf via SWO Viewer exibe os dados de printf enviados do destino através do SWO.

Então, eu recomendo que você conecte o SWO também, pode ser útil mais tarde. Conecte seu MCU ao ST-Link da mesma maneira que eles conectaram o MCU do Nucleo.

Quanto às configurações de inicialização, existem três opções selecionáveis, mais fáceis de manter no Flash Principal e vincular o Boot0 ao GND, mas eu não conheço seus requisitos, portanto cabe a você escolher.

insira a descrição da imagem aqui

Bence Kaulics
fonte
3
Embora você possa "se safar" de não conectar o pino do VDD, não existe uma fonte, mas sim uma detecção da tensão de alimentação do alvo (veja como ele está conectado a uma entrada analógica). Uma interface de depuração mais sofisticada poderia manter suas linhas baixas sem isso e apenas aumentá-las para o nível de fornecimento correspondente, suportando várias tensões alvo. A linha de redefinição normalmente não é necessária (ao contrário de muitas outras implementações de SWD). É essencial para recuperar cargas ruins e firmwares que desativam os pinos do SWD, mas também podem ser manipulados manualmente.
Chris Stratton
Em uma placa STM32F1xx, o principal motivo para tornar o BOOT0 selecionável externamente seria se houver um desejo de usar o carregador de inicialização ROM UART (etc) de fábrica. No '103, isso não suporta USB, como ocorre em muitas das partes posteriores da ST. Se alguém deseja um carregador de inicialização USB no '103, ele deve estar na memória flash principal, para que o pino BOOT0 não seja útil para isso.
Chris Stratton
Meu boot0 e boot0 está definido como zero para garantir que o programa seja gravado na memória Flash. Além disso, tentarei usar o utilitário st-link na máquina Windows. Atualmente, estou usando o Mac OS, mas não tenho certeza se o meu problema está relacionado ao SO.
baqx0r
Usei o ST-Link de um kit de descoberta STM32F407 para programar um STM32F303. Simplesmente conectei o conector SWD do kit (de 2 a 5 pinos) à minha placa SWCLK, GND, SWDIO, NRST, SWO (como é feito no Discovery e no Nucleo) e funcionou com o ST-Link Utility. O pino boot0 é vinculado ao GND por meio de um resistor de 10k, com base no manual de referência do hardware STM32F303 .
Bence Kaulics
6

Antes de tudo, obrigado a todos por sua contribuição.

Após duas noites sem dormir e uma luta, eu pude descobrir o problema. O problema estava nas conexões de pinos na minha placa personalizada: eu pensava que, no meu MCU, o Pin 9 (VDDA) fica em curto-circuito com os PINs 24-36-48 e o Pin 8 (VSSA) com os PINs 23-35-47, mas não é assim.

Eu precisava dar outro 3.3V e GND para VDDA e VSSA e o st-link começou a funcionar.

Método da solução : usei os esquemas do Maple Mini para entender as conexões do STM32F103. Acontece que eles entraram em curto-circuito com o VDDA com VDD1, VDD2 e VDD3 e o VSSA com VSS1, VSS2 e VSS3. Eu acho que eu deveria ter entendido isso com o nome VSSA, pois não é VSS0 ou VSS4.

baqx0r
fonte