Forum: Mikrocontroller und Digitale Elektronik STM32F1 läuft nur mit angeschlossenem ST-Link


von Sebastian (Gast)


Lesenswert?

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.

von Horst (Gast)


Lesenswert?

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.
von D.J. P. (djlinux)


Lesenswert?

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

von Mampf F. (mampf) Benutzerseite


Lesenswert?

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.

: Bearbeitet durch User
von Sebastian (Gast)


Lesenswert?

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
// ----------------------------------------------------------------------------

von wenn lib, dann lib (Gast)


Lesenswert?

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?

von A. B. (Gast)


Lesenswert?

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!

von Stefan F. (Gast)


Lesenswert?

Möglicherweise ist die GND Leitung der Stromversorgung unterbrochen.

von Martin Beuttenmüller (Gast)


Lesenswert?

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

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.