STM32 e ST-LINK - Impossibile connettersi all'MCU dopo una corretta programmazione


13

Ho costruito la mia scheda con STM32F7-45VGT6. L'ho programmato con successo con ST-LINK v2 (non quello originale però) e ora non riesco nemmeno a collegarmi con MCU.

Uso l'utilità ST-Link dall'interfaccia ST e SWD. Può essere il caso che io utilizzi i pin SWD come output e nel mio codice li imposto come output GPIO. Può essere il caso?

Tuttavia, collego il mio pin di ripristino a GND e imposto l'opzione "Connetti in ripristino" nell'utilità ST-Link ma non funziona ... Cosa posso fare?

Su Internet, ho trovato qualcosa sull'uso di BOOT0 Pin, ma non so esattamente ...


"Può essere il caso che io utilizzi i pin SWD come output" è possibile, ma l'unico che lo saprebbe sei tu, a meno che tu non intenda un carico corrotto di un firmware che non lo fa intenzionalmente, ma potrebbe essere il risultato di l'errore, che effettivamente accade. Generalmente questo è recuperabile eseguendo la connessione SWD iniziale con il ripristino hardware affermato, manualmente o automaticamente. Se si desidera utilizzare i pin SWD come ritardo degli I / O di un paio di secondi prima di rendere tale impostazione potrebbe semplificare lo sviluppo, ma rendersi conto che significa comunque che non è possibile utilizzare il debugger.
Chris Stratton,

Risposte:


21

Sono riuscito a risolvere quel problema. Se qualcuno incontra un problema simile, ecco cosa ho fatto:

Ho usato ST-Link v2 e ST-Link Utility. Nell'impostazione, ho impostato "Connetti in reset" e l'interfaccia SWD (non sono sicuro della frequenza).
Quindi premo il pulsante di reset sulla mia scheda e ho cliccato su "Target" -> "Cancella chip" e subito dopo aver cliccato ho rilasciato il pulsante - Ha cancellato il chip in modo da poter riprogrammare il mio MCU.


Ad ogni modo, se è necessario utilizzare i pin SWD come output, aggiungere un po 'di ritardo all'inizio del programma o utilizzare un ponticello per disabilitare / abilitare l'impostazione di questi pin come output.


Sì, è quasi prevedibile se si utilizzano i pin SWD per uno scopo diverso. L'esperienza dimostra che anche i progetti STM32 che non lo fanno intenzionalmente possono occasionalmente "bloccarsi" in una modalità in cui i pin SWD non rispondono (programma corrotto?) E richiedono tale trattamento per il recupero.
Chris Stratton,

1
In Linux, ho usato questo comando bash per cancellare il chip: st-flash erase
nathan

Il chip di cancellazione non ha funzionato per me. Sono andato su Target -> Cancella settori -> Seleziona tutto -> applica. Dopo questo ho riottenuto l'accesso alla mia tavola. Non sono sicuro che il motivo per cui la cancellazione chip non ha fatto parola
andrew

6

Perché la connessione in reset funzioni, ST-Link deve avere il controllo sul pin di reset, se lo si collega a terra, ST-Link non ha alcuna possibilità di far funzionare il target e accedervi.


Se si alza il pin BOOT0 durante l'accensione, l'MCU si avvierà nel bootloader interno e sarà possibile accedere utilizzando diversi protocolli seriali (consultare il manuale di riferimento per maggiori dettagli).

All'interno del bootloader dovrebbero essere disponibili i pin SWD per ottenere l'accesso, ma non ne sono sicuro al 100%.

Il dimostratore ST Flash Loader è uno strumento che consente di cancellare / programmare il micro utilizzando l'interfaccia UART. Se non riesci ad accedere a nessuno degli UART del tuo micro, questa soluzione non funzionerà per te.


Posso accedere a USART3 che è supportato dal bootloader, quindi lo proverò più tardi - sarà difficile, perché BOOT0 è legato a GND su PCB ... Ma voglio sapere cosa c'è che non va. Che cosa ho fatto di sbagliato? Ho impostato i pin SWD / JTAG come uscite nella mia funzione main (). Ma nel manuale si dice che durante il reset tutti i pin hanno la loro funzione predefinita e possono essere usati immediatamente. Quindi perché non riesco a cancellare il flash in reset? Ho anche testato il programmatore U-LINK 2 e uVision 5. Spero che nessun livello di protezione sia stato, in qualche modo accidentalmente, impostato. Non ho impostato tali bit, ma esiste un modo per verificare se i bit di protezione sono ok?
zupazt3,

@ zupazt3 Non intendo sembrare scortese, ma per favore rileggi la mia prima frase. Contiene una risposta al problema con la connessione in reset. Se non lo capisci, pubblica un commento più specifico.
Arsenal,

Ma non lo lego sempre :) Nel mio primo post intendevo dire che ANCHE l'ho legato direttamente a GND per verificare se ciò avrebbe aiutato. Ma normalmente non lego NRST a GND, ma a un programmatore, quindi ha il controllo sul ripristino. E ancora non si connetterà. Ho anche provato a usare U-Link 2 e Keil uVision 5 ma con lo stesso risultato. Quale può essere la ragione?
zupazt3,

@ zupazt3 che non era abbastanza chiaro dalla tua domanda. Forse aumentare l'orologio SWD potrebbe aiutare, in quanto potrebbe ottenere la connessione prima che la destinazione passi all'output. Ma ho accidentalmente impostato i pin SWD su output e non sono stato in grado di ottenere una connessione al mio target e solo usando BOOT0 sono stato in grado di recuperarlo, se li hai collegati a terra direttamente (senza un resistore) questo et difficile.
Arsenal,

1
Finalmente sono riuscito a cancellare il chip! Con l'utilità ST-Link - ho premuto il pulsante di reset, ho cliccato su "cancella completamente" e il pulsante di rilascio e in qualche modo si è cancellato e ora funziona. L'ho provato prima, ma solo ora ha funzionato.
zupazt3,

3

se stai usando stmcubemx, devi configurare il cavo seriale nella scheda pinout di stmcube. nella scheda pinout, fare clic su SYS e modificare l'opzione di debug in cavo seriale. risolve il mio problema, e forse anche il tuo problema.


Anche se questo potrebbe essere un problema, se lasciare i pin SWD nella modalità di accensione predefinita della modalità SWD non è l'impostazione predefinita di questa suite di software, è probabilmente un difetto di usabilità abbastanza grave che necessita di una segnalazione e correzione di bug. Sei sicuro di non aver modificato le impostazioni dai loro valori originali o di iniziare con un progetto particolare che richiedeva l'uso di quei pin in modo non predefinito?
Chris Stratton,

Innanzitutto ho appena impostato le mie spille come SYS_SW .... ma sono colorate in arancione. Si è verificato anche un problema durante la connessione al chip dopo aver caricato il codice. Quando ho selezionato la modalità di debug in SYS-Serial Wire, il chip si collega normalmente dopo la flasing.
GT

1

Ho scaricato del codice sulla mia scheda STM32F427. Quindi non riesco più a collegarmi alla mia scheda utilizzando l'utilità ST-LINK. Penso che il mio codice abbia scritto le configurazioni del pin della porta di debug (? Non posso confermare). Quello che ho fatto è il seguente per effettuare la connessione e riprogrammare la mia scheda:

  1. Aprire l'utilità ST-LINK e prepararsi a "Connetti" nel menu Destinazione.
  2. Alimenta la tua scheda (nel mio caso, utilizzo un cavo USB) e ALLO STESSO TEMPO fai clic su "Connetti" dall'utilità ST-LINK.

Ho ripristinato 2 schede con questo trucco. Spero che sia di aiuto. --Bob


1

Come ha detto Dili:

se stai usando stmcubemx, devi configurare il cavo seriale nella scheda pinout di stmcube. nella scheda pinout, fare clic su SYS e modificare l'opzione di debug in cavo seriale. risolve il mio problema, e forse anche il tuo problema.

STM32CubeMx non configura la porta di debug per impostazione predefinita, di conseguenza ST-Link smetterà di funzionare una volta che si esegue il flashing del codice. Ad esempio, è necessario cancellare il chip con l'utilità ST-link. Per connettermi con l'MCU ho dovuto tirare in alto il pin BOOT0 durante l'accensione per attivare il bootloader. Quindi vai al menu Tarjet e Cancella chip .


0

Per riprogrammare l'MCU, tenere premuto il pulsante di ripristino e scegliere Connetti a dispositivo nell'utilità ST-Link o premere download nell'IDE (ad esempio Keil) e quindi rilasciare il pulsante di ripristino.


-1

I pin di avvio (bit in alcune versioni) possono impedire l'avvio del debugger. Assicurati di non implementare il modello di avvio all'avvio (alcuni modelli binari sui pin boot0 e boot1), altrimenti la tua MCU entrerà nello stato di avvio.


Ho pin boot0 legato a GND ... Non sono sicuro di quello che hai scritto, perché - come ho detto - sono riuscito a programmare con successo il mio flash e il programma si esegue ancora su MCU - Non riesco a collegarmi a MCU con ST -Collegamento tramite interfaccia SWD. Sotto reset non dovrebbe eseguire l'avvio e i pin dovrebbero essere nello stato predefinito, quindi non capisco perché non si connette.
zupazt3,

Sei sicuro di questo? Quale combinazione pensi che disabiliterebbe l'SWD in un modo che la manipolazione del reset non può ignorare?
Chris Stratton,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.