Hallo zusammen
Ich habe hier zwei STM32F105RBT6
Diese sind mittels SPI zusammen verbunden.
Board-A ist Master
Board-B ist Slave.
Der Master sendet kontinuierlich vier gleiche Bytes an den Slave (zum
testen) Dieser sollte immer mit 0xAA antworten.
Nun habe ich wohl irgendwo ein Problem.
Im Bild im Anhang sieht man, dass der Slave bei zwei von vier Bytes
korrekt antwortet. Bei den anderen zwei sendet er merkwürdigen müll.
Hat jemand eine Idee, woran das liegen kann?
Ich verwende bei beiden SPI2.
Der MISO wurde nicht mit Board-A verbunden sondern ist nur am
Logicanalyzer angeschlossen. Eine unbeabsichtigte Belastung wegen falsch
konfiguriertem Pin auf Board-A ist somit ausgeschlossen.
Hier noch mein Code des Slave:
1 | //SPI2 MISO
|
2 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
|
3 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
|
4 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
5 | GPIO_Init(GPIOB, &GPIO_InitStructure);
|
6 |
|
7 | //SPI2 MOSI, SCK, NSS
|
8 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15 | GPIO_Pin_13 | GPIO_Pin_12;
|
9 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
|
10 | GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
11 | GPIO_Init(GPIOB, &GPIO_InitStructure);
|
12 |
|
13 |
|
14 | SPI_InitTypeDef SPI_InitStructure;
|
15 |
|
16 | SPI_InitStructure.SPI_NSS = SPI_NSS_Hard;
|
17 | SPI_InitStructure.SPI_Mode = SPI_Mode_Slave;
|
18 | SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
|
19 | SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
|
20 | SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
|
21 | SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
|
22 | SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
|
23 | SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //Idle Status
|
24 | SPI_InitStructure.SPI_CRCPolynomial = 7;
|
25 | SPI_Init(SPI2,&SPI_InitStructure);
|
26 |
|
27 | SPI_CalculateCRC(SPI2,DISABLE);
|
28 |
|
29 | SPI_I2S_ITConfig(SPI2,SPI_I2S_IT_RXNE,ENABLE);
|
30 |
|
31 | SPI_Cmd(SPI2,ENABLE);
|
32 |
|
33 |
|
34 |
|
35 | void SPI2_IRQHandler(void)
|
36 | {
|
37 | uint8_t cmd;
|
38 |
|
39 | if(SPI_I2S_GetITStatus(SPI2,SPI_I2S_IT_RXNE) == SET)
|
40 | {
|
41 |
|
42 | cmd = SPI_I2S_ReceiveData(SPI2);
|
43 | SPI2->DR = 0xAA;
|
44 | }
|
45 | }
|
Danke schonmal