STM32 SPI Half-Duplex Problem

OP #5604852
Lesenswert?
• ▲
▼
Hi,

Ich versuche einen Sensor mit dem SPI im Half-Duplex Mode auszulesen, 
jedoch ist das Verhalten nicht wie erwünscht. Wenn ich im Full-Duplex 
bin, MISO und MOSI kurzgeschlossen, dann sendet er mir richtig, jedoch 
kann er natürlich nicht empfangen, aber ich kann das empfangene mit dem 
Oszi hinter dem seriellen Widerstand auf der Leitung (470Ohm) messen. Im 
Half-Duplex Mode (initialisiert mit CubeMX) scheint das ganze aber nicht 
mehr zu funktionieren, es ist fast so, als würde irgendwas die Leitungen 
extrem Hochohmig machen. Der uC ist ein STM32F410. Jemand eine Idee, was 
da los ist? Der ungebrauchte MISO Pin im Half-Duplex wird übrigens als 
Default belassen, aber auch eine Konfiguration als Input hat leider 
nichts gebracht.

Kommunikation:
1
  HAL_GPIO_WritePin(SPI_CS_PORT, SPI_CS, LOW);
2
  spi_pos->Instance->CR1 |= (1<<SPI_CR1_BIDIOE);
3
  HAL_SPI_Transmit(spi_pos,&command,1,10);
4
  spi_pos->Instance->CR1 &= ~(1<<SPI_CR1_BIDIOE);
5
  asm("nop");
6
  HAL_SPI_Receive(spi_pos,data,size,10);
7
  HAL_GPIO_WritePin(SPI_CS_PORT, SPI_CS, HIGH);

SPI initialisierung:
1
  /* SPI2 parameter configuration*/
2
  hspi2.Instance = SPI2;
3
  hspi2.Init.Mode = SPI_MODE_MASTER;
4
  hspi2.Init.Direction = SPI_DIRECTION_1LINE;
5
  hspi2.Init.DataSize = SPI_DATASIZE_16BIT;
6
  hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
7
  hspi2.Init.CLKPhase = SPI_PHASE_2EDGE;
8
  hspi2.Init.NSS = SPI_NSS_SOFT;
9
  hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
10
  hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
11
  hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
12
  hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
13
  hspi2.Init.CRCPolynomial = 15;
Angehängte Dateien:
#5605155
Lesenswert?
• ▲
▼
Bert S. schrieb:
> es ist fast so, als würde irgendwas die Leitungen
> extrem Hochohmig machen.

Hattest Du etwas anderes erwartet? Im Halbduplex Mode treibt der STM 
seine Datenleitung nur genau dann wenn er auch was sendet, sonst nicht.


Einzig die Clock sieht merkwürdig aus, als würde die GPIO 
Initialisierung nicht so ganz stimmen. Aus Versehen auf Eingang 
gestellt? Selbst dann müsste es eigentlich ausreichen die Pulldowns in 
der GOIO Config einzuschalten, da Dein SCK Idle Pegel ja offensichtlich 
"Low" ist.

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.