2025-10-07 3:01 AM
I'm using ADC with DMA in a large project, and faced some very strange problem:
If I'm using DMA2 Channel 6 - ADC works correctly
If I'm using DMA2 Channel 1 - the SW end up in Hard Fault
The configuration is default.
This is how I start the conversation
HAL_ADCEx_Calibration_Start(&hadc1, ADC_SINGLE_ENDED);
// Start the ADC in DMA mode
HAL_ADC_Start_DMA(&hadc1, (uint32_t*) g_ADC_values, ADC_BUFFER_LENGTH);
2025-10-07 6:55 AM
What is the stack trace when the hard fault happens? What code is causing it to hard fault?
2025-10-07 8:55 AM
The random code, it depends when ADC triggers the DMA
2025-10-07 10:29 AM
I can't make sense of this answer.
Using DMA doesn't cause a hard fault in itself. It's possible the DMA is misconfigured, or trying to write somewhere it cannot. Look for the reason it's hard faulting and go from there.
2025-10-07 12:26 PM
Try start with show where and how is declared
g_ADC_values
and maybe after calib start is good practice wait for some end...
2025-10-08 4:07 AM
Hello @AChas.1 ;
I recommend you to look at How to debug a HardFault on an Arm® Cortex®-M STM32 - STMicroelectronics Community article may help you to debug faults on Arm Cortex®-M based STM32 devices.
I hope this help you.
Thank you.
Kaouthar
To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.