STM32 HAL_SPI_Transmit, wofür Size?

Gast #4345177
Lesenswert?

Moin,
ich arbeite mit der HAL-Firmware und einem STM32F411RE.

Benutzen tue ich gerade das SPI Modul und habe mich gefragt wofür der 
Size Parameter ist?

Size: amount of data to be sent.

Ich meine....
1. Lege ich bei der Initialisierung des SPIs fest das es 8bit sind.
2. Ist der Datenpuffer (pData: pointer to data buffer) angegeben und auf 
uint8 beschränkt. Wozu dann bei Size uint16? ...oder ist nur der Pointer 
uint8 groß aber die Variable dahinter kann größer sein?

Als Beispiel, sende ich in einer For-Schleife insgesamt 192bit in 8bit 
Paketen(ist für einen TLC5940):
1
int16_t for_gsCounter = 0;
2
for(for_gsCounter = 0; for_gsCounter < tlcs_in_series*192-1; for_gsCounter+=8)
3
{
4
 HAL_SPI_Transmit_IT(&hspi2, &gsData[spi_tx_counter], 7);//Hier die 7!!!
5
 while(HAL_SPI_GetState(&hspi2) != HAL_SPI_STATE_READY){}
6
 spi_tx_counter++;
7
}

Ich habe hier 7 (8-1) gewählt. Habe aber Probleme, sprich die Bits 
werden irgendwie völlig falsch gesendet. Liegts vll an Size?

MfG.
Gast #4345183
Lesenswert?

Hier wäre noch gsData[] zur Vollständigkeit.
1
uint8_t gsData[24] = {
2
  0b11111111,
3
  0b11111111,
4
  0b11111111,
5
  0b11111111,
6
  0b11111111,
7
  0b11111111,
8
  0b11111111,
9
  0b11111111,
10
  0b11111111,
11
  0b11111111,
12
  0b11111111,
13
  0b11111111,
14
  0b11111111,
15
  0b11111111,
16
  0b11111111,
17
  0b11111111,
18
  0b11111111,
19
  0b11111111,
20
  0b11111111,
21
  0b11111111,
22
  0b11111111,
23
  0b11111111,
24
  0b11110000,
25
  0b00000000
26
};
#4345192
Lesenswert?

Size ist nicht die Anzahl der Bits, die du senden willst.
Das hast du ja schon bemerkt, dass du das bereits bei der 
Initialisierung eingestellt hast.

Size gibt statt dessen an, wieviele Bytes/Wörter in dem Buffer stehen 
und verschickt werden sollen. Du brauchst also nicht jedes Byte einzeln 
schicken, sondern die Funktion übernimmt das alles für dich.
Gast #4345200
Lesenswert?

Also könnte ich jetzt als pdata(was oben &gsData[spi_tx_counter] ist) 
einen uint32_t nehmen. Und würde dann bei Size 4(32/8) reinschreiben?

Also:
1
uint32_t gsData = ...;
2
HAL_SPI_Transmit_IT(&hspi2, &gsData, 4);

Und er würde mir automatisch alle 32bits senden?
MfG.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren