Цитата(Alexey Belyaev @ Jan 9 2015, 12:41)

А как поймать?
Яж написал, что не хочу ресет, ибо придётся деражать кнопочку. Хочется перейти в бутлоадер, да так, чтобы дать ему понять, что это произошло не по ресету, а именно его вызвали "на сцену".
1.Я в JLink/IAR ставлю брейкпоинт на HardFaultHandler.
2. Легче использовать ресет, но передавать флаг.
Флаг может быть разный. У меня есть внешняя EEPROM, там флаг.
Работает так:
На ресет (в том числе и ресет/принудительный переход в бутлоадер) или питание:
а) проверяется состояние кнопки, если она нажата, стоим в бутлоадере
б) если она не нажата, читаем флаг, если он 0xFF, значит программы нет или она недействительна (или был принудительный переход в бутлоадер),
стоим в бутлоадере
в) если там 0хFE, значит мы записали правильную программу, и прыгаем туда
д) если мы все еще в бутлоадере, ждем команды. В гланую программу прыгаем по определенной команде
В программе:
а) делаем какуюто инициализацию
б) проверяем наш флажок, если там 0xFF, пишем туда 0xFE, чтобы бутлоадер нас загружал
в) если поступила команда в бутлоадер, пишем в флажок 0хFF, делаем ресет
В качестве флажка можно использовать:
а) внешнюю EEPROM

внутренюю flash
c) battery backed RAM (RTC)
d) обычную RAM память. Только надо одну ячейку в определенном для бутлоадера и программе месте назначить __no_init в IAR и проверять ее на каой нибудь ключ, типа
0х3FDEADEB..
Верить нельзя никому, даже себе. Мне - можно.