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.
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...
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.