mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STM32 SPI Half-Duplex Problem


Autor: Bert S. (kautschuck)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
  HAL_GPIO_WritePin(SPI_CS_PORT, SPI_CS, LOW);
  spi_pos->Instance->CR1 |= (1<<SPI_CR1_BIDIOE);
  HAL_SPI_Transmit(spi_pos,&command,1,10);
  spi_pos->Instance->CR1 &= ~(1<<SPI_CR1_BIDIOE);
  asm("nop");
  HAL_SPI_Receive(spi_pos,data,size,10);
  HAL_GPIO_WritePin(SPI_CS_PORT, SPI_CS, HIGH);

SPI initialisierung:
  /* SPI2 parameter configuration*/
  hspi2.Instance = SPI2;
  hspi2.Init.Mode = SPI_MODE_MASTER;
  hspi2.Init.Direction = SPI_DIRECTION_1LINE;
  hspi2.Init.DataSize = SPI_DATASIZE_16BIT;
  hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
  hspi2.Init.CLKPhase = SPI_PHASE_2EDGE;
  hspi2.Init.NSS = SPI_NSS_SOFT;
  hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
  hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
  hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
  hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  hspi2.Init.CRCPolynomial = 15;

: Bearbeitet durch User
Autor: Lutz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne die Gegenstelle (Sensor) zu kennen wird es schwierig.

Autor: Jim M. (turboj)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bert S. (kautschuck)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, ich habe es hinbekommen, ich musste BIDIOE mit SPI_1LINE_TX(&spi) 
und SPI_1LINE_RX(&spi) setzten, irgendwie hat das mit der 
Registermanipulation nicht geklappt.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.