Beendigung des untergeordneten OpenOCD-Prozesses: Falsches Gerät erkannt

Aufstellen

Ich habe ein STM32F103C8T6-Minimal-Evaluierungsboard (siehe STM32F103C8T6 ).

Und ich verwende einen ST-Link wie das Bild unten.

Ich habe System Workbench für Eclipse installiert. Ich habe mein eigenes Projekt erstellt (C++, Leeres Projekt, Toolchains: Ac6 STM 32 MCU GCC), Serie: STM32F1, Mcu: STM32F103C8Tx, Kern: ARM Cortex-M3, Paket: LQFP48, Speicher-RAM: Größe 0x5000, Speicher-ROM: Größe 0x10000 .

Code

Der Code enthält eine system_stm32f10x.c-Datei, die von der IDE generiert (oder automatisch eingebunden) wurde.

Das Programm lässt sich gut kompilieren:


  * @file    main.c
  * @author  Ac6
  * @version V1.0
  * @date    01-December-2013
  * @brief   Default main function.
  ******************************************************************************
*/


#include "stm32f10x.h"
#include <stm32f10x_rcc.h>

void delay(int counter)
{
    volatile int i;
    for (i = 0; i < counter * 10000; i++) {}
}

int main(void)
{
    GPIO_InitTypeDef gpio;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

    GPIO_StructInit(&gpio);
    gpio.GPIO_Pin = GPIO_Pin_13;
    gpio.GPIO_Mode = GPIO_Mode_Out_PP;
    gpio.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &gpio);

    GPIO_SetBits(GPIOC, GPIO_Pin_13);

    while (1)
    {
        GPIO_SetBits(GPIOC, GPIO_Pin_13); // LED ON
        delay(400);
        GPIO_ResetBits(GPIOC, GPIO_Pin_13); // LED OFF
        delay(400);
    }
}

Hochladen durch OpenSTM32

Wenn ich eine Run-Konfiguration erstelle (keine Änderungen vorgenommen) und Ausführen auswähle, erhalte ich die folgende Fehlermeldung (in der Konsole):

Open On-Chip Debugger 0.10.0-dev-00302-gc211ca5-dirty (2017-07-03-10:41)
Licensed under GNU GPL v2
For bug reports, read
    http://openocd.org/doc/doxygen/bugs.html
srst_only separate srst_nogate srst_open_drain connect_assert_srst
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
adapter speed: 950 kHz
adapter_nsrst_delay: 100
Info : clock speed 950 kHz
Info : STLINK v2 JTAG v17 API v2 SWIM v4 VID 0x0483 PID 0x3748
Info : vid/pid are not identical: 0x0483/0x374B 0x0483/0x3748
Info : using stlink api v2
Info : Target voltage: 3.231135
Info : STM32F103C8Tx.cpu: hardware has 6 breakpoints, 4 watchpoints
adapter speed: 950 kHz
Error: timed out while waiting for target halted
TARGET: STM32F103C8Tx.cpu - Not halted
in procedure 'program' 
in procedure 'reset' called at file "embedded:startup.tcl", line 478
in procedure 'ocd_bouncer'

** Unable to reset target **
shutdown command invoked

Verbindungen

  • STlink SWDIO Pin 2 -> Pin 7 von JTAG
  • STlink GND Pin 4 GND -> Pin 4 von JTAG
  • STlink SWCLK Pin 6 -> Pin 9 von JTAG
  • USB -> USB (STlink 3.3V Pin 8 nicht verbunden, auch nicht alle anderen STlink Pins)

Schema

Geben Sie hier die Bildbeschreibung ein STLink

Debug-Konfigurationsdatei

# This is an F103C8T6_Simple board with a single STM32F103C8Tx chip
#
# Generated by System Workbench for STM32
# Take care that such file, as generated, may be overridden without any early notice. Please have a look to debug launch configuration setup(s)

source [find interface/stlink.cfg] 

set WORKAREASIZE 0x5000

transport select "hla_swd"

set CHIPNAME STM32F103C8Tx

# Enable debug when in low power modes
set ENABLE_LOW_POWER 1

# Stop Watchdog counters when halt
set STOP_WATCHDOG 1

# STlink Debug clock frequency
set CLOCK_FREQ 4000

# use hardware reset, connect under reset
# connect_assert_srst needed if low power mode application running (WFI...)
reset_config srst_only srst_nogate connect_assert_srst
set CONNECT_UNDER_RESET 1

source [find target/stm32f1x.cfg]

Konfigurationsbildschirm ausführen

Geben Sie hier die Bildbeschreibung ein

Aktualisieren

Ich könnte ein Programm über das Link-Dienstprogramm senden, siehe unten. Ich sehe kein blinkendes Licht, aber vielleicht ist das Programm falsch.

Allerdings ist dieser Weg nicht sehr komfortabel (und ich sehe kein laufendes Programm). Außerdem kann ich auf diese Weise immer noch nicht debuggen.

Geben Sie hier die Bildbeschreibung ein

Hochladen/Verifizieren des Programms

PROBLEM GELÖST

Siehe meine Antwort (um anderen mit dem ähnlichen Problem zu helfen)

Vielen Dank für Ihre Antworten und zahlreichen nützlichen Anmerkungen.

Sie müssen wirklich einen Schaltplan Ihres Entwicklungsboards einfügen und den Namen oder den Text Ihres openocd-Adapterskripts angeben.
@ChrisStratton Ich habe die Schaltpläne hinzugefügt (Entschuldigung für das schlechte Bild, ich habe hier nicht so gutes Licht).
Laden Sie das ST-Link Utility- Tool herunter und überprüfen Sie, ob Ihr ST-Link überhaupt funktioniert.
Ihre Hardware scheint die RST-Leitung nicht zu verwenden, daher benötigen Sie "reset_config none".
@Turbo Ich weiß noch nicht, was reset_config nicht bedeutet, aber ich werde heute Abend mehr über alle Reset-Probleme / -Handhabung lesen
@Bence Kaulics ... das hat funktioniert, ich kann sogar hochladen (siehe Screenshots am Ende), aber ich sehe keine LED blinken.
@BenceKaulics ... es ist mir gelungen, ein LED-Blinken zu bekommen ... danke für deine Idee.
@TurboJ Danke für den guten Kommentar, ich habe es auf Software-Reset geändert (oder so, und es funktioniert).

Antworten (4)

Verbindungen hergestellt: STlink SWDIO Pin 2 -> Pin 7 von JTAG STlink GND Pin 4 GND -> Pin 4 von JTAG STlink SWCLK Pin 6 -> Pin 9 von JTAG STlink 3.3V Pin 8 -> Pin 2 von JTAG

Das Zurücksetzen geschieht nicht auf mysteriöse Weise. Es ist tatsächlich eine direkte Verbindung zum MCU-Reset-Pin von jtag/swd, die in Ihrer Konfiguration fehlt.

edit: Das war falsch. Siehe Kommentar von Chris.

* aktualisieren *

Das Zurücksetzen der Emulation erfordert korrekte openocd-Konfigurationsparameter, die derzeit für das Zurücksetzen der Hardware eingestellt sind. Bei "srst" dreht sich alles um das Zurücksetzen des Systems, nicht um die Emulation. Lesen Sie auch das Handbuch auf dem Github sorgfältig durch: Der Autor führt das Zurücksetzen manuell durch, drückt die Reset-Taste, bevor er den Reset-Befehl ausgibt, und lässt ihn innerhalb der Wait-the-Reset-Periode von openocd los.

Auch das Entfernen des Parameters "reset on connect" aus der Konfigurationsdatei kann die Dinge für ein solches manuelles Zurücksetzen erleichtern.

Die Lösung ist also entweder manuelles Zurücksetzen, oder korrekte Parameter für die Emulation (Falls Ihr Chip es tatsächlich hat; ich musste den Text oben wegen des Konzeptionsfehlers streichen, ich weiß nicht, ob Ihr Chip es hat) oder Anpassen Ihrer Stlinks Reset-Signal in die Platine.

Nicht unbedingt. STM32 unterstützen auch einen Befehlsreset. So ziemlich das einzige Mal, dass Sie den Hardware-Reset benötigen, ist, wenn ein Programm geladen ist, das die SWD-Pins deaktiviert (neu verwendet).
Ich habe die Informationen von github.com/rogerclarkmelbourne/Arduino_STM32/wiki/… ... wo ich auch 3,3 V vom ST Link an den JTAG (Pin 1) angeschlossen habe, weil ich kein USB verwende.
Sie sollten wahrscheinlich nicht versuchen, die Zielplatine über den SWD-Adapter mit Strom zu versorgen. Es sieht so aus, als wäre es für 5-V-USB-Strom selbst gedacht, und die Stromversorgung des unbekannten internen Reglers ist eine zweifelhafte Sache.
@ChrisStratton: Ich habe es jetzt über ein USB-Kabel angeschlossen, aber es funktioniert immer noch nicht (ich habe die Adapterfrage gestellt).
@MichelKeijzers, siehe das Update.
@Ayhan auf welches Handbuch auf GitHub beziehst du dich (zu lesen)? In dem von mir verwendeten Link habe ich einige Teile übersprungen, die sich auf das Terminal beziehen (da ich kein Linux verwende). Ich glaube auch, dass ich einige GDB-Konfigurationsoptionen vermisse.
@MichelKeijzers, es ist der Link oben in Ihrem Kommentar (Wiki). Suchen Sie im Dokument nach dem Wort „Zurücksetzen“. Ich habe nicht verstanden, warum die Reset-Leitung nicht verwendet wird.
@Ayhan ... ja natürlich (über den Wiki-Link), sorry für die dumme Frage von mir. Ich werde es heute Abend überprüfen (ohne zu wissen, dass es mit einem Reset so viele Probleme geben könnte ... zu sehr an Arduino gewöhnt).
@Ayhan Ich habe versucht, das Github-Handbuch fortzusetzen, es ist jedoch für Unix, daher konnte der Reset-Teil nicht durchgeführt werden.
@Ayhan Ich könnte über den STLink hochladen, aber ich weiß immer noch nicht, ob mein Programm läuft (zumindest blinkt keine LED)
@MichelKeijzers Ich gehe davon aus, dass Sie die Platine nach der Programmierung entweder zurückgesetzt oder aus- / eingeschaltet haben. Die Programmierung scheint in Ordnung zu sein. Aber bezüglich des Programms könnte alles falsch sein und vielleicht ist alles in Ordnung, aber der LED-Port ist falsch. Daher ist das Debuggen jetzt obligatorisch und Sie haben das Zurücksetzungsproblem nicht gelöst. Das ist schmerzhaft. Ich rate Ihnen, stlink-integrierte Boards wie stm32f3/4 Discovery und bessere Tutorials zu verwenden. Zum Beispiel scheint dies gut, aber veraltet zu sein: embeddedprogrammer.blogspot.com.tr/2012/09/…
@Ayhan .. Ich habe es zurückgesetzt, aber jetzt wird es nicht einmal benötigt, ich versuche einige Blink-Variationen und es funktioniert sofort. Es ist sehr schön, auch debuggen zu können (auf einem Arduino nicht möglich). Vielleicht sollte ich mit der Entdeckung anfangen, aber es scheint jetzt zu funktionieren. Es tut mir sehr leid, dass ich all diese (für die meisten) trivialen Fragen stellen musste und hoffe, dass ich jetzt fortfahren kann (oder mehr „echte“ Fragen habe). Vielen Dank für Ihre Hilfe
@Ayhan Und danke für den Link ... Ich werde es bald überprüfen.
@MichelKeijzers, ich weiß es wirklich zu schätzen, dass Sie das Arduino jailbreaken :-) Sie müssen sich überhaupt nicht entschuldigen, das waren alles gültige und gute Fragen. Ich bin froh, dass Sie die Probleme gelöst haben, machen Sie weiter so.
@Ayhan ... danke ... Ich habe ein Buch gefunden, also hoffe ich, dass ich von nun an mehr durch Bücher zum Programmieren finden kann, aber mit Installation / Tools usw. Ich brauchte wirklich etwas Hilfe. Danke noch einmal.

Das Problem ist behoben.

Es wird behoben, indem Sie zu Run Configurations, Debugger tab, Debugger tab, Mode Setup, Reset Mode: Change to Software system reset gehen.

Das zugrunde liegende Problem ist, dass mein STLink V2 ist, nicht V2.1, und dies hat keinen Hardware-Reset.

Nein, Ihr Stick hat einen Hardware-Reset-Ausgang an Pin 1, Sie haben ihn einfach nicht mit dem Ziel verbunden und müssen dies auch nicht, wenn Sie einen Soft-Reset verwenden.
@ChrisStratton Was ist der Vorteil eines Hardware-Resets? Da scheint dies gut zu funktionieren.
Der Software-Reset funktioniert nicht, wenn die SWD-Pins deaktiviert wurden. Zusätzlich zu Software, die dies absichtlich tut, scheinen diese Chips gelegentlich durch ein fehlgeschlagenes Laden der Firmware dorthin zu gelangen. Das Zurücksetzen in Verbindung mit dem Aufbau der SWD-Verbindung kann dazu beitragen, dies zu unterbrechen, bevor es wirksam wird, und dem Debugger die Kontrolle überlassen.
@ChrisStratton Ich verstehe nicht alles, was du geschrieben hast. Ich habe die SWD-Pins (afik) verbunden. Mir ist aufgefallen, dass die IDE manchmal den STM32 nicht mehr sieht, ich entferne einfach die USB-Stromversorgung und starte ihn neu und es funktioniert ... Oder ich drücke selbst die Taste RST ... das würde gut genug für mich funktionieren.

Es scheint, dass Ihre OpenOCD-Konfigurationsdatei eine falsche ProductID-Nummer hat. Diese Nummer bezieht sich auf den von Ihnen verwendeten ST-LINK-Klonadapter, nicht auf Ihren spezifischen Mikrocontroller.

Sehen Sie dies von Ihrer OpenOCD-Konsole aus:

Info: STLINK v2 JTAG v17 API v2 SWIM v4 VID 0x0483 PID 0x3748

Info : vid/pid sind nicht identisch: 0x0483/ 0x374B 0x0483/0x3748

Beachten Sie den Unterschied, den ich hervorgehoben habe. Es ist manchmal schwer, den Unterschied zwischen einer 8 und einem B zu erkennen!

Da die ST-LINK-Klone gleich funktionieren sollten, bezweifle ich, dass dies Ihr Problem ist. Aber ich lasse die Info hier, falls es jemandem hilft.

Die PID hier ist die des Stlink (Clone) SWD-Adapters, nicht der Ziel-MCU. Es gibt mehrere verschiedene PIDs, die meistens funktionieren gleich.
Ich kann keine dieser Nummern finden, außer in der Protokolldatei.
@ChrisStratton, danke; natürlich hast du recht. Ich werde meine Antwort hinterlassen (nachdem ich sie optimiert habe), falls es jemandem hilft ...
@MichelKeijzers Sie finden den Speicherort der OCD-Konfigurationsdatei auf der Registerkarte „Debugger“ des Bildschirms „Run Configurations“ in Eclipse. Es gibt eine "Konfigurationsoption", die wie folgt aussieht -f filename.cfg. Es endet wahrscheinlich auf .cfg, aber es kann anders sein. Probieren Sie es auch mit einer Debug-Konfiguration anstelle einer Run-Konfiguration aus.
Das Zurücksetzen des Befehls funktioniert nicht immer. Ich kann nicht herausfinden, wann, aber manchmal kann ich ohne es und ohne Deaktivierung der Pins nicht programmieren und debuggen
@bitsmack ... Ich glaube, ich habe es gefunden, konnte das -f nicht finden, fand aber eine Konfigurationsdatei. Ich habe es in der Frage hinzugefügt.
@bitsmack ... Ich glaube, ich habe die Optionen -f nicht, da ich die GDB-Optionen nicht in meinen Run-Konfigurationen habe.
@MichelKeijzers Sie haben einen Screenshot der Registerkarte „Main“ des Fensters „Run Configurations“ hinzugefügt. Können Sie auch einen Screenshot der Registerkarte "Debugger" hinzufügen?
@bitsmack oops ... Ich habe es aktualisiert.
@bitsmack Ich habe das -f im Github gefunden, aber ich kann diesen Befehl nicht ausführen, da es für Linux geschrieben wurde und ich Windows habe.

Um mit ARM-Chips auf Eclipse zu arbeiten, verwende ich selbst https://gnu-mcu-eclipse.github.io/ .

Die Konfiguration für STM32F103C8T6 mit einem ST-Link-Stick mit diesem Eclipse-Plugin wäre

-f interface/stlink-v2.cfg -f target/stm32f1x.cfg

Die PID 0x374B ist für ST-Link V2.1. Die chinesischen Sticks sind ST-Link V2. Sie haben also die falsche Debugger-Schnittstelle ausgewählt. Da Sie ein anderes Eclipse-Plugin verwenden, weiß ich nicht, wo und wie ich das konfigurieren soll, aber schauen Sie sich die ausgewählte Debugger-Schnittstelle an.

Danke ... Ich konnte das -f nicht finden, aber ich habe die Option für den Software-Reset geändert, jetzt sieht es so aus: # use software system reset reset_config none
Eine andere Sache, ich sehe, dass auf Ihrem ST-Link die Firmware V17 ausgeführt wird. Ich würde empfehlen, die Firmware zu aktualisieren ( st.com/en/embedded-software/stsw-link007.html ) (Die Aktualisierung funktioniert gut auf Klonen, ich habe ein Dutzend davon und hatte nie Probleme)
Guter Punkt und tatsächlich, das ST Link Utility hat es bereits erwähnt ... Ich habe jetzt v27: Info: STLINK v2 JTAG v27 API v2 SWIM v6 VID 0x0483 PID 0x3748