Давно, даже очень давно, не было новых статей на нашем сайте, так что пришло время наверстывать... Сегодня мы положим начало изучению STM32F4. И, наверное, начнем с создания нового проекта для этих контроллеров, хотя не хотел я, честно говоря, про это писать статью, так как новый проект тут создается, в принципе, так же как и для STM32F103 (про это тут). Но все-таки бывает, что именно с STM32F4 возникают некоторые трудности, так что, все-таки, рассмотрим этот процесс в подробностях.
Время традиционной вставки: поскольку компания STMicroelectronics прекратила поддержку библиотеки SPL, которая использовалась в этом курсе, я создал новый, посвященный работе уже с новыми инструментами, так что буду рад видеть вас там - STM32CubeMx. Кроме того, вот глобальная рубрика по STM32, а также статья на смежную тему из нового курса: STM32. Быстрый старт с STM32CubeMx.
Так что, запускаем Keil, создаем новый проект – Project - New uVision Project. Сохраняем новый проект в какой-нибудь папке, и затем нам предложат выбрать используемый микроконтроллер. Что ж, выбираем, пусть это будет STM32F407VG:
Готово, в появившемся диалоговом окне тыкаем "Да" и к нам в проект добавится первый файл – startup_stm32f4xx.s. Так же как и раньше, мы будем использовать библиотеки CMSIS и Standard Peripheral Library, но, естественно, уже для контроллеров STM32F4xx. Так что надо их обязательно скачать и добавить нужные файлы в наш пока еще пустой проект. Кстати не раз слышал от разных людей, что попадаются какие то "не такие" библиотеки для F4, и проект даже простейший не собирается. Сам я с таким не сталкивался, тем не менее, вот проверенные библиотеки, которые я сам использую:
- Скачать STM32F4 SPL - Standard Peripheral Library
- Скачать STM32F4 CMSIS - CMSIS
Итак, скачали, все готово, теперь добавляем файлы в проект. На картинке видно, какие понадобятся:
Ну вот и закончена подготовка, теперь создадим новый .c файл, в котором и будет наш код. Идем в File - New, в Keil’е открывается пустой файл, жмем File - Save as и сохраняем его под именем test.c, например. Не забываем при сохранении указать расширение файла (.c). Файл создали, отлично, но надо его еще и в проект наш добавить. Ну, собственно, в этом ничего сложного нету ) В этот файл запишем тестовую пустую программу:
/***************************************************************************************/ #include "stm32f4xx.h" #include "stm32f4xx_rcc.h" #include "stm32f4xx_gpio.h" /***************************************************************************************/ int main() { while(1) { __NOP(); } } /***************************************************************************************/
Почти все уже готово, осталось заглянуть в настройки проекта – Project - Options for target… Открывается окошко с множеством вкладок, нас тут интересуют лишь несколько. Открываем вкладку C/C++ и в поле Define прописываем:
- USE_STDPERIPH_DRIVER, STM32F4XX
Ну и внизу в поле Include Paths надо добавить пути абсолютно ко всем файлам, включенным в проект. После выполнения этого шага можно давить на F7 (Build), и проект соберется без ошибок и предупреждений.
Но вообще я лично делаю несколько иначе. Смотрите в чем минус такого подхода. Вот мы скачали себе куда-то библиотеки CMSIS и SPL, добавили файлы из этих папок, прописали пути к файлам, все круто. НО! Проект не соберется на другом компьютере, поскольку пути все абсолютные, то есть указывают на конкретные папки на вашем компьютере. И на другой машине придется фактически заново выполнять действия по созданию нового проекта. Это огромнейший минус. Поэтому я обычно создаю отдельную папку для нового проекта, в ней создаю подпапки для CMSIS, SPL и других используемых библиотек и в эти папки запихиваю все файлы, которые мне понадобятся в каждом конкретном проекте. Вот, например, создадим папку STM32F4_Test для нашего нового проекта и в ней следующие папки:
В папки CMSIS и SPL я скопировал все необходимые файлы, которые мы добавляли, создавая проект, в начале статьи. Теперь запускаем Keil, создаем новый проект и сохраняем его в нашу подпапку Project, чтобы все файлы проекта лежали в одном месте и не устраивали хаос.
Проект создан, теперь, как и раньше просто добавляем в него все файлы из папок STM32F4_CMSIS и STM32F4_SPL. В папку Source запихиваем наш тестовый .c файл с функцией main() и его тоже добавляем в проект. Осталось настроить настройки ) Все то же самое – в поле define прописываем:
- USE_STDPERIPH_DRIVER,STM32F4XX
В Include Paths:
Собираем проект – ошибок нет, полет нормальный. В принципе в итоге получили то тоже самое, но теперь проект будет без проблем сразу собираться на любом другом компьютере, а это очень удобно. Абсолютно все файлы проекта теперь лежат рядом, в одной папке, а пути стали относительными и их не придется менять.
На этом то, собственно все, в ближайшее время обязательно что-нибудь поделаем для STM32F4, так что до скорого!
Полный проект из примера статьи - empty_project