Для изучения этих контроллеров разумно заказать отладочную плату. Цена платы, конечно, побольше, чем цена просто микроконтроллера, но не так велика. Я заказал STM32F4DISCOVERY в замечательном интернет-магазине радиодеталей chip-nn.ru за 680 рублей. Вообще, есть и другие платы в линейке STM Discovery, но эта - самая продвинутая на момент покупки. Более простые модели стоят дешевле, а принципы работы с ними те же.
Я предпочитаю Linux, и вообще свободный софт. У меня стоит Arch Linux. Но, конечно, для других дистрибутивов действия аналогичны.
Итак, начнём.
Установка
- 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, на следующем окне выбираем:
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.