www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STM32f103 SPI Daten empfangen


Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag,

ich habe ein Problem damit Daten von der SPI1 zu empfangen. Die 
Initialisierung habe ich aus der FW-Lib entnommen. Das Senden 
funktioniert, zumidest soweit wie ich das auf dem Oszi erkennen kann. Um 
Daten zu empfangen benutze ich spi_rx(), ich empfange aber nur 0xff, ist 
die Empfangsfunktion falsch oder muss ich den Fehler woanders suchen?
int spi_io(int data)
{
  SPI_I2S_SendData(SPI1,data);
  while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==RESET){;}
  return SPI_I2S_ReceiveData(SPI1);
}

void spi_tx(int data){spi_io(data);}

int spi_rx()
{
  return spi_io(0xFF);
}

Autor: Plan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Geht das nicht?
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==SET);

Autor: Plan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, ja. RESET ist richtig.

Autor: Plan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bevor Du sendest, ist da schon das RXNE gesetzt? Wenn ja, dann 
SPI_I2S_ReceiveData(SPI1); als Dummy Read befehl ausführen.

Kannst ja auch erst auf "SPI_I2S_FLAG_TXE" abfragen.

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Hilfe, ich habe es jetzt hoffentlich richtig, zumindest 
funktioniert es^^.

Autor: Thomas Burkhart (escamoteur)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur aus Neugierde, was war denn das Problem?

Autor: Steffen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe den Code nun so geändert, die Sendefunktion hat jetzt zwar auch 
ein return aber das kann ja einfach ignorieren;-)
int spi1_tx(int tx)
{
  int tmp=0;
  SPI_SendData(SPI1,tx);
  while(SPI_GetFlagStatus(SPI1,SPI_FLAG_TXE)==RESET);
  tmp=SPI_ReceiveData(SPI1);
  return tmp;
}
int spi1_rx()
{
  int rx=0;
  while(SPI_GetFlagStatus(SPI1,SPI_FLAG_TXE)==RESET);
  SPI_SendData(SPI1,0xFF);
  while(SPI_GetFlagStatus(SPI1,SPI_FLAG_RXNE)==RESET);
  rx=SPI_ReceiveData(SPI1);
  return rx;
}

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.
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.

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