Nucleo STM32L476 und Arduino TFT-Schirmstiftzuordnung

Ich möchte ein Arduino TFT-Schild (ILI9341) auf einem Nucleo STM32L476-Entwicklungsboard verwenden. Diese Abschirmung verwendet den 8-Bit-MCU-Modus und funktioniert gut, aber die Pin-Implantation für den Arduino-Anschluss am Nucleo ist nicht sehr praktisch.

NUCLEO STM32L476RG-Stifte ILI9341 Arduino-Abschirmstifte

Die Zuordnung der Datenbus-Pins ist eigentlich:

TFT    |  7  |   6  |  5  |  4  |  3  |   2  |  1  |  0  |
NUCLEO | PA8 | PB10 | PB4 | PB5 | PB3 | PA10 | PC7 | PA9 |

Um ein Byte auf den TFT-Bus zu schreiben, muss ich viel verschieben, maskieren usw. ... Dies erzeugt einen Overhead auf der TFT-Kommunikationsbandbreite.

Gibt es auf dem STM32L4 eine Möglichkeit, die GPIOs und PORTs in eine Art "virtuellen parallelen Port" umzuwandeln, wo ich nach der Konfiguration einfach mein Byte in ein Register schreiben und die Hardware dieses Register in die angegebenen GPIOs/PORTs verdrahten kann?

Woher hast du diese Zuordnung?
@DiBosco Ich bekomme es von der Beschreibung der TFT-Platine und der Nucleo-Pins im ST-Datenblatt, ich bearbeite, um Bilder hinzuzufügen.
Ich bin mir über die Unterschiede zwischen dem D0-D15 in den grünen Kästchen und den Etiketten rechts in den blauen Kästchen des oberen Bildes nicht sicher. Weißt du was damit los ist?
Hmmm, diese Pinbelegung, nachdem ich das Nucleo-Handbuch gefunden habe, scheint erstaunlich unbequem zu sein. Ich verstehe ihre Bezeichnung D0-D15 wirklich nicht. Es fühlt sich an, als müssten wir hier etwas vermissen. Wenn ich das tun würde, würde ich eine kleine Adapterplatine bauen, um das LCD D0-D7 mit PA0-8 zu verbinden und den Rest mit den entsprechenden Pins zu verbinden. Es würde ein bisschen Arbeit erfordern, aber machen Sie Ihre Software zu einer verdammten Website einfacher!
@DiBosco D0 bis D15 ist der Name des Arduino-Anschlusses für diesen Pin.
@Arsenal OK danke. Die Arduino-Nomenklatur erscheint dann etwas seltsam. Ich würde definitiv eine kleine Adapterplatine entwerfen!
@DiBosco, ja, mit den Arduino-Port-Labels (D0..D15) erwarten wir einen zugeordneten STM32-Half-Port ... aber leider nicht! Dies schränkt die ordnungsgemäße Verwendung des Arduino-Schildes ein ...

Antworten (1)

Sie haben Recht mit Ihrer Analyse, dass es sich um ein ungünstiges Layout für einen parallelen Bus handelt.

Eine andere Version Ihrer Pinbelegungsgrafik:Pinbelegung des Nucleo-L476RG

Entnommen aus dem Referenzhandbuch .

Leider gibt es keine Möglichkeit, interne Pins externen Pins zuzuordnen. Der STM32 ist da sehr restriktiv (auch was alternative Funktionen der Pins angeht).


EDIT: Verschrotten Sie diesen Teil für den GPIO:

Das einzige, was mir einfällt (ohne die Hardware zu ändern), was Ihren Prozess beschleunigen könnte, ist der speicherabgebildete Bitbanding-Zugriff auf einzelne Bits des entsprechenden Registers durch einen einzigen Schreibvorgang an eine Wortadresse.

Um dies detaillierter zu sehen, werfen Sie einen Blick auf das Referenzhandbuch des L476, Abschnitt 2.3 über Bitbanding .

Ich habe es bisher nicht benutzt, daher kann ich nichts über die Nützlichkeit sagen. Aber das Erhalten der richtigen Wortadressen für jedes der benötigten Pin-Bits im ODR-Register könnte die Arbeit beschleunigen.


Grund, die Idee mit Bitbanding zu verwerfen:

Wenn man sich das Bitbanding im L476 genauer ansieht, zeigt das Programmierhandbuch , dass nur der Bereich von 0x40000000 bis 0x400FFFFF zugänglich ist. Die GPIO-Register beginnen bei 0x48000000, liegen also außerhalb des Bitbanding-Bereichs.


Die einzige Möglichkeit, Ihre Software wirklich zu vereinfachen, besteht also darin, die Platine anders zu verdrahten.

Ich komme zum Arduino-Schild, um meine Zeit zu sparen ... aber hier denke ich, dass ich zu meinem Perfboard zurückkehren werde. Jetzt weiß ich ... Danke für deine Antwort.
"Es gibt keine Möglichkeit, interne Pins externen Pins neu zuzuordnen". Ich war neugierig, ob das auf Arduino möglich ist?
@vikrant Ich bin mit den auf Arduinos verwendeten Mikrocontrollern nicht vertraut, daher kann ich es nicht sagen. Es gibt Mikrocontroller mit sehr flexiblen GPIO-Strukturen. Sie könnten das beim Arduino-Stack-Austausch fragen.
@Arsenal Ich denke, auf Arduino können Sie jeden Pin als Eingang oder Ausgang zuweisen. Ist das dasselbe, wovon Sie sprechen?
@vikrant nein, das Umschalten eines Pins zwischen verschiedenen Funktionen ist immer möglich, wenn wir einen GPIO (Allzweckeingangsausgang) haben, aber das Zuordnen des Pins 36 am Gehäuse zu GPIO A12 oder B8 ist im STM32 nicht möglich, kann aber in anderen möglich sein MCUs.
@Arsenal Entschuldigung, mit Gehäuse meinen Sie den eigentlichen Prozessorchip?
@vikrant mit Gehäuse meine ich das Plastikding mit den Metallstiften darauf, aber es wird mit dem eigentlichen Prozessorchip verbunden, ja.
@Arsenal oh, verstanden. Ich denke, Sie können Pins auf Arduino auch nicht neu zuordnen. Vielleicht in einem anderen MCU