Когда микроконтроллер получает питание или выходит из аппаратного сброса, выполнение программы начинается задолго до входа в main(). Сначала ядро Cortex-M3 загружает начальный указатель стека, затем берёт адрес обработчика сброса из векторной таблицы и только после этого запускает startup-код.
В минимальном bare-metal проекте без HAL и без CubeMX вся эта цепочка видна почти по шагам. Именно поэтому такой проект хорошо подходит для первого глубокого знакомства со STM32: становится понятно, что происходит в памяти, как работает линкер, зачем нужен startup и почему обычный C-код не может стартовать “сам по себе”.


![Тайна уникального телефона, который разработали в России — и он погиб в забвении… [Длиннопост, про железо] - 1 Тайна уникального телефона, который разработали в России — и он погиб в забвении… [Длиннопост, про железо] - 1](https://www.pvsm.ru/images/2026/01/31/taina-unikalnogo-telefona-kotoryi-razrabotali-v-rossii-i-on-pogib-v-zabvenii-dlinnopost-pro-jelezo.png)

