STM32F1 läuft nur mit angeschlossenem ST-Link

Gast #5231301
Hallo zusammen,

ich versuche gerade erste Schritte mit einem STM32F1.
Board ist eines dieser China Dinger.
Als Umgebung verwende ich Eclipse, eingerichtet mit/nach GNU MCU Eclipse 
(https://gnu-mcu-eclipse.github.io/)

Ich habe ein einfaches Blink LED Beispiel Projekt erstellt.
Wenn ich jetzt das Projekt als "Release" build und die .hex Datei mit 
dem ST-Link Utility flashe, läuft mein Programm nur mit angeschlossenem 
ST-Link.

In dem Moment, wo ich den ST-Link einstecke, fängt die LED an zu blinken 
und hört auf, sobald ich ihn abstecke.
Adapter und Board sind verbunden über SWDIO, SWCLK, SWO, Reset und GND. 
Stromversorgung läuft nicht über den ST-Link!

Boot0 und Boot1 sind auf GND.
Keine Fehler etc. beim Compilieren.

Was muss man tun damit mein Programm auch läuft, wenn kein ST-Link 
angeschlossen ist?
Oder weiß jemand woran das liegt?



Genaues vorgehen:
- Eclipse: Build -> Release
- ST-Link Utility:
-- Target -> Connect
-- Target -> Program

Ausgabe ST-Link Utility:
1
13:08:26 : ST-LINK SN : 34006D063146333036510543
2
13:08:26 : ST-LINK Firmware version : V2J28S7
3
13:08:26 : Connected via SWD.
4
13:08:26 : SWD Frequency = 4,0 MHz.
5
13:08:26 : Connection mode : Normal.
6
13:08:26 : Debug in Low Power mode enabled.
7
13:08:26 : Device ID:0x414 
8
13:08:26 : Device flash Size : 512KBytes
9
13:08:26 : Device family :STM32F10xx High-density
10
13:08:33 : [Blinky.hex] opened successfully.
11
                  Address Ranges [0x08000000 0x0800032A] [0x0800032C 0x08000BBF] [0x08000BC0 0x08000DA4] 
12
13:08:33 : [Blinky.hex] checksum : 0x000365B5 
13
13:08:45 : Memory programmed in 0s and 344ms.
Gast
Sebastian schrieb:
> Board ist eines dieser China Dinger.

Schön daß es in China nur ein einziges STM32F1-Board gibt.
Aber das ist genauso unwichtig, wie z.B. Dein Programm in dem man 
nachsehen könnte wie Du z.B. den Systemtakt eingestellt hast.
Beitrag #5231337 wurde von einem Moderator gelöscht.
Die Jumper für Boot0 und Boot1 mal ändern
vermute mal es sind doch Jumper oder ?
(Du schreibst ja nicht welches (China) DEV-Board !)

Es gibt nur noch 3 weitere Kombination

00 ' Boot1 L Boot0 L geht nicht (warum auch immer)
01 ' Boot1 L Boot0 H
10 ' Boot1 H Boot0 L
11 ' Boot1 H Boot0 H

DJ
Persönliche Seite
Falls du Semi-Hosting aktiviert hast, kann es sein, dass der Code nur 
mit SWD-Connection läuft.

Problemlösung ist einfach: Den Define für Semi-Hosting deaktivieren.

Falls du eine IDE verwendest, kannst du auch von Debug auf Release 
umstellen - da wird Semi-Hosting dann normal nicht verwendet.

*edit*:

Gerade gesehen

>  Eclipse: Build -> Release

Hmm, das ist dann seltsam ... Ich verwende auch Eclipse + Gnu-ARM-Plugin 
+ OpenOCD, aber bei mir gab es den Effekt immer nur mit aktiviertem 
Semi-Hosting.
Gast
Das Board ist dieses hier:
http://www.stm32duino.com/viewtopic.php?t=490

Und folgender Code:
1
// ----------------------------------------------------------------------------
2
#include <stdio.h>
3
#include <stdlib.h>
4
#include "diag/Trace.h"
5

6
#include "stm32f10x.h"
7

8
// ----- main() ---------------------------------------------------------------
9

10
// Sample pragmas to cope with warnings. Please note the related line at
11
// the end of this function, used to pop the compiler diagnostics status.
12
#pragma GCC diagnostic push
13
#pragma GCC diagnostic ignored "-Wunused-parameter"
14
#pragma GCC diagnostic ignored "-Wmissing-declarations"
15
#pragma GCC diagnostic ignored "-Wreturn-type"
16

17
int main(int argc, char* argv[])
18
{
19
  GPIO_InitTypeDef GPIO_InitStructure;
20
  TIM_TimeBaseInitTypeDef TIM_TimeBase_InitStructure;
21
  NVIC_InitTypeDef NVIC_InitStructure;
22

23
  SystemInit();
24

25
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
26
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
27

28
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
29
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
30
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
31
  GPIO_Init(GPIOE, &GPIO_InitStructure);
32

33
  TIM_TimeBase_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
34
  TIM_TimeBase_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
35
  TIM_TimeBase_InitStructure.TIM_Period = 1999;
36
  TIM_TimeBase_InitStructure.TIM_Prescaler = 17999;
37
  TIM_TimeBaseInit(TIM2, &TIM_TimeBase_InitStructure);
38
  TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
39

40
  NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
41
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
42
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
43
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
44
  NVIC_Init(&NVIC_InitStructure);
45

46
  TIM_Cmd(TIM2, ENABLE);
47

48
  // Short loop.
49
  while (1)
50
  {
51

52
  }
53
  return 0;
54
}
55

56
extern "C" void TIM2_IRQHandler(void)
57
{
58
  TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
59
  if (GPIO_ReadOutputDataBit(GPIOE, GPIO_Pin_5))
60
  {
61
    GPIO_WriteBit(GPIOE, GPIO_Pin_5, Bit_RESET);
62
  }
63
  else
64
  {
65
    GPIO_WriteBit(GPIOE, GPIO_Pin_5, Bit_SET);
66
  }
67
}
68

69
#pragma GCC diagnostic pop
70

71
// ----------------------------------------------------------------------------
Gast
Sebastian schrieb:
> if (GPIO_ReadOutputDataBit(GPIOE, GPIO_Pin_5))
>   {
>     GPIO_WriteBit(GPIOE, GPIO_Pin_5, Bit_RESET);
>   }
>   else
>   {
>     GPIO_WriteBit(GPIOE, GPIO_Pin_5, Bit_SET);
>   }
1
GPIO_WriteBit(GPIOE, GPIO_Pin_5, GPIO_ReadOutputDataBit(GPIOE, GPIO_Pin_5) ? BIT_RESET : BIT_SET);

WO steht der PC beim Halt oder Break?
Gast
Sebastian schrieb:

> In dem Moment, wo ich den ST-Link einstecke, fängt die LED an zu blinken
                            ^^^^^^^^^^^^^^^^^
Ja, wo denn? Der ST-Link-Adapter hat gemeinhin 2 "Enden", Target und 
Host.

> und hört auf, sobald ich ihn abstecke.
> Adapter und Board sind verbunden über SWDIO, SWCLK, SWO, Reset und GND.
> Stromversorgung läuft nicht über den ST-Link!
Gast
Guten Abend!

Der letzte Beitrag ist zwar schon eine Woche her, dennoch ...

Vorausgesetzt Du trennst zwischen Link und STM-Board:
Evtl. fehlt dann der Takt (den der Processor vorher vom
Link bekam)?

Gutes Gelingen
Martin

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 8 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.