Forum: Mikrocontroller und Digitale Elektronik STM32 SPI mit 16 Bit und HAL


von C. W. (chefkoch)


Lesenswert?

Hallo *,

in der Sendefunktion "HAL_SPI_Transmit" sind die Daten vom Typ uint8_t. 
Wie genau ist dann möglich per SPI im 16 Bit Mode Daten zu versenden? 
Aus dem Stand sind die Bits 15-8 ja erstmal 0.

von Ingo L. (corrtexx)


Lesenswert?

C. W. schrieb:
> in der Sendefunktion "HAL_SPI_Transmit" sind die Daten vom Typ uint8_t.
Komm bloß nicht auf die Idee, in die Funktion zu schauen was sie genau 
macht, das dann auf 16Bit zu erweitern und glücklich drüber sein das es 
geht...

von C. W. (chefkoch)


Lesenswert?

Wäre auch meine Idee für einen Workaround gewesen.

von Traubensaft .. (increasingcurrant)


Lesenswert?

Den Pointer der zu versendenden 16-bit-Variable auf den Pointer einer 
8-bit-Variable casten. Das generiert zwar eine Warnung, die kann aber 
übergangen werden.

von hp-freund (Gast)


Angehängte Dateien:

Lesenswert?

Eine Warnung bekomme ich damit nicht:
1
  
2
uint8_t data8[] = {0x12,0x34};
3
uint16_t data16[] = {0x5678,0x9ABC};
1
    // SPI 8bit
2
    hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
3
    if (HAL_SPI_Init(&hspi1) != HAL_OK)
4
    {
5
      Error_Handler();
6
    }
7
    HAL_GPIO_WritePin(SPI1_CS_GPIO_Port,SPI1_CS_Pin,GPIO_PIN_RESET);
8
    HAL_SPI_Transmit(&hspi1,data8,2,100);
9
    HAL_GPIO_WritePin(SPI1_CS_GPIO_Port,SPI1_CS_Pin,GPIO_PIN_SET);
10
11
    // SPI 16bit
12
    hspi1.Init.DataSize = SPI_DATASIZE_16BIT;
13
    if (HAL_SPI_Init(&hspi1) != HAL_OK)
14
    {
15
      Error_Handler();
16
    }
17
    HAL_GPIO_WritePin(SPI1_CS_GPIO_Port,SPI1_CS_Pin,GPIO_PIN_RESET);
18
    HAL_SPI_Transmit(&hspi1,(uint8_t *)data16,2,100);
19
    HAL_GPIO_WritePin(SPI1_CS_GPIO_Port,SPI1_CS_Pin,GPIO_PIN_SET);

Erst werden 2 8bit und dann 2 16bit Werte aus dem jeweiligen Array 
gesendet.

Siehe Bild.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.