Forum: Mikrocontroller und Digitale Elektronik STM32F4 & CooCox & ST-Structure-Elemente


von Chris M. (ch_meier)


Lesenswert?

Hallo Leute,

Ich habe bei meinem CoCox CoIDE folgendes Problem: das Tool nimmt keine 
Structure Elemente an.
Zu meiner Entwicklungsumgebung:
 - CoCox IDE 1.7.6 (aktuellste Version)
 - GCC Compiler 4.8 (aktuellste Version)

Bei der Installation der IDE hab ich mich stark an die Anleitung 
gehalten: 
http://www.mikrocontroller.net/articles/STM32_CooCox_Installation

Prinzipiell funktioniert das Tool, aber erkennt eben keine Structures. 
Folgender Code produziert einen Syntax Error:
1
typdef struct{
2
uint32_t testvariable;
3
} inittypdef1;
4
5
inittypedef1.testvariable = 20;

Ich hoffe ihr könnt mir helfen. Vielen dank schonmal im Voraus.

LG Chris

von susa (Gast)


Lesenswert?

> Syntax Error

Welchen?

von Jope (Gast)


Lesenswert?

inittypdef1 ist der Typ, den Du definierst, und keine Variable.

Eine Variable dieses Typs deklarierst Du so:
1
inittypdef1 a;

Und dann geht auch das:
1
a.testvariable = 20;

von Chris M. (ch_meier)


Lesenswert?

Hi,
Danke erstmal für die ultraschnellen Antworten.

Was ich da reingeschrieben habe, sollte eigentlich ein abstraktes 
Beispiel sein, hab ich aber leider falsch reingeschrieben...
Mein eigentliches Problem stellt sich folgendermaßen dar:
Ich will den STM32F4 mit seinen Standard-Libraries verwenden. In den 
Libraries ist zum Beispiel sowas drinnen:
1
typedef struct
2
{
3
  uint32_t GPIO_Pin;              /*!< Specifies the GPIO pins to be configured.
4
                                       This parameter can be any value of @ref GPIO_pins_define */
5
6
  GPIOMode_TypeDef GPIO_Mode;     /*!< Specifies the operating mode for the selected pins.
7
                                       This parameter can be a value of @ref GPIOMode_TypeDef */
8
9
  GPIOSpeed_TypeDef GPIO_Speed;   /*!< Specifies the speed for the selected pins.
10
                                       This parameter can be a value of @ref GPIOSpeed_TypeDef */
11
12
  GPIOOType_TypeDef GPIO_OType;   /*!< Specifies the operating output type for the selected pins.
13
                                       This parameter can be a value of @ref GPIOOType_TypeDef */
14
15
  GPIOPuPd_TypeDef GPIO_PuPd;     /*!< Specifies the operating Pull-up/Pull down for the selected pins.
16
                                       This parameter can be a value of @ref GPIOPuPd_TypeDef */
17
}GPIO_InitTypeDef;

In meiner Main.c mach ich dann folgendes:
1
GPIO_InitTypeDef GPIO_InitStructure; //Zeile 6
2
3
GPIO_InitStructure.GPIO_Pin = 1; //Zeile 8

Der Compiler-Fehler sieht so aus:
[cc] C:\CooCox\CoIDE\workspace\scratch\main.c:8:19: error: expected '=', 
',', ';', 'asm' or '__attribute__' before '.' token

Ich nutze in der Arbeit IAR und da funktioniert alles perfekt, also 
scheine ich irgendwas noch falsch konfiguriert zu haben...

Das ganze sieht exakt gleich aus, wenn ich in der main.c eine Struct 
definiere und dann eine instanz bilde...

von Dr. Sommer (Gast)


Lesenswert?

Und was steht in Zeilen 1-5? Was steht sonst noch in der Datei? In den 
#includierten eigenen Dateien? Mit solch homöopathischer Code-Dosis kann 
dir keiner helfen.

von Chris M. (ch_meier)


Angehängte Dateien:

Lesenswert?

Sorry. Hab mal den gesamten Workspace angehängt und hier ist das gesamte 
main.c-File:
1
// Demo Blink-LED für STM32F4xx mit einem STM32F4DISCOVERY Board
2
// (c) 2013, Markus Müller
3
// Dieser Code darf frei verwendet, modifiziert und kopiert werden. Benutzung auf eigene Gefahr.
4
#include "stm32f4xx.h" // Deklaration der Peripheriefunktionen
5
#include "stm32f4xx_gpio.h"
6
7
GPIO_InitTypeDef GPIO_InitStructure;
8
9
GPIO_InitStructure.GPIO_Pin = 1;
10
11
void Delay(long i);
12
13
// Haupt-Programmschleife
14
int main(void)
15
{
16
    RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN; // Clock für Port D aktivieren
17
18
    GPIOD->MODER = 0x55000000; // Pin 12..15 als Ausgang deklarieren
19
20
    while(1) // Endlos SChleife
21
    {
22
        GPIOD->BSRRH = 0xF000; // Alle LED's aus
23
        Delay(1000000);
24
        GPIOD->BSRRL = 0x1000; // LED 1 ein
25
        Delay(1000000);
26
        GPIOD->BSRRL = 0x2000; // LED 2 ein
27
        Delay(1000000);
28
        GPIOD->BSRRL = 0x4000; // LED 3 ein
29
        Delay(1000000);
30
        GPIOD->BSRRL = 0x8000; // LED 4 ein
31
        Delay(1000000);
32
    }
33
}
34
35
// Delay für Verzögerungen
36
void Delay(long i)
37
{
38
    volatile long iZ = i;
39
    while (iZ--);
40
}

Mir sah das Problem eben nicht wirklich wie ein 
include-Datei-vergessen-Problem aus.

von holger (Gast)


Lesenswert?

GPIO_InitStructureGPIO_Pin = 1;

Da hast du dich wohl vertippt. Genau hinsehen.
Und du darfst das nicht ausserhalb einer Funktion so machen.

Lern lieber erst mal C  auf dem PC bevor du den
armen ARM weiterquälst.

von Chris M. (ch_meier)


Lesenswert?

Hab nur probiert ob das auch mit normalen INT-Variablen auftritt... Aber 
jetzt ist es mir klar geworden, Zuweisungen nur in Funktionen.

Vielen Dank!!

PS: Ich kann C eigentlich nicht so schlecht, aber danke für den 
Kommentar.

von Jan B. (berge)


Lesenswert?

Vielleicht helfen dir die Beispiele auf 
http://mikrocontroller.bplaced.net/wordpress/?page_id=744 auch. Da ist 
vieles mal vorimplementiert in CooCox Projekten. Hilft oft enorm.

Liebe Grüße, Jan

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.