Forum: Mikrocontroller und Digitale Elektronik STM32f103 SPI Daten empfangen


von Steffen (Gast)


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?
1
int spi_io(int data)
2
{
3
  SPI_I2S_SendData(SPI1,data);
4
  while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==RESET){;}
5
  return SPI_I2S_ReceiveData(SPI1);
6
}
7
8
void spi_tx(int data){spi_io(data);}
9
10
int spi_rx()
11
{
12
  return spi_io(0xFF);
13
}

von Plan (Gast)


Lesenswert?

Geht das nicht?
1
while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE)==SET);

von Plan (Gast)


Lesenswert?

Sorry, ja. RESET ist richtig.

von Plan (Gast)


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.

von Steffen (Gast)


Lesenswert?

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

von Thomas B. (escamoteur)


Lesenswert?

Nur aus Neugierde, was war denn das Problem?

von Steffen (Gast)


Lesenswert?

Ich habe den Code nun so geändert, die Sendefunktion hat jetzt zwar auch 
ein return aber das kann ja einfach ignorieren;-)
1
int spi1_tx(int tx)
2
{
3
  int tmp=0;
4
  SPI_SendData(SPI1,tx);
5
  while(SPI_GetFlagStatus(SPI1,SPI_FLAG_TXE)==RESET);
6
  tmp=SPI_ReceiveData(SPI1);
7
  return tmp;
8
}
9
int spi1_rx()
10
{
11
  int rx=0;
12
  while(SPI_GetFlagStatus(SPI1,SPI_FLAG_TXE)==RESET);
13
  SPI_SendData(SPI1,0xFF);
14
  while(SPI_GetFlagStatus(SPI1,SPI_FLAG_RXNE)==RESET);
15
  rx=SPI_ReceiveData(SPI1);
16
  return rx;
17
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.