STM32 MOSI default Pin level

Gast #4388966
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.
--
Gast #4390513
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.
Gast #4390527
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...
#4390547
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?
Gast #4391873
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.
--

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren