Задать вопрос
@johanngorban
Embedded-разработчик

Почему прошивка для STM32F103 не запускается после перехода с Keil на Cmake?

Возникла проблема при переходе сборки с Keil на Cmake на STM32F103. Самописный бутлоадер принимает прошивку по xmodem и сохраняет ее по адресу 0x08040000, затем по команде update копирует данные в 0x08020000, ищет в прошивке строку вида "ver:x.y.z", выводит версию, настраивает msp, vtor и прыгает на reset_handler приложения по команде gop.

Если использовать бинарник, собранный в Keil, все работает супер - версия определяется корректно и приложение запускается. На Cmake (используется arm-none-eabi) elf и bin собираются без ошибок, таблица векторов действительно лежит по адресу 0x08020000, строка "ver:1.0.0" присутствует в бинарнике, но после загрузки через xmodem, выполнения update и gop бутлоадер выводит версию 0.0.0, а запуск приложения приводит к зависанию.

Я просмотрел реальное содержимое флеша по адресу 0x08020000. Первые слова не совпадают с теми, которые должны быть в elf. Например, адрес reset_handler в памяти получается 0x08020fd1, хотя в elf секция .text начинается с 0x080201e8. Похоже, что во флеш записываются не те данные, но сама передача xmodem проходит нормально.

Какие причины могут приводить к тому, что во флеш записывается другой набор данных, включая неправильный адрес reset_handler, несмотря на то, что elf/bin выглядят корректно?

Код бутлоадера: https://github.com/johanngorban/bootloader
  • Вопрос задан
  • 162 просмотра
Подписаться 1 Средний 3 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    Разработчик на C++: Профессия + специализация + нейросети
    12 месяцев
    Далее
  • Skillbox
    Профессия Разработчик С++
 с нуля + ИИ
    7 месяцев
    Далее
  • GB (GeekBrains)
    Профессия Разработчик на C++ с нуля
    7 месяцев
    Далее
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы