Forum: Compiler & IDEs STM32F4-Discovery und Crossworks


von Tilo (Gast)


Angehängte Dateien:

Lesenswert?

Hallo

Ich habe versucht das Evaluationboard STM32F4-Discovery (STM32F407VG) 
zusammen mit Crossworks (2.2) zum laufen zu bekommen.

Ich möchte euch mitteilen, wie was ich wie hinbekommen habe und wo es 
nicht optimal läuft. Als Basis beziehe ich mich auf das Posting 
Beitrag "[S]uche - STM32 - Crossworks Beispiel - STM32F105" welches mir sehr 
weitergeholfen hat.

Der Anfang gestaltet sich sehr einfach.
Crossworks und die benötigten Packages installieren. Ich habe folgende 
Packages installiert:
CMSIS2 Support Package
CMSIS3 Support Package
STMicroelectronics STM32 CPU Support Package
STMicroelectronics STM32F4xx DSP and Standard Peripherals Library 
Updates

Die Installation lief problemlos. Nach der Installation der Packages 
kann man ein neues Projekt erzeugen. Wenn man nun als Target mit dem 
STLink/V2 verbinden will (Interface SWD) und Das Programm im Debug Mode 
ausführt klappt alles sofort.

Als nächstes wollte ich eine LED einschalten und dabei die 
STDPeriph_Driver und STMF4-Discovery Libraries verwenden. Hier fingen 
meine Probleme an. Ich habe zwar bei der Installation von 
STMicroelectronics STM32F4xx DSP and Standard Peripherals Library 
Updates den Pfad zur Library angegeben, allerdings scheint Crossworks 
nichts zu finden.

In dem zitierten Posting wird empfohlen, im Property Windows unter 
Preprocessor Options -> System Include Directories manuell den Pfad zum 
inc-Verzeichnis der Library zu legen. Leider war dies bei mir nicht 
ausreichend. Der Eintrag hat nur dazu geführt, dass man bei einem 
#include nicht mehr den vollen Pfad zur Headerdatei eingeben musste.

Die Library von ST besteht bei mir aus zwei Ordern, inc und src. Es sind 
keine Objektdateien vorhanden. Bei mir ist der Linker auf die Nase 
gefallen, weil er die Referenzen nicht auflösen konnte.

Ich habe das Problem so gelöst, dass ich im Projekt einen neuen Ordner 
angelegt und diesen als "Dynamic" markiert habe. Den Order habe ich auf 
die Library zeigen lassen (rekursiv). Das selbe habe ich mit der 
"Discovery"-Library gemacht.

Crossworks war nun in der Lage, die c-Dateien zu finden. Der Linker 
läuft nun fast durch. Bei mir sind noch 2 Probleme verblieben.

1. In der "Discovery" Library sind Funktionen für den Audio-Codec und 
Beschleunigungs-Sensor enthalten, die im Hauptprogramm weitere 
Funktionen benötigen. Da ich diese nicht hatte, gabs beim Linken wieder 
Fehler. Meine Lösunge war bei diesen Dateien "Exclude from build" 
auszuwählen.

2. assert_param: Dieses Makro wird in der Datei stm32f4xx_conf.h 
definiert. Diese Datei liegt bei mir im Source-Verzeichnis. Ich habe sie 
von einem ST-Beispiel kopiert. Damit diese auch unter Crossworks 
funktioniert, muss unter Preprocessor Definitions in einer Zeile 
USE_STDPERIPH_DRIVER eingetragen werden. Dies sorgt dafür, dass die 
HeaderFile, die bei Crossworks dabei ist diese Datei verwendet und damit 
das Makro kennt.

Daneben habe ich noch ein paar andere Dateien aus den Beispielen 
dazukopiert.

Ich habe das Projekt angehängt. Wenn man es direkt nach C:\ kopiert 
stimmen die Pfade.

Ich hoffe ich konnte damit anderen ein wenig helfen und vielleicht habt 
ihr noch ein paar Tips für mich, wie man eine schönere Lösung 
hinbekommt.

von Michael F. (mifi)


Angehängte Dateien:

Lesenswert?

Hallo Tilo,

mhh, wie soll ich es einfach erklären?
Das Beispiel sollte jetzt auch bei Dir laufen.
Es fehlten folgende "User Include Directories":

STM32F4xx_StdPeriph_Driver\inc
STM32F4-Discovery

Wie kommt man nun dahin?

1. Projekt in CrossStudio öffnen
2. Rechtsklick auf Dein Projekt "LED-Blink" > Properties...
3. Nun die "Configuration" oben rechts auf "Common" umstellen
4. evt. die "Teilung" etwas verschieben, die Eingabefelder sind
   nicht zu sehen.
5. Unter "Preprocessor Option" unter "User Include Directories"
   die fehlenden Einträge hinzufügen.

Gruß,
Michael

von Tilo (Gast)


Lesenswert?

Danke für diene Hilfe
Das Beispiel läuft ja, allerdings nur mit den "dynamischen" 
Verzeichnissen, mit denen ich den src-Ordner mit ins Projekt einbinde. 
Ich habe deine Version gerade ausprobiert. So bald ich 
STM32F4xx_StdPeriph_Driver als dynamisches Verzeichnis aus dem Projekt 
entferne, klappts auch nicht mehr.

Ich gebe zu, dass mir der Unterschied zwischen "System" und "User" 
Include Directories noch nicht so ganz klar ist. Ich hab jedenfalls noch 
keinen Unterschied gemerkt und in der Hilfe bisher auch nichts gefunden.

von Thomas W. (diddl)


Lesenswert?

Ich kann euch CooCox ans Herzen legen. Bisher konnte ich nichts besseres 
an freier Software finden, wenn es um Cortex-M3 und Cportex-M4 geht.

http://www.coocox.org/

von Rooney B. (rooney)


Lesenswert?

Hallo Michael!

Startet bei dir die Applikation aus dem Flash, auch wenn du keinen 
Debugger angesteckt hast?

Ich habe im Internet gelesen, dass man in den Preprocessors 
STARTUP_FROM_RESET setzen muss, damit das funktioniert.
Leider klappt das bei mir aber auch nicht.

lg
Rooney

von Michael F. (mifi)


Lesenswert?

Hallo Rooney,

bei mir starten auch die Applikationen ohne den Debugger,
natürlich nur wenn STARTUP_FROM_RESET gesetzt ist.

Gruß,
Michael

von Rooney B. (rooney)


Lesenswert?

Merkwürdig...

Ich habe das Projekt von dir genommen,STARTUP_FROM_RESET gesetzt und 
dennoch läuft nix von selbst hoch.
Welche Crossworks Version verwendest du?

von Michael F. (mifi)


Lesenswert?

Hallo Rooney,

ich habe die 2.2.1 und die 2.3.0 verwendet.
Das sind aber "Nightly Builds", mit der 2.2.0 sollte es aber auch
laufen. Welches Beispiel genau von mir hast Du verwendet, und woran
erkennst Du das es nicht startet?

Welche Version von CrossWorks benutzt Du?
Kann ich Dein Beispiel mal bekommen was nicht geht?

Gruß,
Michael

von Rooney B. (rooney)


Lesenswert?

Ich verwende LED-Blink-2.zip.

Das Programm habe ich zum Testen etwas abgeändert. Du schaltest ja nur 
die LED ein. Ich habe daraus eine Endlosschleife gemacht, so dass die 
LED blinkt.

Hängt der Debugger dran, dann funktioniert das Blinken einwandfrei. 
Stecke ich ab, funktioniert es noch immer einwandfrei. Probleme gibt es 
erst nach einem Reset.
Merkwürdig ist, dass wenn ich auf "Attach Debugger" gehe, also die 
Software nicht neu reinspiele, dann blinkt die Baugruppe wieder. Hätte 
ich STARTUP_FROM_RESET nicht gesetzt, dann würde der Programm Counter 
auf reset_wait stehen --> siehe Startup.s. D.h. vom Prinzip her ändert 
STARTUP_FROM_RESET das Verhalten, jedoch bin ich etwas ratlos, warum das 
nur mit Debugger funktioniert. Muss man noch irgendetwas in den 
Einstellungen ändern?

An der Hardware liegt das aber mit Sicherheit nicht, denn im IAR geht 
das wunderbar.

von Michael F. (mifi)


Lesenswert?

Benutzt Du noch die "debug_XXXX" Funktionen, wenn ja, raus damit.

Geht es dann?

von Rooney B. (rooney)


Lesenswert?

Das Programm schaut wie folgt aus. Quick und dirty...
1
void main(void)
2
{
3
  unsigned int i = 0;
4
  STM_EVAL_LEDInit(LED4);
5
  STM_EVAL_LEDOn(LED4); /* Turn LED4 on: start of configuration */
6
  while(1)
7
  {
8
      for(i = 0; i < 200000; i++)
9
      {
10
         STM_EVAL_LEDOn(LED4);
11
      }
12
      for(i = 0; i < 200000; i++)
13
      {
14
         STM_EVAL_LEDOff(LED4);
15
      }
16
  }
17
}

Crossworks Version: 2.2.0.20120222100.14129
STM32 CPU Support Package 2.13


Also irgendwie ist das sehr enttäuschend, dass so einfache Dinge in 
Crossworks nicht funktionieren.

von Michael F. (mifi)


Lesenswert?

Hallo Rooney.

also hier läuft es.

1. Ich habe die main Funktion aus dem Beispiel oben gegen Deine main
   ersetzt.
2. Zusätzlich STARTUP_FROM_RESET bei "Preprocessor Definitions".

Nun blinkt die LED wenn das Board die Versorgungsspannung bekommt.

Gruß,
Michael

von Rooney B. (rooney)


Lesenswert?

Hallo Michael!

Bei mir läuft das Programm nun auch. Habe schätzungsweise 5x das Projekt 
neu angelegt und jetzt geht alles. Woran es gelegen hat weiß ich aber 
noch immer nicht....

Vielen Dank für deine Hilfe!!

lg
Rooney

von Tilo (Gast)


Lesenswert?

Ich hatte auch Probleme.

Es scheint temporäre Dateien zu geben, die zwar projektabhängig sind 
aber nicht im Projekt sondern in temporären Ordnern liegt.
Nach dem ich diese Dateien löschte waren meine Probleme weg.
Ich weiß aber leider nicht mehr welche das waren, hoffe aber der Tip 
kann weiterhelfen.

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.