Да особо шурупить не нужно, ты же не собираешься писать код на
ассемблере. Перейди в ассемблер, и выясни после какой команды происходит Hard Fault. Ставь точки останова не в С-коде, а в ассемблерном коде. После того как найдёшь ту инструкцию, после которой происходит Hard Fault, будешь дальше разбираться. Ну или тут задашь более предметный вопрос