GPIO Pin Konfiguration

Gast #2017589
Lesenswert?

Hallo. Ich möchte ein LCD mit dem STM323 VL Discovery ansteuern.
1
#define RS  GPIO_Pin_7
2
#define RW  GPIO_Pin_6
3
#define DB7  GPIO_Pin_9
4
#define DB6  GPIO_Pin_5
5
#define DB5  GPIO_Pin_4
6
#define DB4  GPIO_Pin_3
7
#define DB3  GPIO_Pin_2
8
#define DB2  GPIO_Pin_1
9
#define DB1  GPIO_Pin_0
10
#define DB0  GPIO_Pin_13
11

12
void LCDPin_InitConf(void)
13
{
14
  /* ************ Initialisierung/Konfiguration ***************** */
15
  GPIO_InitTypeDef GPIO_InitStructure;
16
  GPIO_InitStructure.GPIO_Pin =  RS | RW | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0;
17
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
18
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // Push-Pull Output
19
  GPIO_Init(GPIOC, &GPIO_InitStructure);
20
}
21

22
void LCD_Initial(void)
23
{
24
  GPIO_WriteBit(GPIOC, DB5 | DB4 | DB3, Bit_SET);
25
  delay();
26
  GPIO_WriteBit(GPIOC, DB5 | DB4 | DB3, Bit_RESET);
27
  delay();
28
  GPIO_WriteBit(GPIOC, DB3 | DB2 | DB1, Bit_SET);
29
  delay();
30
  GPIO_WriteBit(GPIOC, DB3 | DB2 | DB1, Bit_RESET);
31
  delay();
32
  GPIO_WriteBit(GPIOC, DB2 | DB1, Bit_SET);
33
  delay();
34
  GPIO_WriteBit(GPIOC, DB2 | DB1, Bit_RESET);
35
  delay();
36
  GPIO_WriteBit(GPIOC, RS | DB6 | DB4 | DB2 | DB1 | DB0, Bit_SET);
37
}
38

39
/* ************** Hilfsfunktionen ************************* */
40
void delay(void)
41
{
42
  int i;
43
  for (i=0;i<500;i++)
44
  {}
45
}
46

47
int main()
48
{
49
  while(1) // Do not exit
50
  {
51
    LCDPin_InitConf();
52
  delay();
53
  LCD_Initial();
54
  }
55
}

Dazu habe ich zwei Funktionen geschrieben und zum Testen erstmal LEDs an 
die Ausgänge gelegt, um im Debug-Modus erkennen zu können, ob an den 
Ausgängen etwas geschaltet wird, jedoch kommt da leider nix an. Kann mir 
jemand nen Tipp geben, wo mein Fehler liegt? Vielen Dank, MfG Heiko
Gast #2017596
Lesenswert?

HeikoP schrieb:
> #define RS  GPIO_Pin_7
> #define RW  GPIO_Pin_6
> #define DB7  GPIO_Pin_9
> #define DB6  GPIO_Pin_5
> #define DB5  GPIO_Pin_4
> #define DB4  GPIO_Pin_3
> #define DB3  GPIO_Pin_2
> #define DB2  GPIO_Pin_1
> #define DB1  GPIO_Pin_0
> #define DB0  GPIO_Pin_13

Wo ist denn GPIO_Pin_7 usw. definiert?
In einer Header-Datei?
Gast #2017605
Lesenswert?

1
void delay(void)
2
{
3
  int i;
4
  for (i=0;i<500;i++)
5
  {}
6
}
Vermutlich ist das da oben einfach zu schnell für dein Auge. Für solche 
Tests (*1) bietet sich msleep oder so an, falls das Linux ist und/oder 
die Funktion auf deinem System vorhanden ist.
Ist das denn unter Linux?

*1 Für später baust du dir vielleicht einen Timer usw. usf.
Gast #2017636
Lesenswert?

Hanz schrieb:
> HeikoP schrieb:
>> #define RS  GPIO_Pin_7
>> #define RW  GPIO_Pin_6
>> #define DB7  GPIO_Pin_9
>> #define DB6  GPIO_Pin_5
>> #define DB5  GPIO_Pin_4
>> #define DB4  GPIO_Pin_3
>> #define DB3  GPIO_Pin_2
>> #define DB2  GPIO_Pin_1
>> #define DB1  GPIO_Pin_0
>> #define DB0  GPIO_Pin_13
>
> Wo ist denn GPIO_Pin_7 usw. definiert?
> In einer Header-Datei?

Ja die Pins sind in einer header-Datei definiert, die Funktionen in der 
dazugehörigen C-Datei.

Habe jetzt noch den Takt hinzugefügt (Hatte ich vergessen 
mitzukopieren):
1
GPIO_InitType...
2
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
3
GPIO_InitStru...
4

5
Das ganze wird auch sauber kompiliert. Habs auch schon mit GPIO_SetBits/GPIO_RestBits versucht. Leider keinen Erfolg

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren