STM32 C was passiert da?

OP #6890230
Lesenswert?
• ▲
▼
Hi,

ich möchte ein HUB75 Display mit STM32 ansteuern, die Bits für das 
display zu setzen klappt bereits indem ich in ein Array display[x][y] an 
die entsprechende Stelle die Farbe für den Pixel eintrage.

Jetzt habe ich mir eine Funktion geschrieben, die mir die Schrift auf 
dem Display anzeigen soll:


void display_write_char(unsigned char c,uint8_t color, uint8_t x, 
uint8_t y)
{
  c=c-32;

  uint8_t index=c*FONT6X8_WIDTH;
  uint8_t savex=x;
  uint8_t bla=0;

  for(uint8_t iy=y;iy<y+FONT6X8_WIDTH;iy++)

  {

  uint8_t zeichen=Font6x8[index+bla]; //Horizontal
  bla++;

  x=savex;
  for(uint8_t bit = 0x00000001; bit; bit <<= 1)//Vertikal
    {
      //set_pixel(x,iy,0x02);
      if(zeichen & bit){set_pixel(x,iy,color);}

      x++;
    }

  }
  ypos=ypos+FONT6X8_WIDTH;

}

Die Funktion funktioniert einwandfrei rufe ich sie mit dem Ascii Hex 
Code für das entsprechende Zeichen auf, rufe ich die Funktion mit dem 
Zeichen raus ist der Pointer im Schriftarray falsch gesetzt.

display_write_char(0x32,0x01,0,ypos);  //Geht zeigt 3 an
display_write_char("3",0x01,0,ypos); //Geht nicht

Was genau passiert da nun? Wird in STM32 Cube IDE nicht Standardmäßig 
der Ascii Wert genutzt? Werden dort irgendwelche Codepages genutzt etc?
OP #6890272
Lesenswert?
• ▲
▼
Nein hat er nicht.

Allerdings funktioniert die String Funktion auch nicht:

void display_putstring(char *string,uint8_t color, uint8_t x, uint8_t y) 
{
  uint8_t i=0;
  char c = string[0];

  while(c != 0) {
    if(c == '\n'){}
      //New Line no Support
    else
      display_write_char(c,color,xpos,ypos);
    c = string[++i];
  }
}

display_putstring("Hallo Welt",xpos,ypos,0x04);

Das müsste doch funktionieren?
OP #6890331
Lesenswert?
• ▲
▼
Alternativ mal so probiert wie ich es vom AVR her kenne, funktionier 
leider auch nicht.

void display_putstring(char *string,uint8_t color, uint8_t x, uint8_t y)
  {
    while (*string)
    {
      display_write_char(*string,0xFF, xpos, ypos);
      string++;
    }
  }

Ich übergebe der Funktion:

char text[]="Hallo Welt";
display_putstring(text,xpos,ypos,0x04);

Damit übergebe ich doch der funktion die Adresse des Strings mit "Hallo 
Welt"
Die funktion ließt die erste Adresse des Strings und erkennt ein "H" und 
gibt die Adresse des Zeichens H an die Funktion display_write_char.

Die sollte dann den Wert der Speicherzelle in H übernehmen und dann ein 
H auf dem Display ausgeben.

Wo ist mein Denkfehler?

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.