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

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