Hallo,
ich verzweifle langsam...
ich versuche auf meinem STM32F103RBT per SPI ein Byte zu empfangen.
Ich belege nur SCK und MOSI, da der STM als Slave arbeiten und in
folgendem Programm immer die SPI auslesen soll.
Der Code bis jetzt:
1 | void SPI2_Init2(void){
|
2 | GPIO_InitTypeDef GPIO_InitStructure;
|
3 | SPI_InitTypeDef REC_SPI;
|
4 |
|
5 | // bring up the GPIOs for SPI mode
|
6 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
7 |
|
8 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
|
9 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15; // MOSI and SCK are inputs
|
10 | GPIO_Init(GPIOB, &GPIO_InitStructure);
|
11 |
|
12 | // bring up SPI clocks
|
13 | RCC_APB2PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
|
14 |
|
15 | REC_SPI.SPI_Direction = SPI_Direction_1Line_Rx;
|
16 | REC_SPI.SPI_Mode = SPI_Mode_Slave;
|
17 | SPI_Init(SPI2, &REC_SPI);
|
18 |
|
19 | SPI_Cmd(SPI2, ENABLE);
|
20 | }
|
dann in der main nach dem init von oben:
1 | //read data
|
2 | while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET){};
|
3 | rec_data = SPI_I2S_ReceiveData(SPI2);
|
Der Controller bleibt in der
1 | while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET){};
|
-Schleife hängen und kommt nicht mehr raus.
Hat irgendwer Tips, was ich falsch gemacht habe? Initialisierung? Ich
finde kaum ein Beispiel im Internet...
Danke!