QUOTE (Vladimir_T @ Jun 29 2018, 15:47)

В отладчике ловлю-ловлю вижу, что LR = 0xFFFFFFF9, почему так?
Тут есть два решения: простое и быстрое.
Простое: наставить в startup-коде точек останова. После вылета перенести те точки, до которых не дошли и те, которые прошли, в промежуток между последней отработавшей точкой и первой не отработавшей. Так, постепенно, найдете команду, на которой происходит вылет. Дальше разбираться, почему у этой команды оказались такие параметры, которые вызывают вылет.
Быстрое: делаете обработчик HardFault с таким кодом:
CODE
{
volatile int i = 0;
while(i==0)
;
}
Попав в этот обработчик, устанавливаем отладчиком i = 1 и выходим из обработчика по шагам в дизассемблированном коде. Сразу после выхода попадем на следующую после проблемной команду. И снова думаем, что же процессору на этой команде не понравилось.