STM32F4 SPI + ADIS 16485

OP #3619948
Lesenswert?
• ▲
▼
Grüß euch

Ich kämpfe gerade mit der Realisierung einer SPI Kommunikation zwischen 
einem STM32F405 und der Analog Devices IMU ADIS16485.

Datenblatt IMU:
http://www.analog.com/static/imported-files/data_sheets/ADIS16485.pdf

Das Projekt wurde mit STMs Eclipse Plugin erstellt und wird mit einem 
Discovery-Board via SWD debugged. Somit finden bereits die neuesten Libs 
Verwendung und ich greife auch auf die darin vorhandenen SPI Funktionen 
zurück. Wichtig ist vor allem das Auslesen der 24x 16bit Sensorregister, 
sprich jeweils 3x achsig Beschleunigung, Gyroskop, Geschwindigkeit und 
Winkel.

Der Code tut nichts anderes als auf die richtige Page des Speichers zu 
setzen und dann die 24x Sensorregister der Reihe nach auszulesen. Im 
Prinzip funktioniert das ganze sowohl via polling, als auch 
interruptbasiert... jedoch nicht durchgehend.

Lasse ich die Endlosschleife laufen, so spuckt die IMU früher oder 
später keine sinnvollen Daten mehr aus. Zum Testen des Codes lasse ich 
mittendrin irgendwann einmal die Produkt-ID ausgeben, die einen 
statischen Wert hat. (TxBuffer[12])

Die Angaben im Datenblatt zur Initialisierung der SPI wurden 
eingehalten. Testweise wurde die Datenrate (sprich der SPI CLK) bereits 
runtergesetzt, jedoch mit dem selben Ergebnis.

Jetzt bin ich bereits etwas ratlos...
1
  spi_TxBuffer[0] = W_PAGE_ID0;
2

3
  HAL_SPI_Transmit(&hspi2, (uint8_t *)spi_TxBuffer, BUFFERSIZE, TIMEOUT);
4

5
  spi_TxBuffer[0]  = R_X_GYRO_LOW;
6
  spi_TxBuffer[1]  = R_X_GYRO_OUT;
7
  spi_TxBuffer[2]  = R_Y_GYRO_LOW;
8
  spi_TxBuffer[3]  = R_Y_GYRO_OUT;
9
  spi_TxBuffer[4]  = R_Z_GYRO_LOW;
10
  spi_TxBuffer[5]  = R_Z_GYRO_OUT;
11
  spi_TxBuffer[6]  = R_X_ACCL_LOW;
12
  spi_TxBuffer[7]  = R_X_ACCL_OUT;
13
  spi_TxBuffer[8]  = R_Y_ACCL_LOW;
14
  spi_TxBuffer[9]  = R_Y_ACCL_OUT;
15
  spi_TxBuffer[10] = R_Z_ACCL_LOW;
16
  spi_TxBuffer[11] = R_Z_ACCL_OUT;
17
  spi_TxBuffer[12] = R_PROD_ID;
18
  spi_TxBuffer[13] = R_X_DELTANG_OUT;
19
  spi_TxBuffer[14] = R_Y_DELTANG_LOW;
20
  spi_TxBuffer[15] = R_Y_DELTANG_OUT;
21
  spi_TxBuffer[16] = R_Z_DELTANG_LOW;
22
  spi_TxBuffer[17] = R_Z_DELTANG_OUT;
23
  spi_TxBuffer[18] = R_X_DELTVEL_LOW;
24
  spi_TxBuffer[19] = R_X_DELTVEL_OUT;
25
  spi_TxBuffer[20] = R_Y_DELTVEL_LOW;
26
  spi_TxBuffer[21] = R_Y_DELTVEL_OUT;
27
  spi_TxBuffer[22] = R_Z_DELTVEL_LOW;
28
  spi_TxBuffer[23] = R_Z_DELTVEL_OUT;
29

30
  /* Infinite loop */
31
  while (1)
32
  { HAL_Delay(200);
33
    HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_15);
34

35
    HAL_SPI_TransmitReceive_IT(&hspi2, (uint8_t *)spi_TxBuffer, (uint8_t *)spi_RxBuffer, BUFFERSIZE);
36
    //HAL_SPI_TransmitReceive(&hspi2, (uint8_t *)spi_TxBuffer, (uint8_t *)spi_RxBuffer, BUFFERSIZE, TIMEOUT);
37

38
  }




/edit
Ok, Problem soeben gelöst.
Ich hab unter NSS Hardware Management wohl was anderes verstanden als 
ST...
Es ist jedenfalls KEIN automatischer Chip Select.

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.