Hallo,
ich habe einen komischen Effekt beim STM32 SPI.
Dieser zeigt mir im Master Mode ein Overrun Flag.
Ich spreche mit dem STM einen LTC1960 an.
Dieser verlangt zwischen den Bytes einen Impuls auf der SS Leitung.
Das Overrun Flag wird beim Senden des 2. Bytes gesetzt
1 | SPI_Cmd(SPI1,ENABLE);
|
2 |
|
3 | while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
|
4 | SPI_I2S_SendData(SPI1,0b00000100);
|
5 | while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) != RESET);
|
6 | temp1=SPI_I2S_ReceiveData(SPI1);
|
7 |
|
8 | while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
|
9 | while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) != RESET);
|
10 | SPI_Cmd(SPI1,DISABLE);
|
11 | for(temp3=10;temp3>0;temp3--)
|
12 | {
|
13 | asm("nop");
|
14 | }
|
15 |
|
16 | SPI_Cmd(SPI1,ENABLE);
|
17 | //temp2=SPI_I2S_ReceiveData(SPI1);
|
18 | while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
|
19 | SPI_I2S_SendData(SPI1,0b00000101); //Senden 2. Byte
|
20 | while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) != RESET);
|
21 | temp2=SPI_I2S_ReceiveData(SPI1);
|
22 | while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_OVR)==1)
|
23 | {
|
24 | temp3=SPI_I2S_ReceiveData(SPI1);
|
25 | }
|
26 | while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
|
27 | while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) != RESET);
|
28 |
|
29 |
|
30 | SPI_NSSInternalSoftwareConfig(SPI1,DISABLE);
|
31 | SPI_Cmd(SPI1,DISABLE);
|
erst wenn ich diese Zeile mit hinzu nehme läuft der code fehlerfrei
durch
1 | temp2=SPI_I2S_ReceiveData(SPI1);
|
Zu meiner Frage:
Warum wird das Overrun Flag gesetzt?
Grüße TSE