Если есть желание, то можно компилировать код и бесплатным компилятором GNU GCC. Через консоль. Мне лень устанавливать Linux или покупать макбук, поэтому сделаю это через винду. Скачал я тулчейн ARM GNU Embedded отсюда: launchpad.net/gcc-arm-embedded/+download (arm-none-eabi-).
Далее это дело устанавливается.
читать дальшеПример makefile я взял из какого-то проекта из интернета и немного подредактировал, убрав лишнее и добавив команды для компиляции ассемблерного файла startup_stm32f0xx.s. Обратите внимание, никакие библиотеки тут не инициализируются, память очищается и прямо в этом файле! Как и устанавливаются начальные значения глобальных переменных. Но на данный момент для простоты я всё лишнее закомментировал, оставив лишь вызов SystemInit и main.
Чтобы проект собрался, надо иметь хотя бы stm32f0xx.h и описание ядра (core_cm0.h с прилагающимся). Добавим пути к ним в makefile. Я взял кейловские папочки, но можно скачать с интернета:
...\Keil\ARM\INC\ST\STM32F0xx
...\Keil\ARM\CMSIS\Include
Перед сборкой проекта поправьте пути в makefile к этим папкам.
Ещё нужен файл, где описана организация памяти: stm32f0.ld.
Я уже писал её, осталось записать правильно в файле (см. ниже ссылку).
RAM: 0x20000000, 8k (0x2000)
ROM: 0x08000000, 64k (0x10000)
Ещё надо обратить внимание на указатель стека: он должен указывать в конец оперативной памяти, и никак не дальше! Иначе программа даже не запустится, вылетев по HardFault или типа того. В данном случае конец памяти находится по адресу 0x20002000.
Компилируется всё это командой make all. Эту команду я записал в build.bat чтобы не набирать вручную, туда же поместил паузу, чтоб смотреть результат компиляции. Хотя, конечно, никто не мешает выводить его в лог =)
С помощью arm-none-eabi-objcopy efl-файл превратился в bin и hex (который утилиты от ST умеют шить).
После чего проект собрался. Зашивал я проект в плату с помощью ST Visual Develop и ST-LINK UTILITY, другого не было. Всё заработало. Светодиод стал моргать чаще (я поменял задержку перед компиляцией).
Специально тут и си-файл есть, и ассемблерный (выдернул из примера проекта для другой среды, Кейловский, конечно же, не подходит). То есть main можно заменить на ассемблерный, если такие извращения захочется совершить.
Кстати, проконтролировать, что программа не вывалилась в ошибку можно в ST-LINK Utility, там есть показометр регистров ядра. То есть, посмотрев PC (а также SP и LR) можно увидеть, где код сейчас выполняется. Я так посмотрел на Hard Fault, когда объявил случайно копипастой адрес стека 0x20010000 (который в SP отобразился и меня смутил своей величиной). После чего я это исправил и программа стала работать без проблем.
Предупреждаю, что я с gcc так не работал, и makefile может быть не совсем правильный =) Но пока что всё равботает.
makefile
stm32f0.ld
Проект.
<< Предыдущее
STM32F0. Собираем тот же проект под GNU GCC
Если есть желание, то можно компилировать код и бесплатным компилятором GNU GCC. Через консоль. Мне лень устанавливать Linux или покупать макбук, поэтому сделаю это через винду. Скачал я тулчейн ARM GNU Embedded отсюда: launchpad.net/gcc-arm-embedded/+download (arm-none-eabi-).
Далее это дело устанавливается.
читать дальше
<< Предыдущее
Далее это дело устанавливается.
читать дальше
<< Предыдущее