Hi,
ich habe hier ein TFT mit einem R61505U-Controller.
Dieser lässt sich über SPI ansteuern. Das klappt mit einem AVR auch ohne
Probleme.
Nun möchte ich den AVR-Code (avr.c) auf einen STM32F103RB auf dem
Olimex-H103 portieren.
Dabei funktioniert das Display nicht, bzw. es reagiert gar nicht erst.
Im Anhang findet ihr meinen AVR-Code (avr.c), unten die SPI-Funktionen
für den STM.
Ich kann mir eigentlich nur vorstellen, dass der Fehler irgendwo in der
SPI-Initialisierung oder den Funktionen spi_write und spi_wait liegt.
Auch denkbar wären Compilersachen, die der AVR-GCC anders übersetzt als
der CodeSourcery für meinen Cortex-M3.
Ich hoffe, ihr könnt mir helfen, bin mittlerweile etwas ratlos ;)
Gruß
Lasse
Hallo!
Habe den Quelltext und das Datenblatt des TFT-Controllers zwar nur
"kurz" überflogen, aber hast du nicht vergessen beim Code für den Cortex
die Chip Select Leitungen zu setzen bzw. rücksetzen in spi_write() ??
Habe zwar kein adäquates Beispiel mit einer Ansteuerung für ein TFT über
SPI, aber mit einem OLED. Bei mir sieht der Code folgendermaßen aus,
bitte mit der Beachtung, dass ich die alte Firmware Library des STM32
verwende(Version 1.0):
Vermute bei dir ebenfalls den Fehler in spi_write() und vor allem in
spi_wait()
Hi,
das mit CS ist nicht das Problem, dass funktioniert bei der AVR-Version
auch ohne.
Unten nochmal die SPI-Funktionen auf dem AVR.
Eigentlich müsste das SPI auf dem STM doch genauso initialisiert sein,
wie das auf dem AVR, oder?
Gruß
Lasse
Hallo!
Klar, die Initialisierung auf dem AVR und dem Cortex sollte gleich sein.
Ob das wirklich so ist, ist eine andere Frage...
Hast du CPOL und CPHA korrekt konfiguriert und überprüft? Werden
überhaupt Daten gesendet(messen)? Ich weiß, dass ich damals auch
Startschwierigkeiten damit hatte, deshalb würde ich dir empfehlen, die
Register wirklich GENAU zu kontrollieren und sicherzustellen, ob alles
richtig ist, gegebenfalls das Reference Manual nochmals genau lesen, vor
allem zu CPOL, CPHA und NSS.
Eventuell könnte es Probleme mit der Geschwindigkeit geben. Du
verwendest "nur" einen Prescaler von 2, ist das nicht etwas zu schnell,
bei ich denke mal 72MHz MCU-Speed?
Schönen Abend noch...
Hallo!
Krass. Also erstmal: Danke schön! Ich stelle immer wieder fest, dass
dieses Forum seeehr hilfreich ist!
Faszinierend: Ich hatte die gleiche Idee wie du... Nur habe ich es mit
zwei Extremwerten ausprobiert, es funktioniert, sobald ich einen
Prescaler von 16 einstelle!
Vielen Dank!
Gruß
Lasse
(edit nicht mehr erlaubt)
Mich wundert jetzt nur noch, dass es nur funktioniert, wenn der
Prescaler zwischen 4 und 16 liegt. Dass das ganze nicht mehr
funktioniert, wenn das SPI zu schnell ist (Prescaler=2) kann ich ja
verstehen. Aber warum funktioniert das bei Prescaler=32 nicht mehr?
Gruß
Lasse
PS: In der Praxis isses mir egal, weil ich mich darüber freue, dass es
funktioniert, und je schneller desto besser. Aber in der Theorie
interessiert es mich. Zumal es beim AVR mit maximaler und minimaler
Frequenz funktioniert hat.