Question
Trigger DMA for SPI based on Timer interrupt
Hello,
I need to sample an ADC at 20ms using SPI. I setup a timer interrupt to do this, but I would like to fill a double buffer at SPI_RxHalfCplt and RXCplt.
My timer seems to be working correctly, however the Rx Half Complete Callback is being Called every time the timer interrupt is called.
What I really want is for the RxHalf Complete Callback to be called when half of the buffer is full.
What am I doing wrong?
#define BUFFER_SIZE 492
/* USER CODE BEGIN PV */
uint8_t Audio_Data[BUFFER_SIZE];
/* USER CODE END PV *//* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim16); // Start Timer16
HAL_SPI_Receive_DMA(&hspi1, Audio_Data, BUFFER_SIZE);
/* USER CODE END 2 */
/* USER CODE BEGIN 4 */
void HAL_SPI_RxHalfCpltCallback(SPI_HandleTypeDef *hspi1)
{
HAL_GPIO_TogglePin(GREEN_LED_GPIO_Port, GREEN_LED_Pin);
}
void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi1)
{
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == htim16.Instance)
{
HAL_SPI_Receive_DMA(&hspi1, Audio_Data, 2);
}
}
/* USER CODE END 4 */