2016-04-20 29 views
1

Ich versuche den Flexible Static Memory Controller (FSMC) auf dem STM32f4-Discovery zu verstehen.STM32F4 FSMC mit TFT LCD

Ich habe viel Forschung gemacht und ich kann nicht verstehen, wie das funktioniert. Ich bin ein völlig autodidaktischer Programmierer, der gerade einen Abschluss in Chemie verfolgt, also sei einfach auf mich lol.

Ich habe diese Websites zu finden, die ich dies herauszufinden wurden mit:

https://electronics.stackexchange.com/questions/165200/stm32f407-fsmc-interface-with-tft-lcd

http://prog3.com/sbdm/blog/u013030441/article/details/48159101

http://www2.st.com/content/ccc/resource/technical/document/application_note/85/ad/ef/0f/a3/a6/49/9a/CD00201397.pdf/files/CD00201397.pdf/jcr:content/translations/en.CD00201397.pdf

Ich habe auch mit Beispiel-Code von ST selbst gefunden Bibliotheken.

OK, jetzt das Missverständnis:

Wenn ich den obigen Code aussehen sowohl für den TFT-Treiber, ich sehe, dass der LCD-Display mit structs oder Definitionen wie

#define LCD_REG  (*((volatile unsigned short *) 0x60000000)) 
#define LCD_RAM  (*((volatile unsigned short *) 0x60020000)) 
LCD_RAM = data; 
LCD_REG = command; 

zugegriffen Meine Frage ist, warum Sie müssen auf zwei Bereiche der FSMC-SRAM-Bank anstatt auf einen zugreifen. Warum kann ich nicht einfach Daten an das LCD senden, indem ich nur auf LCD_REG (den Anfang der Speicherbank) schreibe?

Es muss etwas über FSMC sein, dass ich vermisse. Ich habe das Datenblatt mehrmals gelesen und ich weiß, dass die Bank bei 0x6000 0000 startet, aber ich kann nicht begründen, warum sie auf die Bank in einem anderen Abschnitt bei 0x6000 2000 zugreifen würden.

Jede Hilfe beim Verständnis wird sehr geschätzt. Wenn Sie von einem Buch oder einer Website wissen, FSMC kann ich tief lernen, ich wäre sehr dankbar.

Vielen Dank für die Zeit!

Antwort

1

Siehe Abb.7 in der Application Note, die Sie verknüpft haben. Sie haben 16 Datenleitungen angeschlossen, aber nur eine einzige Adressleitung geht an den RS-Pin. Dann wird der LCD-Controller zu einem Speicherkarten-Peripheriegerät mit zwei Registern. Wenn dieses bestimmte Bit in der Adresse 0 ist, dann wird das Befehlsregister adressiert, wenn es 1 ist, dann das Datenregister. Der Rest der Adressleitungen ist nicht verbunden, so dass ihr Zustand irrelevant ist, z. Greifen Sie auch auf das Datenregister unter 0x60FFFFFF zu. Beachten Sie, dass alle drei Beispiele unterschiedliche Adresszeilen verwenden, daher eine andere Adresse für das Datenregister.

LCD zu verwenden, Sie einen Befehlscode in das Befehlsregister, optional durch einige Parameter in dem Datenregister gefolgt schreiben, dann den nächsten Befehl, und so weiter. Es gibt Befehle zum Einrichten des angezeigten Bereichs, Farbzuordnung, Helligkeit, einige Spezialeffekte wie Scrollen usw. Jeder Befehl benötigt eine feste Anzahl von Parametern, außer es gibt einen Namen wie Write RAM, wo die Parameter die tatsächlichen Pixeldaten sind . Pixeldaten werden sequentiell im Display-Speicher gespeichert, Sie können mit dem Befehl Write RAM eine beliebige Anzahl von ihnen einstellen, Sie können für immer in diesem Modus bleiben und Display-Updates nacheinander senden.

+0

Ich glaube, ich verstehe jetzt. Ich habe auch diesen Link gefunden, der mir irgendwie geholfen hat. https://github.com/hampussandberg/HexConnect/wiki/LCD-ER_TFTM070_5 Aber ich weiß nicht, warum ich diese Figur im Referenzhandbuch oder im Datenblatt nicht finden kann. Ich arbeite gerade an dem Code für das LCD, damit ich weiß, wie es funktioniert. Danke für die Hilfe! –