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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.