Moin mikrocontroller.net-Community, ich wollte mich gerne mit meinen Anliegen an euch wenden, mit der Hoffnung, dass mir da jmd. Weiterhelfen kann. Es geht darum, dass ich gerne ein OLED-Display mit der Bibliothek SSD1309 auf ein beliebigen STM32-Board zum Laufen bringen möchte. (1) Bisher habe ich das OLED-Display mit der SSD1309-Biblothek nur über die Arduino IDE und für Arduino-Board in Verwendung gehabt. Das hat auch sehr gut funktioniert. Es gibt auch die Option STM32-Boards in Kombi mit der Arduino IDE benutzen zu können. Z.B. kann man die SSD1309-Bib. unter der Verwendung der Arduino IDE mit dem STM32-Nucleo 64 Modell STM32F401RE verwenden. Das funktioniert! Bei der Verwendung des Mikrocontroller-Board STM32L432KC (Nucleo-32) und bei dem STM32F303K8 (Nucleo-32) funktioniert die SSD1309-Bib. leider nicht. D.h. man kann diese Modell unter der Verwendung der Arduino IDE auswählen auch mit der SSD1309-Bib. flashen, aber auf dem Dsiplay gibt es keine gewünschte Reaktion. Das ist zeimlich verwiirent für mich! (2) Aus dem Grund wollte ich einen neuen Versuch mit der STM32 IDE STM32CubeIDE starten. Meine Kennnisse im Umgang mit der STM32 IDE klappen in sofern, dass ich den Mikrokontroller richtig einrichten kann. Bei Youtube habe ich ein hilfreiches Tutorial zur Implementierung eines OLED-Displays mit der SSD1306-Bib. (I2C) gefunden. Zur ersten Hilfstellung habe ich das Tutorial nachgemacht. Die Umsetztung des Tutorial hat mit einem OLED-Display und der SSD1306-Bib. (I2C) hat auch soweit geklappt. https://www.youtube.com/watch?v=z1Px6emHIeg&t=9s Leider ist das nicht genau das, was ich suche. Den ich würde ja gerne die SSD1309-Bib im SPI-Modus auf einen beliebigen STM32 zum Laufen bringen. Ich ich auch ein anderes Youtube-Video geschaut. Da wird zwar die gleiche SSD1306-Bib. verwendet, aber dafür nicht I2C-, sondern SPI-Modus eingestellt. Daher bin ich mir relativ sicher, dass ich bei der Einstellung per STM32 IDE keine Fehler gemacht habe. Ich denke der Knackpunkt liegt in der Einrichtung der SSD1306-Bibliothek selber. https://www.youtube.com/watch?v=F1B3G4o3d48&t=193s (3) Im nächsten Schritt wäre der Einsatz der SSD1306-Bib. im SPI-Modus sehr hilfreich. Ich gehe davon aus, dass ich so die Erfahrung machen könnte, um das Gelernte dann vielleicht anschließend mit der SSD1309-Bib. anzuwenden. - In der Datei ssd1306_conf.h kann man den Modus I2C oder SPI, das SM32-Board und die Pixelgröße einstellen. - In der Datei ssd1306.h ist die Pinbelegung des Boards. - Und in der Datei ssd1306.c sind die entsprechenden Funktionen Wenn ich z.B. das Mikrocontroller-Board STM32F401RE in der STM32CubeIDE einstelle. Den SPI-Modus auswähle und in der Datei ssd1306_conf.h SPI auswhle, und in der Datei ssd1306.h die ausgwählten Pins definiere, dann bekomme ich keine Fehlermeldung. Ich kann genau wie bei dem Tutorial SSD1306 I2C die Funktionen in der main.c verwenden, um das Display zu beschreiben. Aber auf dem Display selber wird nicht gezeigt. Das ist momentan der Stand der Dinge bei mir und ich würde mich sehr freuen, wenn mir da jmd. weiterhelfen könnte. Und möchte mich im Vorfeld für deine Hilfestellung/Problemlösung bedanken! Gruß Sebastian S.
Rene K. schrieb: > Kann dein Display überhaupt SPI? Ja, bei entsprechender Beschaltung, aber, was zum Teufel ist eine "Bib"?
Harry L. schrieb: > Ja, bei entsprechender Beschaltung Ich Frage, weil ich habe hier ein OLED mit SSD1309 das kann nur I2C, das gibt es zwar auch als SPI - aber entweder / oder.
Rene K. schrieb: > Harry L. schrieb: >> Ja, bei entsprechender Beschaltung > > Ich Frage, weil ich habe hier ein OLED mit SSD1309 das kann nur I2C, das > gibt es zwar auch als SPI - aber entweder / oder. Einige haben Lötbrücken um die Configuration zu ändern.
Moin allerseits, danke für Anteilnahme. @Rene K. Ja, ich habe sowohl OLED-Displays die man per SPI, als auch I2C mit der SSD1306- Bibliothek nutzen kann.
Sebastian H. schrieb: > um das Display zu > beschreiben. Aber auf dem Display selber wird nicht gezeigt. Welche Geschwindigkeit hast du beim SPI eingestellt? Nicht das der STM32 zu schnell für dein Display ist. Du hast in der config_datei: "Use I2C" auskommentiert und "Use SPI" aktiviert? Im Video bei 9:26 in Zeile 22/23? Du hast Zeile 26/27 auskommentiert und Zeile 30 bis 36 aktiviert? Du verwendest SPI1? Du hast die Pin im Device Config Tool genau so benannt wie sie in Zeile 30-36 heißen und alle korrekt mit dem Display verbunden? Dein Chip Select Signal wechselt von High auf LOW wenn die Kommunikation beginnt und wieder zurück nachdem die Daten gesendet wurden? Oszilloskop oder eine LED als Indikator wären hier sehr nützlich. Der SPI Mode am STM passt zum SPI Mode vom Display? Edit: In der Cube IDE heißt das CPOL und CPHA. Eventuell lädst du mal das .ioc File hoch.
:
Bearbeitet durch User
Moin @Paul B. Um auf deine Fragen zu antworten: - das Makro für I2C ist ist auskommentiert und für SPI einkommentiert. Ansopnsten spuckt der Compiler auch eine Fehlermeldung aus - das mit der Taktgeschwindigkeit ist auf jeden Fall zu beachten. Und da könnte auch der Fehler liegen. Darüber habe ich auch schon nachgedacht. Wie erwäht habe ich alle Einstellungen aus dem Youtube-Tutorial. Die Clock Configuration des STM32F401RE ist auf 84 MHz. SPI-Einstellungen: SPI1, Data Size 8 Bits, Clock Parameter Prescaler 8 - Was die anderen Einstellungen der ssd1306_conf.h betrieft : 23 //#define SSD1306_USE_I2C 24 #define SSD1306_USE_SPI 25 26 // I2C Configuration 27 //#define SSD1306_I2C_PORT hi2c1 28 //#define SSD1306_I2C_ADDR (0x3C << 1) 29 // SPI Configuration 30 #define SSD1306_SPI_PORT hspi1 31 #define SSD1306_CS_Port GPIOC //CS_GPIO_Port 32 #define SSD1306_CS_Pin GPIO_PIN_7 //CS_Pin 33 #define SSD1306_DC_Port GPIOA //DC_GPIO_Port 34 #define SSD1306_DC_Pin GPIO_PIN_0 //DC_Pin 35 #define SSD1306_Reset_Port GPIOA //RES_GPIO_Port 36 #define SSD1306_Reset_Pin GPIO_PIN_8 //RES_Pin 58 #define SSD1306_WIDTH 128 67 #define SSD1306_HEIGHT 64 Ich habe Zeile 31-36 mit 2 verschiedenen Möglichkeiten verucht. Einmal das was auskommentiert ist. Und einmal so wie es da steht. Wenn das auskommentierte einkommentiert ist, dann gibt es eine Fehlermeldung. Ich denke es liegt an der Datei ssd1306.h. Da werden die Pins zugewiesen. #ifndef SSD1306_SPI_PORT #define SSD1306_SPI_PORT hspi2 #endif #ifndef SSD1306_CS_Port #define SSD1306_CS_Port GPIOC #endif #ifndef SSD1306_CS_Pin #define SSD1306_CS_Pin GPIO_PIN_7 #endif #ifndef SSD1306_DC_Port #define SSD1306_DC_Port GPIOA #endif #ifndef SSD1306_DC_Pin #define SSD1306_DC_Pin GPIO_PIN_0 #endif #ifndef SSD1306_Reset_Port #define SSD1306_Reset_Port GPIOA #endif #ifndef SSD1306_Reset_Pin #define SSD1306_Reset_Pin GPIO_PIN_8 #endif
Harry L. schrieb: > Rene K. schrieb: >> Kann dein Display überhaupt SPI? > > Ja, bei entsprechender Beschaltung, aber, was zum Teufel ist eine "Bib"? Eine kurze Radhose mit Trägern. Oder etwas davon: https://www.dict.cc/englisch-deutsch/bib.html
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.