Пришло время осваивать 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.
При выполнении данной команды система сказала, что модуль usb_storage прямо сейчас используется и не может быть выгружен - ну не беда. Перезагружаемся.
To do this use
modprobe -r usb-storage && modprobe usb-storage
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И бинарный файл прошивки STM32F4-Discovery.bin.
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
Если что-то не так, прошивальщик выдаёт ошибки - в первую очередь отключите и подключите снова плату к 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!
Ссылки
В процессе изучения вопроса мне весьма помогли следующие страницы:- http://tjakubowski.wordpress.com/2012/12/04/programming-stm32f4-discovery-board-under-linux/ - я так понял, немного устаревший вариант. Сейчас нужно меньше ручной настройки, чтобы первый раз помигать светодиодом, используя Eclipse.
- http://vedder.se/2012/07/get-started-with-stm32f4-on-ubuntu-linux/ - есть пример без Eclipse. Simply make it ;)
- http://habrahabr.ru/post/191058/ - серия статей про программирование под ARM.
А на сайте: www.superplayers1.ru можно посмотреть курс по созданию карточной игры
ОтветитьУдалить