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


von hochsitzcola (Gast)


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)


Lesenswert?

Sicher das Übliche.
In CubeMX den SWD nicht eingeschaltet.

von hochsitzcola (Gast)


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)


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)


Lesenswert?

Vor dem nächsten flash Versuch natürlich noch einmal kompilieren.

von hochsitzcola (Gast)


Lesenswert?

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

Gruß
hochsitzcola

von Stefan F. (Gast)


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)


Lesenswert?

Hat funktioniert, vielen Dank für die Hilfe!

Gruß
hochsitzcola

von pegel (Gast)


Lesenswert?

Aber wieso nimmst du das ST-Link-Utility?

Das SW4STM32 hat ein OpenOcd zum debuggen und flashen eingebaut.

von Stefan F. (Gast)


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)


Lesenswert?

Noch nicht, aber vielleicht für die Zukunft.

von hochsitzcola (Gast)


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)


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)


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. (Gast)


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)


Lesenswert?

Deswegen kopiere sie ein Verzeichnis höher, ändere die, benutze die.

von Max D. (max_d)


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. (Gast)


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)


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)


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. (Gast)


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)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.