STM32 SPI, fehlendes MOSI Signal

OP (Firma: Torrox.de) #4116572
Lesenswert?
• ▲
▼
Hallo,
ich verzweifle gerade dabei, einen STM32L151RE dazu zu bringen, als 
SPI-Master zu funktionieren. Die Verdrahtung ist soweit vorgegeben, dass 
ich SPI1 verwenden muss und das chip-select Signal nicht von der 
Hardware generieren lassen kann. MISO, MOSI und CLK sollen vom 
Peripheral verwendet werden. Mein Vorgehen:

1) IOs initialisieren
- GPIO port A clock enable setzen (dort hängen MISO und MOSI)
- GPIO port B clock enable setzen (CLK)
- SPI1 clock enable

2) Alternative Funktionen einschalten
- GPIOA/B->MODER für MISO, MOSI und CLK auf "Alternate function mode" 
setzen.
- GPIOA/B->AFR für MISO, MOSI und CLK auf 5u gesetzt. Dieser Wert 
entspricht laut datasheet dann SPI1_MISO, SPI1_MOSI und SPI1_SCK

3) SPI1 konfigurieren
- Softwareslavemanagement Enable + Internal slave select
- SPI enable
- SPI Master
- Baudrate select = 1; ergibt laut Messung ~500KBaud

Am Oszi, sehe ich die durch SW gesteuerte CS-Leitung regelmäßig auf 
aktiv (low) gehen. Innerhalb der Bereiche, sehe ich Clock in 5 8er 
Blöcken und auf MISO sehe ich plausibel aussehende Antworten vom Slave. 
Die Daten vom Slave sehe ich auch in der Software wieder.

Was mir fehlt ist MOSI! Ich sehe da einfach kein Signal. Ich habe auch 
schon versucht, das Signal mal auf einen anderen Pin auszugeben, da sehe 
ich leider auch nichts.

Erkennt jemand von euch an dem Vorgehen einen Fehler?

mfg und vielen Dank für's Draufgucken,

Torsten
OP (Firma: Torrox.de) #4116588
Lesenswert?
• ▲
▼
Christopher B. schrieb:
> Wahrscheinlich machst du irgendeine Einstellung bei Port A falsch. Port
> B mit dem SCK scheint ja zu funktionieren. An welchem Port haengt dein
> SW-CS?

Der hängt auch an Port A. Ich habe MOSI gerade auch mal an einen PA12 
gehängt, weil ich vermutet hatte, dass evtl. irgend eine Lötstelle etc. 
das Problem sein könnte. Das hat aber auch nichts gebracht.

Danke für die Idee!

Ich habe mal den Quellcode angehängt, falls jemand die Zeit hat, da mal 
rüber zu gucken.

Edit: Ich habe auch noch mal ein Bild von CS und Clock angehängt.
Angehängte Dateien:
#4116615
Lesenswert?
• ▲
▼
Tipp 1:
Setze das "Enable Bit" ganz zum schluss der Initialisierung als 
sepparate anweisung.
Manche Bits lassen sich nicht ändern, wenn SPI bereits eingeschaltet 
ist.

Tipp 2:
SPI->CR1 hat zwar 0x0000 als reset value, ich würde mich aber nicht 
darauf verlassen. Setze es evtl. zuvor explizit auf 0!

Tipp 3:
in mode():
"( 0x03 << 2 * pin )" wäre mir nicht explizit genug, ich würde
"( 0x03 << (2 * pin) )" schreiben
analog natürlich auch bei allen anderen rotations-anweisungen

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.