Just another linux+STM32F4 toolchain

Примерно полгода назад я пытался заставить работать в Ubuntu связку gcc + eclipse. Не осилил, умыл руки и пошел дальше работать в Keil. Однако Новый год, новый ноутбук взамен разбитого со свежим Linux Mint — заставили меня вспомнить былое, запастись терпением и вбить в гугл заветную фразу «STM32F4 linux developing». Спустя примерно 6 часов неудачных сборок, моя отладочная плата весело мигает светодиодом. Как оно было — читайте под катом.

Работать будем с отладочной платой STM32F429i-disco, которая совсем недавно досталась мне в качестве презента на последнем Embedded meetup'e, который проходил в Питере.

STM32F429i-disco

Сначала стоит установить компилятор arm-none-eabi-gcc. Сделать это можно из PPA:
$ sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded
$ sudo apt-get update
$ sudo apt-get install gcc-arm-none-eabi

Здесь мы добавляем новый репозитарий, обновляем список пакетов и устанавливаем собственно пакет. Тут нас поджидает первая проблема: у меня последний дистрибьютив, для которого нет сборки в PPA. Ааргх.

Лезем с правами рута руками в /etc/apt/sources.list.d/terry_guo-gcc-arm-embedded-saucy.list и меняем saucy main на raring main везде. После чего повторяем
$ sudo apt-get update
$ sudo apt-get install gcc-arm-none-eabi


Теперь можно скачать тестовый проект (прикладываю к статье). Распаковываем, заходим в косоли в папку и пишем make:
$ unzip STM32F4_Sample.zip
$ cd STM32F4_Sample
$ make

Если все собралось и компилятор написал что-то типа …
text	   data	    bss	    dec	    hex	filename
  47020	   2280	   1208	  50508	   c54c	build/stm32f4_sample.elf

… мои поздравления!

Теперь ставим st-link:
$ git clone git://github.com/texane/stlink.git
$ cd stlink
$ ./autogen.sh
$ ./configure
$ make

Если stlink собрался, переходим к следующему этапу. При возникновении ошибок могу только пожелать удачи.

Копируем файлы stlink в /opt, так как авторы почему-то не включили make install в пакет:
$ sudo mkdir /opt/stlink
$ cd /opt/stlink
$ sudo cp ~/some_directory/stlink/st-flash .
$ sudo cp ~/some_directory/stlink/st-util .
$ echo "PATH=$PATH:/opt/stlink" >> ~/.bashrc
$ source ~/.bashrc

Я надеюсь, что вы будете внимательны с путями в строчках с «cp».

И последний штришок:
sudo cp ~/some_directory/stlink/49-stlinkv2.rules /etc/udev/rules.d
sudo udevadm control --reload-rules

Опять же, проверяйте пути в случае ошибок копирования.

Теперь идем в папку с проектом, который недавно скомпилили, подключаем отладку и шьем:
$ st-flash write build/stm32f4_sample.bin 0x08000000
/*... */
... INFO src/stlink-common.c: Flash written and verified! jolly good!

Это и означает, что задача выполнена!

Да, кстати в примере проекта достаточно много всякого разного: ЦАП и UART с printf, еще и проверка работы FPU. Для совсем простого мигания светодиодом (PG13 на моей отладке) пример проекта есть во вложениях с интуитивно понятным названием.

UPD: Для STM32F10x девайсов есть репозитарий в git: Torrentula
Ставить и пробовать вот так:
$ git clone git://github.com/Torrentula/STM32F1-workarea.git
$ cd STM32F1-workarea
$ make
$ arm-none-eabi-objcopy -O binary main.elf firmware.bin 

Последнюю строчку лучше добавить в make, в секцию executable:
$(EXECUTABLE): $(SRC) $(STARTUP)
	$(CC) $(CFLAGS) $^ -lm -lc -lnosys -o $@
	$(CP) -O binary $(EXECUTABLE).elf $(EXECUTABLE).bin
  • +4
  • 09 января 2014, 04:49
  • anper
  • 3

Комментарии (18)

RSS свернуть / развернуть
Одну вещь я не понял: зачем было ставить два тулчейна — один из ppa:terry.guo/gcc-arm-embedded, а второй собирать руками.
+1
  • avatar
  • evsi
  • 09 января 2014, 08:00
да, вчера был неудачный день. Убрал.
0
Перед новым годом выдался свободный месячишко, решил тоже озадачится arm от stm. Сначала сам хотел собрать все из исходников, но судя по всему из обычных исходников это сделать невозможно (без специальных патчей). Попробовал бинарные сборки. Оказалось, что тулчейн от mentor дает более компактный код.
0
Есть crossdev в gentoo, есть buildroot и ещё чего-то было. А руками собирать, те же самые патчи скорее всего придется накладывать, да.
0
Вопрос где эти самые патчи брать и почему они нужны. А так понятно что можно качнуть crosstool-ng или еще что-нидь (какая разница от кого зависеть от автора ng или mentor).
0
Как же вы меня… удивляете
Просто оставлю это тут:
http://we.easyelectronics.ru/dekar/sobrat-sovremennyy-arm-tulcheyn-v-linux.html
0
Ну где же вы были два месяца назад?
Шел точно таким же путем — только мой свежий newlib оказался newlib-1.20.0.tar.gz
В остальном все точно также. Все собралось. Но наугад выбранный проект с habra не собрался (что там компоновщику не нравилось), тратить времени больше чем было потрачено было жаль.
0
2 месяца назад я сидел на gcc 4.7 и даже не думал переходить на C++ для МК. А сейчас понимаю, что С++11 подходит лучше, чем С.
0
Если уж бинари в /opt то тогда и PATH надо куда-то в /etc/env.d а не в HOME. Хотя все равно помойка будет.
0
я не претендую на оригинальность, об этом, я надеюсь, говорят слова «Just another» в названии. Мне просто хотелось, чтобы пользователь получил точно работающий на последней убунте способ поставить тулчейн и начать кодить.
0
Мне просто хотелось, чтобы пользователь получил точно работающий на последней убунте способ поставить тулчейн и начать кодить.
не коррелирует с
При возникновении ошибок могу только пожелать удачи.
0
Не испытывал никаких проблем с eclipse+gcc, использую исключительно лайт тулчейн от mentor. Еще работоспособен GNU Tools ARM Embedded. Отладчик — клон j-link, т.к. под линухом с ним меньше всего гемора.
0
Подскажите как правильно выбрать клон J-Link? Есть ли какие то критерии его выбора среди кучи на Aliexpress.com?
www.aliexpress.com/wholesale?shipCountry=ru&shipCompanies=&SearchText=J-Link&exception=&minPrice=&maxPrice=&minQuantity=&maxQuantity=&isFreeShip=y&isFavorite=n&isRtl=yes&isOnSale=n&isAtmOnline=n&CatId=0&g=y&initiative_id=SB_20140113033212&needQuery=y
0
Если честно не ручаюсь, какой из них лучше. На ebay они в пределах 500 р. В рунете есть статьи кто где заказывал, поищите. Я использую MT-Link V8, тоже бессовестный клон, но работает без нареканий, стабильно и быстро, под линухом.
0
Совсем недавно обнаружил, что arm-none-eabi есть в репах Ubuntu! А также openocd работающий с st-link/v2…
+1
  • avatar
  • alx32
  • 15 декабря 2014, 10:17
Да, работать становится всё проще. Прогресс!
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.