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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.