cancel
Showing results for 
Search instead for 
Did you mean: 

STM32H7 SPI using common lines for two sensors and DMA

eds
Associate III

 

Hello,

I have been working on creating an SPI loop using the SPI callback function to alternate between two sensors that share a common SPI SDI/SDO line. However, I am encountering an issue where the SPI transfer complete callback is triggered, but the SPI transfer seems to not be fully completed because neither an error is called nor a data is transfered. As a result, the cycle stops after 2 or 3 iterations. I am unsure how to resolve this issue or understand why it is happening. Any insights or suggestions would be greatly appreciated.

 

My SPI callback function is this: 

void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi) { if (hspi->Instance == SPI2) { /* De-select chip select */ HAL_GPIO_WritePin(g_xImuHandle.hms1.csPort, g_xImuHandle.hms1.csPin, GPIO_PIN_SET); g_xGyroSamples.gyrox.value = HMS33_AngularRate(&DMA_RxBufferGyro1[3]); g_xGyroSamples.gyroxTemperature.value = HMS33_Temperature(&DMA_RxBufferGyro1[1]); if (hspi->Instance == SPI6) { if (GyroSel == 2) { HAL_GPIO_WritePin(g_xImuHandle.hms2.csPort, g_xImuHandle.hms2.csPin, GPIO_PIN_SET); g_xGyroSamples.gyroy.value = HMS33_AngularRate(&DMA_RxBufferGyro2[3]); g_xGyroSamples.gyroyTemperature.value = HMS33_Temperature(&DMA_RxBufferGyro2[1]); HAL_GPIO_WritePin(g_xImuHandle.hms3.csPort, g_xImuHandle.hms3.csPin, GPIO_PIN_RESET); HAL_SPI_TransmitReceive_DMA(g_xImuHandle.hms3.pxSpi, (uint8_t *)DMA_TxBuffer3, (uint8_t *)DMA_RxBufferGyro3, 6 ); GyroSel = 3; } if (GyroSel == 3) { HAL_GPIO_WritePin(g_xImuHandle.hms3.csPort, g_xImuHandle.hms3.csPin, GPIO_PIN_SET); g_xGyroSamples.gyroz.value = HMS33_AngularRate(&DMA_RxBufferGyro3[3]); g_xGyroSamples.gyrozTemperature.value = HMS33_Temperature(&DMA_RxBufferGyro3[1]); HAL_GPIO_WritePin(g_xImuHandle.hms2.csPort, g_xImuHandle.hms2.csPin, GPIO_PIN_RESET); HAL_SPI_TransmitReceive_DMA(g_xImuHandle.hms2.pxSpi, (uint8_t *)DMA_TxBuffer2, (uint8_t *)DMA_RxBufferGyro2, 6 ); GyroSel = 2; } }
View more

  I start the cycle by calling HAL_SPI_TransmitRecieve_DMA()​ in the main function.

 

 

0 REPLIES 0