Forum: Mikrocontroller und Digitale Elektronik STM32 LED blinken Startschwierigkeiten


von Tobi (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich mache gerade meine ersten Schritte mit einem STM32. Dazu habe ich 
das MCBSTM32C Board von Keil. Ich nutze auch µVision als IDE und den 
mitgelieferten Compiler.

Auf dem Board sind an PortE Pin 15-8 LEDs angebracht, die ich blinken 
lassen wollte. Natürlich möchte ich nicht direkt die Hardwareregister 
ansprechen, sondern ich möchte die Treiberfunktionen benutzen. 
Allerdings bekomme ich eine Menge Fehlermeldungen. Was die 
Fehlermeldungen sagen ist klar, aber sie beziehen nich alle auf Code aus 
der Bibliothek. Daher stellt sich mir die Frage, ob ich einfach nur 
einen Fehler bei der Vernwendung der Bibliothek mache.

Ich habe lediglich ein neues Projekt erstellt, den Startup-Code 
automatisch laden lassen und zusätzlich eine main.c mit folgendem Inhalt 
erstellt.
1
#include <stm32f10x_cl.h>
2
#include <stm32f10x_lib.h>
3
  
4
5
#define ALL_LEDS (GPIO_Pin15 | GPIO_Pin14 | GPIO_Pin13 | GPIO_Pin12 | GPIO_Pin11 | GPIO_Pin10 | GPIO_Pin9 | GPIO_Pin8)   
6
7
8
int main(void) {
9
  volatile long i;
10
11
  GPIO_InitTypeDef GPIO_InitStructure;
12
13
  SystemInit();
14
15
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
16
17
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
18
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
19
  GPIO_InitStructure.GPIO_Pin = ALL_LEDS;
20
21
  GPIO_Init(GPIOE, &GPIO_InitStructure);
22
23
  while(1) {
24
    GPIO_SetBits(GPIOE, ALL_LEDS);
25
    for(i = 0; i < 1000000; i++);
26
    GPIO_ResetBits(GPIOE, ALL_LEDS);
27
    for(i = 0; i < 1000000; i++);
28
  }
29
}

Der komplette Errorlog befindet sich im Anhang.

von Matthias K. (matthiask)


Lesenswert?

Eigentlich ist der Projektaufbau bei Nutzung der STM LIB anders.

Bei Keil sind einige Projekttemplates dabei. Solltest Dir auch zuerst 
mal von STM die aktuelle LIB runterladen, bei KEIL sind möglicherweise 
alte Versionen dabei. In der STM LIB sind auch viele Projektbeipiele, 
einfach eins nehmen und erstmal nur die Main anpassen.

von Tobi (Gast)


Lesenswert?

Matthias K. schrieb:
> Eigentlich ist der Projektaufbau bei Nutzung der STM LIB anders.

Wie meinst du das?

Ich habe mir die Lib von ST runtergeladen, aber ich hab keine Ahnung wie 
genau ich da jetzt etwas mit machen soll.

Bei den AVRs, also im AVR32Studio, konnte man ja einfach sagen welche 
Peripherie man braucht und es wurden direkt die passenden Libraries zum 
Projekt hinzugefügt. Bei Keil steh ich völlig auf dem Schlauch.

von Tobi (Gast)


Lesenswert?

Habe jetzt mit einem Beispiel etwas rumgespielt und jetzt blinken die 
LEDs. Allerdings weiß ich immer noch nicht wie ich "normal" damit 
arbeiten kann.

von (prx) A. K. (prx)


Lesenswert?

Tobi schrieb:

> Der komplette Errorlog befindet sich im Anhang.

Und ist typisch für falsche Verwendung der Include-Files.

von Tobi (Gast)


Lesenswert?

Und wie benutzt man die richtig?

von (prx) A. K. (prx)


Lesenswert?

Wird dir jemand beantworten müssen der sie kennt. Hier nix µVision und 
zur ST lib gehören sie nicht.

von wolfgang (Gast)


Lesenswert?

..."Und ist typisch für falsche Verwendung der Include-Files."

Ach ja?

es wäre wohl besser gewesen, wenn du anstelle dieser Bemerkung mal 
erklärt hättest, wie man Include-Files richtig verwendet.

Mal ganz prinzipiell: Die Sprache C ist so gedacht, daß man eine 
C-Quelle komplett separat übersetzen kann, ohne auf irgendwelche in der 
Quelle nicht genannten Bezüge vertrauen zu müssen. Aber schlechte 
Programmierer (von denen es Myriaden gibt) ignorieren dies und arbeiten 
gerne mit Zusatz-Definitionen auf der Kommandozeile, bestimmten 
Reihenfolgen beim Einbinden von Header-Dateien und so weiter.

Also, es gibt keine falsche Verwendung von Include-Files, sondern nur 
fehlerhaft geschriebene Include-Files. Leider betrifft dies fast alles, 
was mit den STM32-Controllern zu tun hat. Da gibt es keine Sicherung 
gegen doppeltes Einbinden, keine 'extern' Vermerke, dafür aber 
Variablenvereinbarungen und so weiter.

Mein Rat an Tobi: Verzichte erstmal auf alles Vorgefertigte 
(ST-Standard-Libs, Startup-Dateien, chipspezifische Header) und mach all 
dieses dir für's erste selber - und zwar anhand des zum Controller 
gehörigen Hardware-Manuals. Das ist zwar die extrem verschärfte 
Ochsentour, aber wenn man sich da durchgebissen hat, kennt man seinen 
Prozessor und weiß, was für einen undurchsichtigen Wust und Overhead man 
sich durch die oberschlauen Bibliotheken einfängt.

Alles Gute
wolfgang

von (prx) A. K. (prx)


Lesenswert?

wolfgang schrieb:

> es wäre wohl besser gewesen, wenn du anstelle dieser Bemerkung mal
> erklärt hättest, wie man Include-Files richtig verwendet.

Und hätte mir extra dafür Keil µVision besorgen sollen? Wie gesagt, zur 
STlib gehören diese Includes nicht, das hatte ich verifiziert.

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.