Question
Rare UNALIGNED hard faults on STM32H753ZI
I have project on STM32H753ZI and I am using ADC in DMA mode. Every few hours I get Usage Fault Unaligned access hard fault. Fault is invoked in my ADC_ConvCptlCallback in which depending on ADC value I decide about GPO state
Stack during HardFault:
HardFault_Handler() at stm32h7xx_it.c:91 0x80040ca
<signal handler called>() at 0xfffffff1
adc_adapter_handle_adc_sample() at communication-service.c:59 0x8084c34
HAL_ADC_ConvCpltCallback() at main.c:364 0x80024a8
ADC_DMAConvCplt() at stm32h7xx_hal_adc.c:3,865 0x8006482
HAL_DMA_IRQHandler() at stm32h7xx_hal_dma.c:1,384 0x8008eb4
DMA1_Stream0_IRQHandler() at stm32h7xx_it.c:189 0x800410a
<signal handler called>() at 0xfffffffd
prvCheckTasksWaitingTermination() at tasks.c:3,650 0x801611c
prvIdleTask() at tasks.c:3,409 0x801603c
Disassembly code where execution stops:
08084c1c: b.n 0x8084c34 <adc_adapter_handle_adc_sample+148>
54 } else if (adc_adapter.adc_current < adc_adapter.adc_low) {
08084c1e: ldr r3, [pc, #24] ; (0x8084c38 <adc_adapter_handle_adc_sample+152>)
08084c20: ldr r2, [r3, #0]
08084c22: ldr r3, [pc, #20] ; (0x8084c38 <adc_adapter_handle_adc_sample+152>)
08084c24: ldr r3, [r3, #24]
08084c26: cmp r2, r3
08084c28: bcs.n 0x8084c34 <adc_adapter_handle_adc_sample+148>
55 HAL_GPIO_WritePin(BUS_MK_GPIO_Port, BUS_MK_Pin, GPIO_PIN_SET);
08084c2a: movs r2, #1
08084c2c: movs r1, #16
08084c2e: ldr r0, [pc, #12] ; (0x8084c3c <adc_adapter_handle_adc_sample+156>)
08084c30: bl 0x800aacc <HAL_GPIO_WritePin>
59 }
08084c34: nop
08084c36: pop {r7, pc}
08084c38: ldrsb r4, [r6, r1]
08084c3a: movs r4, #6
08084c3c: lsrs r0, r0, #16
08084c3e: ldr r2, [r0, r0]
And register values:
General Registers General Purpose and FPU Register Group r0 603991516 r1 604396596 r2 768 r3 0 r4 -1515870811 r5 -1515870811 r6 -1515870811 r7 604503928 r8 -1515870811 r9 -1515870811 r10 -1515870811 r11 -1515870811 r12 -1515870811 sp 0x2407ff78 lr 134227113 pc 0x8084c34 <adc_adapter_handle_adc_sample+148> xpsr 1610612763 d0 0 d1 0 d2 0 d3 10 d4 0.50000401634281388 d5 10 d6 1.7976931348623157e+308 d7 0 d8 0 d9 0 d10 0 d11 0 d12 0 d13 0 d14 0 d15 -nan(0xfffff00000000) fpscr 1610612752 msp 0x2407ff78 psp 0x240042f0 <Idle_Stack.2+1976>
This fault occurs randomly in intervals of few hours.
CCR->UNALIGN_TRP is set to 0.
I've read in errata that write-trough memory can cause some issues. Default memory type for internal flash of this MCU is write-through. Is it possible that the issue is related to this?
Has anyone idea what can cause such issue? I will be greatfull for any hint.
