воскресенье, 1 декабря 2013 г.

Программирование STM32 F4 Discovery из-под Arch Linux

Пришло время осваивать ARM-микроконтроллеры. Они много мощнее AVR, и при этом даже дешевле. Только их неудобно паять. Впрочем, читатель наверняка это и так знает.

Для изучения этих контроллеров разумно заказать отладочную плату. Цена платы, конечно, побольше, чем цена просто микроконтроллера, но не так велика. Я заказал STM32F4DISCOVERY в замечательном интернет-магазине радиодеталей chip-nn.ru за 680 рублей. Вообще, есть и другие платы в линейке STM Discovery, но эта - самая продвинутая на момент покупки. Более простые модели стоят дешевле, а принципы работы с ними те же.

Я предпочитаю Linux, и вообще свободный софт. У меня стоит Arch Linux. Но, конечно, для других дистрибутивов действия аналогичны.

Итак, начнём.

Установка

Сначала установим из AUR пакеты:
  • aur/arm-none-eabi-gcc - это сборка компилятора для ARM. В данном контексте none означает, что приложение будет работать на голом железе (bare-metal), без операционной системы.
    Устанавливаем:
    yaourt arm-none-eabi-gcc
  • aur/stlink-git - это Open Source приложение для работы с программатором ST-Link, установленном на отладочной плате. Как видно из названия, при установке просто выкачивается актуальная версия с git-репозитория.
    Устанавливаем:
    yaourt stlink-git

    После установки пакета появилось сообщение:
    You may have to reload the usb-storage module.
    To do this use
      modprobe -r usb-storage && modprobe usb-storage

     При выполнении данной команды система сказала, что модуль usb_storage прямо сейчас используется и не может быть выгружен - ну не беда. Перезагружаемся.
Дальше нужно поставить среду разработки Eclipse с плагном cdt. Для этого
pacman -S eclipse eclipse-cdt
Последний нужен для поддержки разработки на C/C++. Ещё нужен плагин для упрощения работы с ARM. Нужно сделать следующее: заходим в Eclipse, выбираем Help->Install New Software. Рядом с полем Work With нажимаем Add, и указываем URL: http://gnuarmeclipse.sourceforge.net/updates . Ставим галку рядом с появившимся плагином, Next, Accept, Finish.
Если что, сайт плагина: http://gnuarmeclipse.livius.net, там может быть дополнительная информация по установке, если что поменяется.

Проверка stlink

Если всё установлено правильно, попробуем считать демо-прошивку, которая изначально записана на МК:
st-flash read STM32F4-Discovery.bin 0x8000000 0x100000
Я получил следующее:
2013-12-01T02:51:35 INFO src/stlink-usb.c: -- exit_dfu_mode
2013-12-01T02:51:35 INFO src/stlink-common.c: Loading device parameters....
2013-12-01T02:51:35 INFO src/stlink-common.c: Device connected is: F4 device, id 0x10016413
2013-12-01T02:51:35 INFO src/stlink-common.c: SRAM size: 0x30000 bytes (192 KiB), Flash: 0x100000 bytes (1024 KiB) in pages of 16384 bytes
И бинарный файл прошивки STM32F4-Discovery.bin.
Если что-то не так, прошивальщик выдаёт ошибки - в первую очередь отключите и подключите снова плату к USB. При этом не стоит использовать USB-хабы или удлиннители: чем ближе к материнке - тем лучше. По крайней мере для проверки.

 Сборка и прошивка тестового проекта

Итак, построим при помощи Eclipse проект для ARM по шаблону. Этот шаблон уже содержит необходимые скрипты компоновщика, а также код для мигания светодиодом. Причём для мигания в примере используется тот вывод микроконтроллера, который подключен на STM32F4DISCOVERY к зеленому диоду. То есть мы сразу увидим результат.
Итак, FIle->New->Project..., затем выбираем C Project. Чтобы сгенерировался пример для нашего stm32f4, на следующем окне выбираем:
Затем четыре раза нажимаем Next, настройки по умолчанию нам подходят. На всякий случай, вот, что было у меня:
Ну и Finish:
Теперь мы можем собрать проект в режиме Debug, то есть просто нажать Build (кнопку с молотком), или Ctrl+B. Исходник должен собраться, если всё установлено правильно. Но прошивать ещё рано: по-умолчанию, бинарный образ генерируется не в том формате, который любит st-flash.

Укажем Eclipse, какой формат выходного файла нам нужен. Для этого переходим в Project -> Properties. В поле Configuration устанавливаем All configurations, чтобы настройки применялись и к Debug, и к Release.
Теперь выбираем С/С++ Build -> Settings. 
Во вкладке Tool Settings выбираем Cross ARM GNU Create Flash Image -> General. Output file format устанавливаем в Raw binary, вот так:
Теперь OK, и собираем проект. В папке проекта в каталоге Debug у нас теперь появился .bin файл. Его уже можно прошить в контроллер:
st-flash write <наш-файл>.bin 0x8000000
В моём случае получилось следующее:
$ st-flash write test-for-blog.bin 0x8000000
2013-12-01T03:11:01 INFO src/stlink-common.c: Loading device parameters....
2013-12-01T03:11:01 INFO src/stlink-common.c: Device connected is: F4 device, id 0x10016413
2013-12-01T03:11:01 INFO src/stlink-common.c: SRAM size: 0x30000 bytes (192 KiB), Flash: 0x100000 bytes (1024 KiB) in pages of 16384 bytes
2013-12-01T03:11:01 INFO src/stlink-common.c: Attempting to write 31136 (0x79a0) bytes to stm32 address: 134217728 (0x8000000)
EraseFlash - Sector:0x0 Size:0x4000
Flash page at addr: 0x08000000 erasedEraseFlash - Sector:0x1 Size:0x4000
Flash page at addr: 0x08004000 erased
2013-12-01T03:11:02 INFO src/stlink-common.c: Finished erasing 2 pages of 16384 (0x4000) bytes
2013-12-01T03:11:02 INFO src/stlink-common.c: Starting Flash write for F2/F4
2013-12-01T03:11:02 INFO src/stlink-common.c: Successfully loaded flash loader in sram
size: 31136
2013-12-01T03:11:02 INFO src/stlink-common.c: Starting verification of write complete
2013-12-01T03:11:03 INFO src/stlink-common.c: Flash written and verified! jolly good!
И зеленый светодиодик радостно заморгал. Если ошибки - пробуем переподключить плату.

Ссылки

В процессе изучения вопроса мне весьма помогли следующие страницы:

1 комментарий:

  1. А на сайте: www.superplayers1.ru можно посмотреть курс по созданию карточной игры

    ОтветитьУдалить