Liebes Forum,
ich programmiere einen STM32 und möchte über SPI mit einem Slave
(ade7912) kommunizieren. Verwende hierfür auch die stm32_library!
Mein Problem ist, dass manchmal/meistens der Master falsche Bytes
sendet. Es kommt nicht immer vor und daher fällt es mir so schwer den
Fehler zu finden. Jenachdem, was ich in meinem Code ändere, versendet
der Master manchmal die richtigen Bytes, aber meistens eben nicht. Und
mit Code-Änderung meine ich nicht bei der SPI-Initialisierung, sondern
einen Code-Teil, der nicht einmal etwas mit SPI zu tun hat.
Im unteren Teil findet ihr die Initialisierung der SPI und als Test habe
ich eine While-Schleife erstellt, in welcher Bytes mit laufender Numer
versendet werden sollen. Das heißt, die Bytes sollten folgende Werte
beinhalten: 0x00, 0x01, 0x02,... usw.
Im Anhang findet ihr ein Bild, was tatsächlich versendet wird!
In diesem Bild also: 0xD7, 0xF9, 0xCF, 0xFA, 0xC7, ...
Und beim nächsten mal Starten (debuggen) sind wieder andere Werte
vorhanden!!
Bitte um Hilfe! Bin für jeden Hinweis dankbar!
1 | void Init_SPI1(void)
|
2 | {
|
3 | // Enable peripheral clock
|
4 | RCC->APB2ENR |= RCC_APB2ENR_SPI1EN;
|
5 |
|
6 | SPI_I2S_DeInit(SPI1);
|
7 |
|
8 | SPI_InitTypeDef SPI_InitStructure;
|
9 |
|
10 | SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
|
11 | SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
|
12 | SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
|
13 | SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
|
14 | SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
|
15 | SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
|
16 | SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
|
17 | SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
|
18 |
|
19 | SPI_Init(SPI1,&SPI_InitStructure);
|
20 |
|
21 | SPI_Cmd(SPI1, ENABLE);
|
22 |
|
23 | int count = 0;
|
24 |
|
25 | while(1)
|
26 | {
|
27 | SPI_SendData8(SPI1,count);
|
28 | while (SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET);
|
29 | while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == 1);
|
30 | count ++;
|
31 | if (count == 255)
|
32 | {
|
33 | count = 0;
|
34 | }
|
35 | }
|
36 | }
|