Hallo, ich möchte einen STM32F103 mittels SPI interface benutzen, um LEDs WS2812 anzusteuern. Dazu setze ich die SPI in den Mastermode. Das Bittiming stimmt. Ich benutze 4 bits, um das Bit-timing für ein Bit beim WS2812 zu erzeugen. Mein Problem. Bei inaktiver SPI geht das MOSI immer high. Wie kann ich zwischen den Sendungen die MOSI auf einem default level lassen? Ich möchte gerne low haben. ? Danke, Adib. --
Hmm, eventuell geht MOSI ja "nur" in einen hochohmigen Zustand, Ich probiere gleich morgen mal ein pulldown aus. N8, Adib. --
Pull down hat nichts gebracht. Also der mosi geht nicht hochohmig. :-(
Auf den SPI Pins gibt es wahrscheinlich eine Alternate Funktion als GPIO. Dann müsstest Du halt zwischen SPI Mode zur Datenübertragung und dem GPIO Mode für den Ruhezustand umschalten und den GPIO wie gewünscht setzen. Vielleicht hilft das.
Probier mal rm0316 Rev. 6 30.5.5 Communication formats Note: Prior to changing the CPOL/CPHA bits the SPI must be disabled by resetting the SPE bit. The idle state of SCK must correspond to the polarity selected in the SPIx_CR1 register (by pulling up SCK if CPOL=1 or pulling down SCK if CPOL=0). analog auf MOSI anzuwenden...
Adib schrieb: > Wie kann ich zwischen den Sendungen die MOSI auf einem default level > lassen? > Ich möchte gerne low haben. ? Bei einem SPI ist es technisch völlig irrelevant, was mit MOSI und MISO passiert, solange am CLK keine Flanke detektiert wird. Daher kann man zwar die ClkIdle einstellen, aber nicht den Idle Zustand der Datenleitungen. Da dein LED-Band kein SPI interface hat, sondern irgendeine Abart des RC5-Signals, ist es mir sowieso schleierhaft, wie das funktionieren soll. Hier im Forum gibt es sicher genug funktionierende Projekte, ich muss sie mir nur anschaun. Jedenfalls musst du vermutlich mittels Software die SPI-Hardware austricksen. Hierzu zwei Möglichkeiten: 1. Wie bereits angesprochen, nach beendeter Übertragung den Pin auf GPIO Output schalten und Low ausgeben. Vor der nächsten Übertragung natürlich wieder zurückschalten. 2. Ich kenne es von STM32F4, dass das zuletzt übermittlete Bit bestehen bleibt. Versuche mal am Ende 0x00 zu übertragen, vieleicht geht das auch auf STM32F1?
also es sieht wohl so aus dass das MSB des letzten Übertragenen Bytes entscheidend für den folgenden Ruhepegel ist. Wenn ich also noch ein 0x00 hintendran übertrage , dann bleibt MOSI low bis zur nächsten Übertragung. Grüße, Adib. --
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.