You need to look at the fault registers (CFSR, and possibly MMFAR and BFSR). CubeIDE has a built-in fault analyzer. Those registers will tell you the PC of the instruction that failed. Also search the forums for fault handler for links to some sample code.
You don't say which CPU you are using. On at least some of the M4 CPUs the bus fault, usage fault and memory manager faults are disabled by default. And when disabled these are automatically escalated to a hard fault.
For HAL check instances/structures are initialized and passed correctly before use by interrupts.
Some CMx are more sensitive that others to alignment.
The faulting code should provide insight into the specific pointers or records causing grief.