Наш магазин на eBay Наш магазин на AliExpress Наш канал в telegram

Программирование ARM-контроллеров STM32 на ядре Cortex-M3. Часть 5. Как залить прошивку в контроллер

Ну, вот мы и дошли до одного из самых интересных этапов, — как же залить в контроллер готовую прошивку и оживить наконец нашу железяку (а также как считать прошивку обратно или защитить её от чтения / перезаписи).

Вообще-то прошивать контроллеры STM32 можно по-разному, но мы рассмотрим самый простой вариант прошивки — через последовательный интерфейс с помощью фирменной утилиты Flash Loader Demonstrator. Эта утилита совершенно бесплатна и её можно скачать как с официального, так и с нашего сайта.

Как мы ранее уже говорили, — в системной области памяти контроллера зашит bootloader. Именно он и позволяет записать прошивку во flash-память через последовательный интерфейс.

Детально bootloader описан в документе AN2606 (CD00167594.pdf), а используемый им протокол — в документе AN3155 (CD00264342.pdf). Это для тех, кто хочет исчерпывающей информации, а мы рассмотрим процесс прошивки через bootloader вкратце.

Для начала вам нужно скачать и установить себе на компьютер утилиту Flash Loader Demonstrator.

Далее, нужно соединить контроллер с компьютером через UART1. Мой подопытный STM32F103C8T6 имеет 48-выводный корпус, в котором UART1 выведен на ноги 30 (Tx) и 31 (Rx).

Обратите внимание, что в контроллере используется именно UART (причём с уровнями 0/+3,3В), а не RS-232, то есть соединять напрямую выводы контроллера и com-порт компьютера нельзя. Я нашёл выход из этой ситуации в использовании USB-to-COM преобразователя RH-0002 на микросхеме cp2102. Помимо того, что этот преобразователь может использоваться как USB-to-UART с уровнями 0/+3,3 В (его можно разделить на две отдельных части: USB-to-UART и UART-to-RS232), он также позволяет запитать контроллер напряжением 3,3 Вольта (то есть отпадает необходимость во внешнем источнике питания). Вот здесь описано, как собрать преобразователь самостоятельно

Область загрузки STM32 в зависимости от сочетания уровней на ногах BOOT0, BOOT1

Итак, ногу Tx контроллера нужно соединить с ногой Rx преобразователя, а ногу Rx контроллера — с ногой Tx преобразователя. Кроме этого, контроллер нужно запитать и обеспечить нужные уровни на ногах BOOT0 (pin 44), BOOT1 (pin 20). Для запуска bootloadera, который расположен в system memory, ногу BOOT1 нужно подтянуть к «земле», а BOOT0 — к «питанию» (табличка справа).

Подтяжку для BOOT0, BOOT1 лучше делать не жёсткую, а джамперами, чтобы можно было легко выбирать режимы загрузки (например, переключившись после заливки проги в режим загрузки из flash, можно будет эту прогу сразу и потестить).

Схема подключения показана ниже.

Схема подключения STM32F103C8 к USB-to-COM преобразователю RH-0002

Дальше всё просто. Запускаем Flash Loader Demonstrator. Откроется страничка, на которой нужно выбрать com-порт и скорость обмена.

Чётность и количество бит данных уже настроены как надо, скорость можно менять — контроллер в процессе инициализации обмена настраивается на выбранную скорость автоматически, com-порт нужно выбрать тот, который создался при подключении USB-to-COM преобразователя к компьютеру (наш преобразователь создаёт при подключении виртуальный com-порт, полностью имитирующий настоящий аппаратный). После того, как всё настроили — жмём «Next».

Начальная страница Flash Loader Demonstrator

О том, что всё нормально и соединиться с контроллером удалось, нам сообщит зелёный сигнал светофора на следующей страничке. Если связь не установится — на эту страничку нас вообще не пустят, сообщив, что контроллер не отвечает.

При установлении связи программа автоматически определит сколько у контроллера flash-памяти и защищена ли эта память от чтения. Нажав кнопку «Remove protection» защиту можно снять, но при этом содержимое флеша будет стёрто (предыдущая записанная туда прошивка уничтожится). Жмём «Next».

Страница Flash Loader Demonstrator

В следующем окне нам предлагают выбрать тип программируемого камня (хотя непонятно зачем, — он и так автоматически определяется), а также показывают для нашего камня PID, карту flash-памяти, и версию bootloader-а. Просто жмём «Next».

Страница Flash Loader Demonstrator

В следующем окне нужно выбрать, что мы собственно хотим с нашим контроллером делать. Тут возможны следующие варианты: Erase (стереть), Download to device (загрузить в контроллер прошивку), Upload from device (считать прошивку с контроллера), Enable/Disable Flash protection (включить/выключить защиту flash-памяти), Edit option bytes (изменить байты опций).

Соответственно:

  • Если мы хотим залить прошивку — выбираем Download to device, потом жмём на квадрат с тремя точками и выбираем в проводнике файл с прошивкой, которую надо залить, после чего опять жмём «Next».
  • Если мы выберем считывание прошивки, то нажав на квадрат с тремя точками напротив пункта Upload from device нужно указать путь к файлу, в который вы хотите сохранить считанную прошивку (если файл не существует, — вас спросят хотите ли вы его создать).
  • Если же нам нужно защитить прошивку от чтения или перезаписи или, наоборот, отменить такую защиту, то ставим галочку напротив Enable/Disable Flash protection и ниже, в выпадающих меню, выбираем, что же именно нужно сделать.
  • Если нам нужна более «тонкая настройка» контроллера — выбираем пункт Edit option bytes.

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

Ну да ладно, мы немного отвлеклись. Итак, допустим мы выбрали заливку прошивки в контроллер и нажали «Next».

Страница Flash Loader Demonstrator

На следующей странице внизу появится прогресс-бар, в котором будет показан ход выполнения процедуры загрузки. После того, как вся прошивка будет загружена в контроллер, этот прогресс-бар станет зелёным и в нём белыми буквами будет написано: «Download operation finished successfully» (операция загрузки успешно завершена). После этого, можно нажать кнопку «Close» и закрыть Flash Loader Demonstrator

Страница Flash Loader Demonstrator

Всё, теперь чтобы залитая программа начала выполняться нам останется только настроить контроллер на загрузку из flash (BOOT0 = 0, BOOT1 — любой уровень) и перезагрузить его.

P.S. Если вы работаете в Keil uVision, то можете прямо в него прописать путь к программе-загрузчику. Для этого нужно выбрать в меню пункт «Flash->Configure Flash Tools…», далее в открывшемся окне на вкладке «Utilities» выбрать пункт «Use External Tool for Flash Programming» и в строке «Command» указать полный путь к утилите «Flash Loader Demonstrator» (тыкаем на три точки справа от строки, в открывшемся проводнике находим и выбираем нужную программу). Всё, теперь прошивку можно заливать в контроллер прямо из среды Keil uVision, выбрав в меню пункт «Flash->Download» (при этом будет автоматически запускаться Flash Loader Demonstrator).

  1. Часть 1. Установка MDK, создание проекта, основы Keil uVision
  2. Часть 2. Команды и директивы ассемблера, структура и синтаксис программы. Первая программа для STM32
  3. Часть 3. Карта памяти контроллеров STM32, методы работы с памятью
  4. Часть 4. Регистры, старт и режимы работы контроллеров STM32
  5. Часть 5. Как залить прошивку в контроллер
  6. Часть 6. Настройка системы тактирования
  7. Часть 7. Работа с портами ввода-вывода
  8. Часть 8. Процедуры на ассемблере для STM32
  9. Часть 9. Система прерываний
  10. Часть 10. CMSIS, использование стандартных библиотек и функций
  11. Часть 11. Подключение и использование драйверов из пакета StdPeriph
  12. Часть 12. Работа с модулями USART и UART.
  13. Часть 13. Работа с модулями ADC
  14. Часть 14. Использование DMA
  15. Часть 15. Таймеры. Глава 1 — Введение. Простейшие таймеры
  16. Часть 15. Таймеры. Глава 2 — Таймеры общего назначения TIM9 — TIM14
  17. Часть 15. Таймеры. Глава 3 — Таймеры общего назначения TIM2 — TIM5
  18. Часть 15. Таймеры. Глава 4 — Продвинутые таймеры TIM1, TIM8
  19. Часть 16. Создание устройства USB HID в Keil uVision при помощи библиотечного компонента USB
  20. Приложение 1. Набор инструкций THUMB-2 и особенности их использования
  21. Приложение 2. Таблица векторов прерываний для семейств STM32F101, STM32F102, STM32F103
  22. Приложение 3. Драйвера и функции библиотеки StdPeriph

Добавить комментарий