Forum: Mikrocontroller und Digitale Elektronik CooCox mit STM32F4Discovery nur im Debug Mode?


von Bernd E. (robocopter)


Lesenswert?

Hallo zusammen,

Ich versuch mit CooCox und dem STM32F3Discovery einige kleine Programme 
für den Start zu ralisieren. Muss dazu sagen, ich stehe ganz am Anfang 
mit dem STM32F4 und CooCox. Nun klappt einiges schon ganz gut. Es 
leuchten die LEDs abwechselnd, auf die Userbuttons reagiert mein 
Programm auch wie gewollt.
NUR: Alles in diesem "Debug Modus (Ctrl+F5)" von CooCox.
Ich gehe davon aus, dass der ARM auch blinken sollte nachdem ich den 
Debug Stopp Knopf in CooCox gedrückt und anschließend den Reset-Taster 
auf dem Disco Board betätigt habe.
Aber nichts.
Dann gibts da noch den Knopf in CooCox "Download Code to Flash".
Aber der zeigt in der Console brav alles an "Erase..., Programm..., 
Verify..." aber mein Controller startet das Programm nicht. Nicht mal 
nach dem HardwareReset.

Kurz gesagt: im Debug Mode funktioniert alles wie gewollt, aber wie 
bekomme ich das Ding in normalen Betriebszustand zum laufen?

Muss ich da was einstellen?

von Gerald R. (visitor)


Lesenswert?

Hallo Bernd!

EDIT:
Sorry, habe ein F0 Discovery kein F4!

Habe gestern Abend auch damit angefangen, scheint ein guter Tag gewesen 
zu sein ;-)

Habe auch CooCox genommen.
Bei mir funktioniert es auch ohne debug.

Hast du bei der Projekterstellung in Repository auch CMSIS BOOT 
angewählt?

Ich will nur ganz einfach einige LEDs über Transistoren schalten bzw. 
blinken lassen und habe dafür folgendes gewählt:
M0 Cmsis Core
CMSIS BOOT
RCC
GPIO

Ich drücke einfach F7 zum compilieren und dann download code to flash 
und es beginnt sofort zu blinken so wie ich es geändert habe.

Mein Testfile (main.c) sieht momentan so aus:
1
#include <stdint.h>
2
#include <system_stm32f0xx.h>
3
#include <stm32f0xx_gpio.h>
4
#include <stm32f0xx_rcc.h>
5
6
7
int main(void)
8
{
9
  GPIO_InitTypeDef InitGpio;
10
  unsigned int i = 0;
11
12
  // Initialises the system clock
13
  SystemInit();
14
15
  // Enables the clock for GPIOC + A
16
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
17
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
18
19
  // Configures the GPIOC pin8 and pin9, since leds are connected
20
  // to PC8 and PC9 of GPIOC + A
21
  InitGpio.GPIO_Pin = (GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9);
22
  InitGpio.GPIO_Mode = GPIO_Mode_OUT;
23
  InitGpio.GPIO_Speed = GPIO_Speed_Level_1;
24
  InitGpio.GPIO_OType = GPIO_OType_PP;
25
  InitGpio.GPIO_PuPd = GPIO_PuPd_NOPULL;
26
27
  // Initialises the GPIOC + A
28
  GPIO_Init(GPIOC, &InitGpio);
29
  GPIO_Init(GPIOA, &InitGpio);
30
31
32
    while(1)
33
    {
34
      // Turn ON the Leds on C and OFF at A
35
      GPIO_ResetBits(GPIOA, (GPIO_Pin_8 | GPIO_Pin_9));
36
      GPIO_SetBits(GPIOC, (GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9));
37
38
      // Delay
39
      for (i = 0; i < 10000000; i++);
40
41
      // Turn OFF the Leds on C and ON at A
42
      GPIO_SetBits(GPIOA, (GPIO_Pin_8 | GPIO_Pin_9));
43
      GPIO_ResetBits(GPIOC, (GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9));
44
45
      // Delay
46
      for (i = 0; i < 10000000; i++);
47
    }
48
}

LG
Gerald

: Bearbeitet durch User
von Bernd E. (robocopter)


Lesenswert?

Hallo Gerald,

vielen Dank für deine Hilfe,
Dein Hinweis dass es über "download to flash" gehen sollte haben mich 
dazu gebracht unsere beiden Codes nochmals zu vergleichen.

Grundsätzlich war soweit alles vergleichbar.

Nur habe ich mir einem Beispiel gestartet in dem "Semihosting" gebraucht 
wurde, um in der IDE Daten empfangen zu können.
Das verhindert wohl auch, dass der Controller alleine ins laufen kommt.
Nachdem ich das entfernt habe ist alles wie gewünscht.


Weiß jemand warum Semihosting den Controllerstart verhindert?

von Stefan O. (stefano)


Lesenswert?

Hallo Bernd!

Das liegt an der Art und weise wie die Semihosting Ausgabe an deine IDE 
realisiert ist.

Das zu sendende Zeichen wird in ein spezielles Register geschrieben und 
ein Breakpoint wird gesetzt. Anschließend muss der Debugger (dein PC) 
die Daten abholen und den Breakpint clearen. Dann laueft die CPU weiter.

Ist der Debugger nicht aktiv haengt das Programm an der ersten Stelle an 
der Semihosting verwendet wird.

Siehe 
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0471c/Bgbjjgij.html

LG Stefan

: Bearbeitet durch User
von Bernd E. (robocopter)


Lesenswert?

Vielen Dank,
sehr interessant.

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.