ADC DMA using HRTIM as trigger don't have any values
I am using NUCLEO-G474RE as my hardware.
STM32CubeIDE V1.3.1 and STM32G4 Fw V1.2.0.
I am using ADC2 with 4 channels triggered by HRTIM CH B Compare 4 Injected.
So these 4 channels are triggered interleaved, meaning that every HRTIM-CH-B Compare 4 only one ADC channel is triggered according to rank.
So for 1st occurrence of Comparewill trigger rank1 then the second compare it will be rank2 so on and so forth until it gets back to rank1 again.
I can see that the S/H is working as shown in the waveform below.
The circuit is similar to HRTIM cookbook section 7.1 Debugging ADC operation.

Below is the HTRIM output

My setup for ADC2:
static void MX_ADC2_Init(void)
{
/* USER CODE BEGIN ADC2_Init 0 */
/* USER CODE END ADC2_Init 0 */
ADC_InjectionConfTypeDef sConfigInjected = {0};
/* USER CODE BEGIN ADC2_Init 1 */
/* USER CODE END ADC2_Init 1 */
/** Common config
*/
hadc2.Instance = ADC2;
hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV4;
hadc2.Init.Resolution = ADC_RESOLUTION_12B;
hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc2.Init.GainCompensation = 0;
hadc2.Init.ScanConvMode = ADC_SCAN_ENABLE;
hadc2.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
hadc2.Init.LowPowerAutoWait = DISABLE;
hadc2.Init.ContinuousConvMode = DISABLE;
hadc2.Init.NbrOfConversion = 1;
hadc2.Init.DiscontinuousConvMode = DISABLE;
hadc2.Init.DMAContinuousRequests = ENABLE;
hadc2.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN;
hadc2.Init.OversamplingMode = DISABLE;
if (HAL_ADC_Init(&hadc2) != HAL_OK)
{
Error_Handler();
}
/** Configure Injected Channel
*/
sConfigInjected.InjectedChannel = ADC_CHANNEL_5;
sConfigInjected.InjectedRank = ADC_INJECTED_RANK_1;
sConfigInjected.InjectedSamplingTime = ADC_SAMPLETIME_6CYCLES_5;
sConfigInjected.InjectedSingleDiff = ADC_SINGLE_ENDED;
sConfigInjected.InjectedOffsetNumber = ADC_OFFSET_NONE;
sConfigInjected.InjectedOffset = 0;
sConfigInjected.InjectedNbrOfConversion = 4;
sConfigInjected.InjectedDiscontinuousConvMode = ENABLE;
sConfigInjected.AutoInjectedConv = DISABLE;
sConfigInjected.QueueInjectedContext = DISABLE;
sConfigInjected.ExternalTrigInjecConv = ADC_EXTERNALTRIGINJEC_HRTIM_TRG10;
sConfigInjected.ExternalTrigInjecConvEdge = ADC_EXTERNALTRIGINJECCONV_EDGE_RISING;
sConfigInjected.InjecOversamplingMode = DISABLE;
if (HAL_ADCEx_InjectedConfigChannel(&hadc2, &sConfigInjected) != HAL_OK)
{
Error_Handler();
}
/** Configure Injected Channel
*/
sConfigInjected.InjectedChannel = ADC_CHANNEL_11;
sConfigInjected.InjectedRank = ADC_INJECTED_RANK_2;
if (HAL_ADCEx_InjectedConfigChannel(&hadc2, &sConfigInjected) != HAL_OK)
{
Error_Handler();
}
/** Configure Injected Channel
*/
sConfigInjected.InjectedChannel = ADC_CHANNEL_3;
sConfigInjected.InjectedRank = ADC_INJECTED_RANK_3;
if (HAL_ADCEx_InjectedConfigChannel(&hadc2, &sConfigInjected) != HAL_OK)
{
Error_Handler();
}
/** Configure Injected Channel
*/
sConfigInjected.InjectedChannel = ADC_CHANNEL_4;
sConfigInjected.InjectedRank = ADC_INJECTED_RANK_4;
if (HAL_ADCEx_InjectedConfigChannel(&hadc2, &sConfigInjected) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN ADC2_Init 2 */
/* Run the ADC calibration in single-ended mode */
HAL_ADCEx_Calibration_Start(&hadc2, ADC_SINGLE_ENDED);
/* Start ADC1 Injected Conversions */
HAL_ADCEx_InjectedStart(&hadc2);
/* USER CODE END ADC2_Init 2 */
}my HRTIM trigger setup
pADCTriggerCfg.UpdateSource = HRTIM_ADCTRIGGERUPDATE_TIMER_B;
pADCTriggerCfg.Trigger = HRTIM_ADCTRIGGEREVENT6810_TIMERB_CMP4;
if (HAL_HRTIM_ADCTriggerConfig(&hhrtim1, HRTIM_ADCTRIGGER_10, &pADCTriggerCfg) != HAL_OK)
{
Error_Handler();
}in the Main
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_DMA_Init();
MX_LPUART1_UART_Init();
MX_HRTIM1_Init();
MX_ADC2_Init();
MX_ADC1_Init();
MX_ADC3_Init();
MX_ADC4_Init();
if (HAL_ADC_Start_DMA(&hadc2, adc_four_ch, 4) != HAL_OK)
{
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, SET);
}
HRTIM1_Start_Output();LED on the Nucleo seems not to light.
Here are the values I can see from the debug:

Anything I am missing?