www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik GPIO Pin Konfiguration


Autor: HeikoP (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo. Ich möchte ein LCD mit dem STM323 VL Discovery ansteuern.
#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

void LCDPin_InitConf(void)
{
  /* ************ Initialisierung/Konfiguration ***************** */
  GPIO_InitTypeDef GPIO_InitStructure;
  GPIO_InitStructure.GPIO_Pin =  RS | RW | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // Push-Pull Output
  GPIO_Init(GPIOC, &GPIO_InitStructure);
}

void LCD_Initial(void)
{
  GPIO_WriteBit(GPIOC, DB5 | DB4 | DB3, Bit_SET);
  delay();
  GPIO_WriteBit(GPIOC, DB5 | DB4 | DB3, Bit_RESET);
  delay();
  GPIO_WriteBit(GPIOC, DB3 | DB2 | DB1, Bit_SET);
  delay();
  GPIO_WriteBit(GPIOC, DB3 | DB2 | DB1, Bit_RESET);
  delay();
  GPIO_WriteBit(GPIOC, DB2 | DB1, Bit_SET);
  delay();
  GPIO_WriteBit(GPIOC, DB2 | DB1, Bit_RESET);
  delay();
  GPIO_WriteBit(GPIOC, RS | DB6 | DB4 | DB2 | DB1 | DB0, Bit_SET);
}

/* ************** Hilfsfunktionen ************************* */
void delay(void)
{
  int i;
  for (i=0;i<500;i++)
  {}
}

int main()
{
  while(1) // Do not exit
  {
    LCDPin_InitConf();
  delay();
  LCD_Initial();
  }
}

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

Autor: Hanz (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: ikarus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
void delay(void)
{
  int i;
  for (i=0;i<500;i++)
  {}
}
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.

Autor: Thomas Eckmann (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ikarus schrieb:
> void delay(void)
>
> {
>
>   int i;
>
>   for (i=0;i<500;i++)
>
>   {}
>
> }

Solch eine Funktion wird von einem vernünftigen Compiler einfach 
wegoptimiert. Da kommt ja nichts raus.

volatile int nInd;
#define DELAY 10000

void Delay(void)
{
   for (nInd = 0; nInd < DELAY; nInd++) {};
}

mfg.

Autor: HeikoP (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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):
GPIO_InitType...
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStru...

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

Autor: HeikoP (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas Eckmann schrieb:
> volatile int nInd;
> #define DELAY 10000
>
> void Delay(void)
> {
>    for (nInd = 0; nInd < DELAY; nInd++) {};
> }

Danke dafür, man lernt nie aus ;-)

Okay, vielen Dank, es funktioniert jetzt.

Autor: ikarus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas Eckmann schrieb:
> Solch eine Funktion wird von einem vernünftigen Compiler einfach
> wegoptimiert. Da kommt ja nichts raus.
Ja, mist, das Wegoptimieren habe nicht bedacht...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.