Forum: Mikrocontroller und Digitale Elektronik STM32 nach dem Flashen nicht mehr erreichbar


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von hochsitzcola (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich habe mir mit STM32CubeMX eine Programmstruktur mit den benötigen 
IOs, Timern etc. erzeugt. Das Ganze ist ohne Fehlermeldung compiliert 
worden (mit OpenSTM32 in Eclipse). Ich habe das erzeugte Hex-file 
spaßeshalber mal geflasht, sinnvollen Inhalt hat der Code ja noch 
keinen, es wird nur die ganze Peripherie initialisiert. Nach dem Flashen 
ist nun der Controller mit dem ST-Link-Utility nicht mehr ansprechbar.
Ich habe die Clock auf internen Oszillator gestellt, da kein externer 
angeschlossen ist.
1
void SystemClock_Config(void)
2
{
3
4
  RCC_OscInitTypeDef RCC_OscInitStruct;
5
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
6
  RCC_PeriphCLKInitTypeDef PeriphClkInit;
7
8
    /**Initializes the CPU, AHB and APB busses clocks 
9
    */
10
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
11
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
12
  RCC_OscInitStruct.HSICalibrationValue = 16;
13
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
14
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI_DIV2;
15
  RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL16;
16
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
17
  {
18
    _Error_Handler(__FILE__, __LINE__);
19
  }
20
21
    /**Initializes the CPU, AHB and APB busses clocks 
22
    */
23
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
24
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
25
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
26
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
27
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
28
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
29
30
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
31
  {
32
    _Error_Handler(__FILE__, __LINE__);
33
  }
34
35
  PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;
36
  PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;
37
  if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
38
  {
39
    _Error_Handler(__FILE__, __LINE__);
40
  }
41
42
    /**Configure the Systick interrupt time 
43
    */
44
  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
45
46
    /**Configure the Systick 
47
    */
48
  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
49
50
  /* SysTick_IRQn interrupt configuration */
51
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
52
}

Hier der Log des ST-Link-Utilities
1
18:14:26 : Device ID:0x412 
2
18:14:26 : Device flash Size : 32KBytes
3
18:14:26 : Device family :STM32F10xx Low-density
4
18:14:36 : Disconnected from device.
5
18:20:16 : [OC_01.hex] opened successfully.
6
18:20:16 : [OC_01.hex] checksum : 0x000DDFEA 
7
18:20:27 : ST-LINK SN : 53FF6C065178535441492387
8
18:20:27 : ST-LINK Firmware version : V2J27S6
9
18:20:27 : Connected via SWD.
10
18:20:27 : SWD Frequency = 4,0 MHz.
11
18:20:27 : Connection mode : Normal.
12
18:20:27 : Debug in Low Power mode enabled.
13
18:20:27 : Device ID:0x412 
14
18:20:27 : Device flash Size : 32KBytes
15
18:20:27 : Device family :STM32F10xx Low-density
16
18:20:59 : Memory programmed in 1s and 781ms.
17
18:20:59 : Verification...OK
18
18:20:59 : Programmed memory Checksum: 0x000DDFEA
19
18:21:00 : Disconnected from device.
20
18:21:00 : Connection to device is lost: check power supply and debug connection.
21
18:21:00 : If the target is in low power mode, please enable "Debug in Low Power mode" option from Target->settings menu.
22
18:21:13 : Can not connect to target!
23
                  Please select "Connect Under Reset" mode from Target->Settings menu and try again.
24
                  If you're trying to connect to a low frequency application , please select a lower SWD Frequency mode from Target->Settings menu.

hat jemand eine Tipp, wie ich den Prozessor wieder zum Leben erwecken 
kann?

Gruß
hochsitzcola

von pegel (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Sicher das Übliche.
In CubeMX den SWD nicht eingeschaltet.

von hochsitzcola (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antwort! Und was heißt das? Wie bekomme ich den 
Prozessor wieder ans Leben?
Die Suche nach "SWD nicht eingeschaltet" hat mich nicht 
weitergebracht...

Gruß
hochsitzcola

von pegel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
In CubeMX unter:

System Core -> SYS -> Debug
Serial Wire

auswählen.

Während ST-Link-Utility verbinden will, Reset drücken.

von pegel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Vor dem nächsten flash Versuch natürlich noch einmal kompilieren.

von hochsitzcola (Gast)


Bewertung
0 lesenswert
nicht lesenswert
OK, werde ich morgen mal probieren. Ich komme an den Reset-Pin nicht so 
ohne weiteres ran...

Gruß
hochsitzcola

von Stefan ⛄ F. (stefanus)


Bewertung
0 lesenswert
nicht lesenswert
Vermutlich deaktiviert dein Programm die SWD Schnittstelle.

Während des Reset ist sie aktiv. Du musst dann die Einstellung "Connect 
under Reset" benutzen, den Reset Knopf gedrückt halten und im richtigen 
Moment beim Verbindungsaufbau loslassen.

von hochsitzcola (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hat funktioniert, vielen Dank für die Hilfe!

Gruß
hochsitzcola

von pegel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Aber wieso nimmst du das ST-Link-Utility?

Das SW4STM32 hat ein OpenOcd zum debuggen und flashen eingebaut.

von Stefan ⛄ F. (stefanus)


Bewertung
0 lesenswert
nicht lesenswert
pegel schrieb:
> Aber wieso nimmst du das ST-Link-Utility?
> Das SW4STM32 hat ein OpenOcd zum debuggen und flashen eingebaut.

Ist doch egal, das macht hier keinen Unterschied.

von pegel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Noch nicht, aber vielleicht für die Zukunft.

von hochsitzcola (Gast)


Bewertung
0 lesenswert
nicht lesenswert
pegel schrieb:
> Das SW4STM32 hat ein OpenOcd zum debuggen und flashen eingebaut.

Das habe ich nicht ans Laufen bekommen. Es gibt Fehlermeldungen in einem 
PopUp-Fenster:
1
Error in final launch sequence
2
Failed to execute MI command:
3
load C:\\LishuiFOC\\Generated\\LishuiFOC_01\\Debug\\LishuiFOC_01.elf 
4
5
Error message from debugger back end:
6
Error erasing flash with vFlashErase packet
7
Error erasing flash with vFlashErase packet

In der Console kommen diese Meldungen
1
Open On-Chip Debugger 0.10.0-dev-00015-gaaf1808 (2018-11-13-13:07)
2
Licensed under GNU GPL v2
3
For bug reports, read
4
  http://openocd.org/doc/doxygen/bugs.html
5
srst_only separate srst_nogate srst_open_drain connect_assert_srst
6
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
7
adapter_nsrst_delay: 100
8
adapter speed: 950 kHz
9
Info : clock speed 950 kHz
10
Info : STLINK v2 JTAG v27 API v2 SWIM v6 VID 0x0483 PID 0x3748
11
Info : vid/pid are not identical: 0x0483/0x374B 0x0483/0x3748
12
Info : using stlink api v2
13
Info : Target voltage: 3.519368
14
Info : Stlink adapter speed set to 950 kHz
15
Info : STM32F103C6Tx.cpu: hardware has 6 breakpoints, 4 watchpoints
16
Info : accepting 'gdb' connection on tcp/3333
17
Info : Stlink adapter speed set to 950 kHz
18
adapter speed: 950 kHz
19
Error: timed out while waiting for target halted
20
TARGET: STM32F103C6Tx.cpu - Not halted
21
in procedure 'reset' 
22
in procedure 'ocd_bouncer'
23
24
25
26
Info : device id = 0x10006412
27
Info : flash size = 32kbytes
28
Info : Stlink adapter speed set to 950 kHz
29
adapter speed: 950 kHz
30
Error: timed out while waiting for target halted
31
TARGET: STM32F103C6Tx.cpu - Not halted
32
in procedure 'reset' 
33
in procedure 'ocd_bouncer'
34
35
36
37
Error: Target not halted
38
Error: failed erasing sectors 0 to 8
39
Error: flash_erase returned -304

Das gleiche Problem wurde im OpenSTM32 Forum auch schon beschrieben aber 
nicht gelöst :-(

http://www.openstm32.org/forumthread4969

Gruß
hochsitzcola

von pegel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Bei meinem BluePill hatte ich Anfangs auch solche Probleme.

1. in der <Projekt>.cfg musste das srst_only entfernt werden
2. Pfad und Dateiname waren zu lang
3. habe die <Projekt>.cfg in den workspace (einen Pfad höher) gelegt und 
ihr einen kürzeren Namen gegeben
4. diese in der Debug configuration auswählen

von hochsitzcola (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hm, die .cfg Datei wird bei jedem Mal neu erzeugt. Somit kann ich die 
Zeilen mit dem reset auskommentieren, das wird gleich wieder 
überschrieben...
1
# This is an LishuiFOC_01 board with a single STM32F103C6Tx chip
2
#
3
# Generated by System Workbench for STM32
4
# Take care that such file, as generated, may be overridden without any early notice. Please have a look to debug launch configuration setup(s)
5
6
source [find interface/stlink.cfg] 
7
8
set WORKAREASIZE 0x2800
9
10
transport select "hla_swd"
11
12
set CHIPNAME STM32F103C6Tx
13
set BOARDNAME LishuiFOC_01
14
15
# Enable debug when in low power modes
16
set ENABLE_LOW_POWER 1
17
18
# Stop Watchdog counters when halt
19
set STOP_WATCHDOG 1
20
21
# STlink Debug clock frequency
22
set CLOCK_FREQ 4000
23
24
# use hardware reset, connect under reset
25
# connect_assert_srst needed if low power mode application running (WFI...)
26
reset_config srst_only srst_nogate connect_assert_srst
27
set CONNECT_UNDER_RESET 1
28
29
source [find target/stm32f1x.cfg]

Gruß
hochsitzcola

von Stefan ⛄ F. (stefanus)


Bewertung
0 lesenswert
nicht lesenswert
hochsitzcola schrieb:
> Error: timed out while waiting for target halted
> TARGET: STM32F103C6Tx.cpu - Not halted
> in procedure 'reset'

Du hast hier wie gesagt das gleiche Problem wie mit der ST-Link 
Software. Er kann die CPU nicht anhalten, weil SWD deaktiviert ist. Auch 
hier kannst du die Option "Connect under Reset" mit manuellem Druck auf 
die Reset Taste kombinieren.

von pegel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Deswegen kopiere sie ein Verzeichnis höher, ändere die, benutze die.

von Max D. (max_d)


Bewertung
0 lesenswert
nicht lesenswert
Also in sw4stm32 kann man bei neueren Versionen bei den 
Starteinstellungen das Script konfigurieren und eine der Optionen ist 
für Hardware/Software reset.

von Stefan ⛄ F. (stefanus)


Bewertung
0 lesenswert
nicht lesenswert
> Hm, die .cfg Datei wird bei jedem Mal neu erzeugt.

Nicht wenn du in den Debugger Optionen bei "Configuration Script" die 
Option "User Defined" einstellt.

> Also in sw4stm32 kann man bei neueren Versionen bei den
> Starteinstellungen das Script konfigurieren und eine der
> Optionen ist für Hardware/Software reset.

Genau. Lies das mal:
http://stefanfrings.de/stm32/index.html#swj

von pegel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
"Er kann die CPU nicht anhalten, weil SWD deaktiviert ist."

Nicht wirklich.
In dem Fall ist es das srst_only, hat mit SWD abschalten nichts zu tun.

von hochsitzcola (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ahh, ich musste die "generator options" erst ausklappen. Jetzt habe ich 
auf "Software system reset" gestellt, jetzt klappt es!

Vielen Dank für die Hilfe!

Gruß
hochsitzcola

von Stefan ⛄ F. (stefanus)


Bewertung
0 lesenswert
nicht lesenswert
hochsitzcola schrieb:
> Jetzt habe ich
> auf "Software system reset" gestellt, jetzt klappt es!

Dann ist bei Dir die SWD Schnittstelle nicht deaktiviert. So ist es 
praktischer.

von Theor (Gast)


Bewertung
0 lesenswert
nicht lesenswert
hochsitzcola schrieb:
> Hm, die .cfg Datei wird bei jedem Mal neu erzeugt. Somit kann ich die
> Zeilen mit dem reset auskommentieren, das wird gleich wieder
> überschrieben...
>
>
1
> 
2
> # This is an LishuiFOC_01 board with a single STM32F103C6Tx chip
3
...
4
>

Ist denn Dein Board das oben bezeichnete? Oder ist es ein Anderes?

Das der Verbindungsaufbau mit einem manuellen Reset funktioniert, sonst 
aber nicht, ist mit den Informationen die ich hier sonst lese, erst mal 
ein Zeichen, dass Reset entweder nicht angeschlossen ist oder irgendwie 
exotisch verdrahtet; was ja vorkommt.
Dass es mit Entfernung von srst_only geht, könnte das bestätigen, 
widerspricht dem jedenfalls nicht. Vermutlich nutzt er dann das 
JTAG-Reset.

Um das für die Zukunft und andere Fälle resp. Fragesteller nutzen zu 
können, wären ein paar Details hilfreich. Mindestens aber, die 
Bezeichnung des Boards bzw. der Schaltplan.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.