STM32F030. Заливка кода

Заливать код в камень STM32 не просто… а чрезвычайно просто.

Для этого не нужны никакие программаторы. Для заливки достаточно иметь комп с последовательным портом (RS232) или c USB-портом и шнурок к драйвером (конвертером, переходником) в стандарт UART.

Моя отладочная плата получает питание (+5В) от компа, а белые проводки подключены к разъему RS232. Ничего интересного.

Для заливки кода нам еще понадобится компьютерная прога, которая возьмет файл с нашим кодом и посредством RS232- или USB-канала зальет его в микроконтроллер.

Таких программ на просторах интернета достаточно. Протокол заливки открыт и описан в документе AN3155 (USART protocol used in the STM32 bootloader), который хранится в файле CD00264342.pdf.

Я предлагаю воспользоваться прогой stm32flash.

Установка этой проги включает в себя полный цикл — клонирование, сборка, установка. И сейчас мы это все проделаем.

Можно не создавать специальный директорий для клонирования. Находясь в своем рабочем директории (например, $HOME/work) даем команду клонирования проекта:

$ git clone https://git.gitorious.org/stm32flash/stm32flash.git

Note: Система контроля версий Git у вас уже должна быть установлена.

Через несколько секунд в директории появится поддиректорий stm32flash, заходим в него. В нем десятка два-три разных файлов.

work-stm32flash

Никаких файлов типа README нет, но есть файл Makefile. Значит всё традиционно и до безобразия просто. Предварительно посмотрев на содержимое этого файла даем команду на сборку и последующую установку:

$ make && sudo make install

В данный момент я сижу под Убунтой, пэтому мне нужно набирать команду sudo, чтобы процесс установки прошел надлежащим образом.

Замечу, что происходит не просто процесс установки программы как таковой, но еще устанавливается файл справки. А это значит, что будет работать такая штука как:

$ man stm32flash

Собственно, по установке — это всё! Далее нам нужно залить код (который мы создали в разделе «Светодиодоморгание») в микроконтроллер. Для этого переходим в соответствующий директорий.

Но прежде чем заливать код, давайте сначала убедимся, что микроконтрллер отзывается, и его прога-загрузчик видит. У меня микроконтроллер подключен к последовательному порту, поэтому я его указываю как /dev/ttyS0:

stm32f030f4-0.2

Но может оказаться так, что на компе нет последовательного порта, а вместо него куча USB-портов, через которые он и будет проброшен виртуально. Тогда, имя порта должно выглядеть как-то так — /dev/ttyUSB0.

Есть еще одна небольшая проблемка. Вообще, при правильном раскладе ее быть не должно, но я этот момент как-то упустил из виду. Сейчас вы поймете о чем речь.

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

Этот синхробайт имеет значение 0x7F, а протокол передачи несколько отличатся от традиционного 8N1 (8 бит, контроль четности выключен, один «стоповый» бит). Протокол передачи (этого синхробайта и вообще всех следующих) — 8E1 (8 бит, контроль четности включен на значение EVEN, один «стоповый» бит).

По этому синхробайту загрузчик (в микроконтроллере) определяет скорость передачи. Скорость передачи может находится в пределах от 1200 до 115200 Бод. Загрузчик сам подстроиться под скорость хоста (компьютера).

Такая настройка (или точнее сказать — установка параметров связи между загрузчиком и хостом) происходит только один раз после перехода микроконтроллера в режим загрузки.

Так вот, проблема в том, что программа stm32flash каждую сессию работы с микроконтроллером начинает с его сброса и повторного ввода его в режим загрузки. Прога сама должна перезагружать микроконтроллер посредством сигнала RST или DTR. Но у меня ни тот, ни другой сигналы не подключены к микроконтроллеру. Поэтому у меня стоит проблемка каждый раз перед запуском программы пальцем жать на кнопку RESET.

Это не фатально, но об этом нужно помнить, если у вас комп не дергает у микроконтроллера RESET.

В общем, так или иначе, после выполнения следующих команд:

$ stm32flash -o /dev/ttyS0 # Инициализируем соединение. Стираем флешь-память.
$ stm32flash -c -w blinky.bin -v -g 0x0 /dev/ttyS0 # Заливаем и запускаем код. Ключ -c запрещает повторную инициализацию

светодиод заморгал.

А это значит, мы что-то начали понимать в этой технологии. Ура!

Реклама

2 responses to “STM32F030. Заливка кода

  1. Юзаю DFU USB загрузку. Вообще ничего не нужно. Только шнур, и загружается без эмуляции последовательного порта. Очень быстро.

    • Все правильно.

      Для STM32, у которых на борту имеется USB, это самый мало затратный вариант. Действительно, на уровне железа нужно только подключить МК к USB-порту компа. USB предоставит и сигналы, и питание. Ну, разумеется, комповая часть загрузчика тоже должна быть установлена.

      ST-Microelectronics выпускает также микроконтроллеры STM32, которые не имеют в своем составе USB-периферию. Но все (я думаю, что все) микроконтроллеры STM32 имеют в своем составе USART. Поэтому, если по каким-либо причинам USB-соединение не возможно, то зааливать код можно через USART.

      Но, с другой стороны, y современных компов нет RS232, но есть USB. В этом случае для программирования младших моделй STM32 (не имеющих USB) приходится прибегать к виртуальному последовательному порту.

      Для виртуального последовательного порта необходим кабель-переходник USART-USB. Кабель можно купить у китайцев (стоимость от 60-80 рублей) или изготовить самостоятельно (общая стоимость компонент от 120-150 рублей).

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

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s