Июн 152012
 

В микроконтроллерах STM32 имеется возможность программирования флэш-памяти с использованием последовательного интерфейса. Это реализуется с помощью одного или нескольких встроенных USART, CAN или USB в зависимости от типа микроконтроллера. STM32 имеют в пространстве памяти специальную область – системную память (system memory), в которой и хранится код встроенного загрузчика. Bootloader записывается в системную память еще на производстве и любой “чистый” микроконтроллер можно запрограммировать с помощью простейшего и дешевого программатора, либо обновить ПО в готовом изделии.

Рассмотрим процесс на примере программирования микроконтроллера STM32F103 с использованием интерфейса USART. Чтобы активировать встроенный загрузчик, после аппаратного сброса необходимо войти в системную память.

Конфигурация Bootloader. Для выбора области памяти, с которой начнется работа после сброса, используются внешние выводы микроконтроллера BOOT0 и BOOT1. Установкой соответствующих уровней напряжения на этих выводах и задается режим входа во встроенный bootloader.

Boot Pin Configuration

Для входа во встроенный загрузчик, надо чтобы во время и после аппаратного сброса микроконтроллера на выводе BOOT0 был высокий уровень, а на выводе BOOT1 – низкий.

Интерфейс. COM-порт компьютера в данном случае виртуальный, реализован на микросхеме FT232RL. Вот общая схема включения

Bootloader

Микросхема FT232RL имеет встроенный стабилизатор на 3,3В. От него и запитан микроконтроллер в этой схеме. Выводы BOOT0 и BOOT1 соединяются с VDD и VSS через внешние резисторы. В этих цепях еще дополнительно установлены съемные перемычки – джамперы, на схеме я их не указал. Для создания в системе виртуального COM-порта потребуется установка необходимых драйверов, которые нужно скачать с сайта ftdichip.com.  В разделе Drivers их 2 вида:

  • VCP – управление виртуальным COM-портом
  • D2XX – предоставляет более расширенные функции для работы с USB

В данном случае достаточно драйвера VCP (virtual com port). После подключения микросхемы FT232RL к порту USB устанавливаем драйвер для нового обнаруженного устройства. При правильном подключении микросхемы и установке драйвера в системе появится новый виртуальный COM-порт.

Virtual com port

Софт. ST предоставляет готовый инструмент для программирования STM32 через последовательный интерфейс. Это программа называется Flash Loader Demonstrator.

После подключения программатора к компьютеру и запуска программы Flash Loader Demonstrator будет предложено выбрать com-порт и задать параметры связи.

FLD_Select com port

После выбора порта и задания его настроек жмем Next и в следующем окне должны увидеть размер памяти программ подключенного микроконтроллера, что подтверждает корректное соединение через USART.

FLD_connect mc

Снова жмем Next, далее список “страниц” флэш-памяти с адресами, размерами и параметрами разрешенного доступа Read/Write.

FLD_Select device

На следующей странице необходимо выбрать файл для загрузки, а также дать команду на полное стирание памяти перед прошивкой. Файл может быть не обязательно в готовом двоичном коде (bin), но и в формате hex.

FLD_Select file

Жмем Next и наблюдаем процесс программирования

FLD_download mc

FLD_download mc complete

Вот и все, теперь можно запускать программу на выполнение. Для этого необходимо выйти из режима Bootloader, установив на выводах BOOT0, BOOT1 уровни, необходимые для старта программы с начального адреса флэш-памяти (BOOT0 = 0, BOOT1 – любой уровень)и выполнить сброс микроконтроллера.

Другие статьи:

  9 Responses to “STM32. Встроенный bootloader. Прошивка через Flash Loader Demonstrator.”

  1. Очень жалко, свежих статей уже почти месяц нет!

  2. А при таком стирании сам БутЛоадер тоде стирается или он не перетирается никогда?
    Я купил такой котроллер и нажал кнопку Erase Chip — теперь Лоадера нету что-ли?

    • Нет, бутлоадер не стирается при стирании флэш-памяти, поскольку находиться в специальной системной области памяти и защищен от операций записи и стирания.

  3. Не совсем понятно зачем резисторы 4к7 на бут1 и бут0.
    Исходя из чего надо рассчитывать их номинал?

  4. Выводы boot0, boot1 можно подключить и без резисторов к +Vпит и «земле» при программировании через бутлодер.
    Это просто дело привычки — подключение через резисторы позволяет задать режим работы, который используется «по умолчанию», а при желании изменять его, подавая на эти входы другие уровни, например, установкой перемычек, или внешними сигналами (при подключении программатора, например). У меня эта схема срисована с рабочей платы, там уровни на этих входах устанавливаются перемычками. Точно так же сделано и на Discovery, там на этих входах подтягивающие резисторы, при включении питания задан режим работы с флэш-памятью. И есть площадки под запайку перемычек, чтобы перейти в режим бутлодера, изменив уровни на входах.
    Номиналы не особо критичны, сотни Ом или десятки килоОм, больше сопротивление — меньше потери мощности.

  5. А после прошивки через bootloader не возникнет проблем с отладкой в IDE (Keil)?