Первый старт с STM32-Discovery [Часть 4]
Сегодня по плану:
- создать основу для проекта
- написать Makefile
- попробовать прошить МК
Makefile
В прошлый раз мы написали часть инициализации, теперь осталось собрать это все в единое целое, создать структуру проекта и попробовать собрать его.
Можно компилировать каждый отдельный файл в ручную, но гораздо удобнее автоматизировать этот процесс, для этого есть замечательная утилита GNU Make. Сценарий согласно которому она производит сборку проекта принято располагать в файле с именем Makefile, если не указывать на прямую пусть к файлу, то при запуске она ищет в текущей директории данный файл.
Формат файла достаточно своеобразен, поэтому лучше конечно почитать о нем в документации к make.
Я составил минимально возможный сценарий для сборки проекта:
Кратенько о содержании:
OPTIMIZATION = s | задаем уровень оптимизации, может принимать [0,1,2,3,s] в данном случае оптимизировать по размеру выходного кода, как правило его не так часто нужно менять |
SRC_C = startup.c
SRC_C += main.c |
указываем какие файлы нужно компилировать, при добавлении новых нужно добавить в ручную, например создали файл test.c, то добавить нужно строчку SRC_C += test.c |
CROSS_PATH = C:/Tools/CodeSourcery/2010-09-51/
CROSS = $(CROSS_PATH)/bin/arm-none-eabi-
INCLUDES += -I$(CROSS_PATH)/arm-none-eabi/include
INCLUDES += -I$(CROSS_PATH)/arm-none-eabi/include/lib INCLUDES += -Imcu INCLUDES += -Imcu/peripherals INCLUDES += -Imcu/startup INCLUDES += -Iutility VPATH += mcu VPATH += mcu/startup VPATH += mcu/peripherals VPATH += utility |
указываем пути до GCC, а так же пути где компилятору искать файлы исходных кодов и заголовочные файлы. |
FLAGS_C = $(INCLUDES) -I.
FLAGS_C += -O$(OPTIMIZATION) FLAGS_C += -Wall FLAGS_C += -c FLAGS_C += -fmessage-length=0 FLAGS_C += -fno-builtin FLAGS_C += -ffunction-sections FLAGS_C += -fdata-sections FLAGS_C += -msoft-float FLAGS_C += -mapcs-frame FLAGS_C += -D__thumb2__=1 FLAGS_C += -mno-sched-prolog FLAGS_C += -fno-hosted FLAGS_C += -mtune=cortex-m3 FLAGS_C += -mcpu=cortex-m3 FLAGS_C += -mthumb FLAGS_C += -mfix-cortex-m3-ldrd FLAGS_LD = -Xlinker FLAGS_LD += --gc-sections FLAGS_LD += -mcpu=cortex-m3 FLAGS_LD += -mthumb FLAGS_LD += -static FLAGS_LD += -nostdlib |
ключи для правильно компиляции и сборки |
all: clean target.elf
… |
в этой части описаны так называемые цели, т.е. сам сценарий сборки |
Основа проекта
Нам осталось только всё созданные файлы разложить по “полочкам”, мне нравиться вот такая структура проекта:
target | директория выходных файлов (прошивка) |
mcu | содержит файл инициализации, файл сценария для компоновщика |
peripherals | файлы для работы с периферией |
корневая директория | содержит только файл основной программы (main) и Makefile |
Ну вот можно попробовать и собрать проект. Скачиваем, распаковываем в удобное место, переходим в корневую директорию проекта и выполняем команду “make all” и на выходе должны получить вот такую информацию:
-----------------------------------------------------------
Compiling: mcu/startup.c
Compiling: main.c
Linking: target.elf
-----------------------------------------------------------
text data bss dec hex filename
376 0 200 576 240 target/target.elf
Если не получили проверьте правильность установки GCC, а если все правильно попробуем зашить программу в МК, правда пока эта программа ни чего не делает полезного ;)
Подключим плату STM32-Discovery к компьютеру и запустим STM32 ST-Link Utility:
comments powered by Disqus