Hi,
It is quite difficult to answer your question straight-forwaedly. As normal cases, the hard fault always caused by usage faults, bus faults, and memory management faults if their handler cannot be excuted. In addition, it can also be caused by a bus fault during vector fetch (reading of a vector table during exception handling). In the NVIC there is a hard fault status register that can be used to determine whether the fault was caused by a vector fetch. If not, the hard fault handler will need to check the other fault status registers to determine the cause of the hard fault.