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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.