Hard Fault from ADC_IS_CONVERSION_ONGOING_REGULAR macro
Hello, I'm using a STM32L071CB.
Some times my code go to HardFault_Handler.
After many test I seen that the interrupt start from
if (ADC_IS_CONVERSION_ONGOING_REGULAR(hadc) == RESET)
in HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length)
I don't understand why this error. Code generate with CubeMx 4.22 and L0 library are 1.9.0
attached the adc settings
void MX_ADC_Init(void)
{ ADC_ChannelConfTypeDef sConfig;/**Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
*/ hadc.Instance = ADC1; hadc.Init.OversamplingMode = DISABLE; hadc.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV32; hadc.Init.Resolution = ADC_RESOLUTION_12B; hadc.Init.SamplingTime = ADC_SAMPLETIME_39CYCLES_5; hadc.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD; hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc.Init.ContinuousConvMode = ENABLE; hadc.Init.DiscontinuousConvMode = DISABLE; hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc.Init.DMAContinuousRequests = ENABLE; hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV; hadc.Init.Overrun = ADC_OVR_DATA_PRESERVED; hadc.Init.LowPowerAutoWait = DISABLE; hadc.Init.LowPowerFrequencyMode = DISABLE; hadc.Init.LowPowerAutoPowerOff = DISABLE; HAL_ADC_Init(&hadc);/**Configure for the selected ADC regular channel to be converted.
*/ sConfig.Channel = ADC_CHANNEL_9; sConfig.Rank = ADC_RANK_CHANNEL_NUMBER; HAL_ADC_ConfigChannel(&hadc, &sConfig);/**Configure for the selected ADC regular channel to be converted.
*/ sConfig.Channel = ADC_CHANNEL_TEMPSENSOR; HAL_ADC_ConfigChannel(&hadc, &sConfig);/**Configure for the selected ADC regular channel to be converted.
*/ sConfig.Channel = ADC_CHANNEL_VREFINT; HAL_ADC_ConfigChannel(&hadc, &sConfig);}
void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
{GPIO_InitTypeDef GPIO_InitStruct;
if(adcHandle->Instance==ADC1) { /* USER CODE BEGIN ADC1_MspInit 0 *//* USER CODE END ADC1_MspInit 0 */
/* ADC1 clock enable */ __HAL_RCC_ADC1_CLK_ENABLE(); /**ADC GPIO Configuration PB1 ------> ADC_IN9 */ GPIO_InitStruct.Pin = GPIO_PIN_1; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);/* ADC1 DMA Init */
/* ADC Init */ hdma_adc.Instance = DMA1_Channel1; hdma_adc.Init.Request = DMA_REQUEST_0; hdma_adc.Init.Direction = DMA_PERIPH_TO_MEMORY; hdma_adc.Init.PeriphInc = DMA_PINC_DISABLE; hdma_adc.Init.MemInc = DMA_MINC_ENABLE; hdma_adc.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; hdma_adc.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; hdma_adc.Init.Mode = DMA_CIRCULAR; hdma_adc.Init.Priority = DMA_PRIORITY_LOW; HAL_DMA_Init(&hdma_adc); __HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc);/* ADC1 interrupt Init */
HAL_NVIC_SetPriority(ADC1_COMP_IRQn, 0, 0); HAL_NVIC_EnableIRQ(ADC1_COMP_IRQn); /* USER CODE BEGIN ADC1_MspInit 1 *//* USER CODE END ADC1_MspInit 1 */
}}thank you for help
#dma-adc #adc_is_conversion_ongoing_regular #hardfault_handler