Чего-то я не то написал... Сверяюсь с документацией... Нет, все верно:
Цитата(k000858 @ Dec 12 2014, 11:42)

Раньше пользовался Keil для сборки проектов под STM32, и в нем вершина стека указывалась как _estack = 0x2001FFFF; т.е. конец SRAM
Вам правильно ответили - этот адрес не выровнен на границу слова, значит реально в указатель стека записывалось это число с какой-то коррекцией.
Цитата(k000858 @ Dec 12 2014, 11:42)

Ни так давно перешел на eclipse + ARM плагин, который позволяет создавать проект с готовым скриптом линкера, в котором вершина стека указана как __stack = ORIGIN(RAM) + LENGTH(RAM); = 0x20020000 а это за пределами SRAM
Тоже правильно, и тоже вам правильно написали - при сохранении на стек сначала уменьшается адрес в указателе, а затем происходит сохранение. И сохраняемое число попадает в последние ячейки ОЗУ. Что и требуется.
Цитата(k000858 @ Dec 12 2014, 11:42)

Но во всех примерах от ST вершина стека указывается именно как 0x2001FFFF,
Аналогично, либо это явная ошибка (вероятность чего ничтожно мала), либо это число проходит какую-то коррекцию, прежде чем попасть в соответствующую ячейку таблицы векторов.
Цитата(k000858 @ Dec 12 2014, 11:42)

даже в примерах бутлоадера проверка наличия кода во флэш проверяется с помощью проверки адреса начала стека, записанного в этой области памяти
Значит такой кривой пример. Либо же авторы этих примеров настраивают стек так, что последнее слово ОЗУ просто не используется (что также говорит о качестве этих примеров).