Forum: Mikrocontroller und Digitale Elektronik STM32 MOSI default Pin level


von Adib (Gast)


Lesenswert?

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.
--

von Adib (Gast)


Lesenswert?

Hmm, eventuell geht MOSI ja "nur" in einen hochohmigen Zustand, Ich 
probiere gleich morgen mal ein pulldown aus.

N8, Adib.
--

von Adib (Gast)


Lesenswert?

Pull down hat nichts gebracht. Also der mosi geht nicht hochohmig.
:-(

von Baldrian (Gast)


Lesenswert?

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.

von Uwe Bonnes (Gast)


Lesenswert?

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...

von Little B. (lil-b)


Lesenswert?

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?

von Adib (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.