Forum: Mikrocontroller und Digitale Elektronik STM32F412 - SBC-OLED ansteuern


von Aaron P. (Firma: Pforzheim University) (aaron_1992)


Lesenswert?

Hallo,

ich möchte in Keil mit einem STM32F412G-Disco ein Display (SBC-OLED01) 
ansteuern.
Ich benutze I2C für SDA und SCL die Pins PB9 und PB10.

Jetzt ist meine Frage wie ich "CH1", oder "Hallo" auf dem Display 
ausgeben kann?
Bin neu auf KEIL.

vorgehensweise:
#define PinSCL        PB10
#define PinSDA        PB9

#define OLED_RESET 4

uint16_t _buffer_height = 64;
uint16_t _buffer_width = 128;


Gruß

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Du brauchst eine Library welche den Text rendert. z.B. TouchGFX enthält 
u.a. entsprechende Funktionalität:

https://support.touchgfx.com/docs/introduction/welcome

: Bearbeitet durch User
von Wastl (hartundweichware)


Lesenswert?

Niklas G. schrieb:
> Du brauchst eine Library welche den Text rendert.

Nö, braucht er nicht. Jedenfalls nicht so etwas Hoch-
gestochenes wie TouchGfx.

Es reicht sich hier zu orientieren.

https://controllerstech.com/oled-display-using-i2c-stm32/

Ein gutes Tutorial wie ich finde. Allerding fliegen einem
auch hier keine gebratenen Tauben in den Mund. Etwas
Eigeninitiative und Denkarbeit ist trotzdem erforderlich,
schon wegen Keil ....

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Wastl schrieb:
> Nö, braucht er nicht. Jedenfalls nicht so etwas Hoch-
> gestochenes wie TouchGfx.

Kann man auch selber machen, klar. Aber lohnt sich das? Besonders auch 
wenn man beliebige Schriftarten inklusive nicht-lateinischen Zeichen 
verarbeiten möchte?

von Harry L. (mysth)


Lesenswert?

Das hier:
Aaron P. schrieb:
> Bin neu auf KEIL.

deutet darauf hin, daß er mit TouchGFX ganz sicher vollkommen 
überfordert sein wird.
Der von Wastl verlinkte Beitrag ist da deutlich zielführender!

Das ist sowieso generell kein Problem der genutzten IDE, sondern ganz 
offensichtlich mangelt es dem TO an Erfahrung und Grundlagenwissen.

: Bearbeitet durch User
von Wastl (hartundweichware)


Lesenswert?

Niklas G. schrieb:
> Aber lohnt sich das?

Der TO wird (nach langer Zeit) erst mal froh sein dass er
überhaupt irgendwelche Schriftzeichen auf seinem Display
anzeigen kann. Wie Harry bereits erwähnte dürfte er mit
so einer "advanced" Lib überfordert sein.

Ich empfehle die STM hauseigene Cube IDE, da kann man sich
weitaus leichter tun wenn es um Tutorials geht.

von Aaron P. (Firma: Pforzheim University) (aaron_1992)


Lesenswert?

danke für die guten Links :)


#include "stm32f4xx_hal.h"

I2C_HandleTypeDef hi2c1;

void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_I2C1_Init(void);

void OLED_Init(void);  // Initialisiert das OLED-Display
void OLED_Clear(void); // Löscht den Inhalt des Displays
void OLED_ShowString(uint8_t x, uint8_t y, char* str); // Zeigt einen 
String an einer bestimmten Position

int main(void) {
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_I2C1_Init();

  OLED_Init(); // Initialisieren Sie das OLED-Display
  OLED_Clear(); // Löschen Sie das Display

  // Zeigen Sie "CH1" an der Position (0,0) an
  OLED_ShowString(0, 0, "CH1");

  while (1) {
    // Ihre Anwendungslogik
  }
}

static void MX_I2C1_Init(void) {
  hi2c1.Instance = I2C1;
  hi2c1.Init.ClockSpeed = 100000; // 100kHz
  hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
  hi2c1.Init.OwnAddress1 = 0;
  hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  hi2c1.Init.OwnAddress2 = 0;
  hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  HAL_I2C_Init(&hi2c1);
}


so hab ich gedacht gehabt

von Wastl (hartundweichware)


Lesenswert?

Aaron P. schrieb:
> so hab ich gedacht gehabt

Und was willst du uns damit sagen?

Übrigens, hast du schon einmal die Hinweise zum Posten von
Beiträgen gelesen und verstanden?
1
.............
2
Formatierung (mehr Informationen...)
3
.............

... insbesondere jetzt "C-Code" für dich relevant .....

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Warum benutzt du eigentlich nicht das Display was auf dem 
STM32F412G-Discovery drauf ist? Das hat eine höhere Auflösung und ist 
schneller weil es den parallelen Bus und nicht I2C verwendet. Für 
TouchGFX gibt es ein template dafür, damit müsstest du nahezu 
automatisch ein funktionierendes Projekt für das Display anlegen können, 
inklusive Treiber. Dann kannst du im grafischen TouchGFX-Designer eine 
interaktive Oberfläche mit Text & Co zusammenklicken ohne manuell mit 
Schriftarten hantieren zu müssen.

von Aaron P. (Firma: Pforzheim University) (aaron_1992)


Lesenswert?

Weil ich gerade die Schnittstelle I2C testen möchte und einfach nur was 
ausgeben möchte.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Aaron P. schrieb:
> Weil ich gerade die Schnittstelle I2C testen möchte

Dann setz nur mal ein paar Pixel oder so. Sich die ganze Arbeit des 
Font-Renderings zu generieren nur um I2C zu testen scheint mir etwas 
übertrieben.

von Aaron P. (Firma: Pforzheim University) (aaron_1992)


Lesenswert?

Bekomme die Fehlermeldung: error: L6047U: The size of this image (33956 
bytes) exceeds the maximum allowed for this version of the linker
Wo finde ich einen anderen Compiler?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?


von Wastl (hartundweichware)


Lesenswert?

Aaron P. schrieb:
> Wo finde ich einen anderen Compiler?

Beratungsresistenz? Schon vor fast einer Woche:

Wastl schrieb:
> Ich empfehle die STM hauseigene Cube IDE, da kann man sich
> weitaus leichter tun wenn es um Tutorials geht.

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.