Главная

Главная

Сообщество

Сообщество

Форум

Форум

STM32

STM32

Электроника

Электроника

Raspberry Pi

Raspberry Pi

Быстрый старт с микроконтроллерами STM32F4. Создание проекта.

Давно, даже очень давно, не было новых статей на нашем сайте, так что пришло время наверстывать... Сегодня мы положим начало изучению STM32F4. И, наверное, начнем с создания нового проекта для этих контроллеров, хотя не хотел я, честно говоря, про это писать статью, так как новый проект тут создается, в принципе, так же как и для STM32F103 (про это тут). Но все-таки бывает, что именно с STM32F4 возникают некоторые трудности, так что, все-таки, рассмотрим этот процесс в подробностях.

Время традиционной вставки: поскольку компания STMicroelectronics прекратила поддержку библиотеки SPL, которая использовалась в этом курсе, я создал новый, посвященный работе уже с новыми инструментами, так что буду рад видеть вас там - STM32CubeMx. Кроме того, вот глобальная рубрика по STM32, а также статья на смежную тему из нового курса: STM32. Быстрый старт с STM32CubeMx.

Так что, запускаем Keil, создаем новый проект – Project - New uVision Project. Сохраняем новый проект в какой-нибудь папке, и затем нам предложат выбрать используемый микроконтроллер. Что ж, выбираем, пусть это будет STM32F407VG:

Создание нового проекта

Готово, в появившемся диалоговом окне тыкаем "Да" и к нам в проект добавится первый файл – startup_stm32f4xx.s. Так же как и раньше, мы будем использовать библиотеки CMSIS и Standard Peripheral Library, но, естественно,  уже для контроллеров STM32F4xx. Так что надо их обязательно скачать и добавить нужные файлы в наш пока еще пустой проект. Кстати не раз слышал от разных людей, что попадаются какие то "не такие" библиотеки для F4, и проект даже простейший не собирается. Сам я с таким не сталкивался, тем не менее, вот проверенные библиотеки, которые я сам использую:

Итак, скачали, все готово, теперь добавляем файлы в проект. На картинке видно, какие понадобятся:

Новый проект в Keil

Ну вот и закончена подготовка, теперь создадим новый .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

guest
30 комментариев
Старые
Новые
Ярослав
Ярослав
13 лет назад

Все делал как у Вас написано. Вылезает ошибка:

Progect 1.axf: Error: L6218E: Undefined symbol main (referred from rtentry2.o).

Подскажите, пожалуйста, в чем дело?

DrWin
DrWin
13 лет назад

Хорошая статья все очень хорошо описано. Получилось с первого раза.

Andrey
Andrey
13 лет назад

Очень благодарен за ваши труды!
Все получилось, правда не с первого раза).

Roman
Roman
13 лет назад

добрый день! можете выложить проект целиком в архиве?

Roman
Roman
Ответ на комментарий  Aveal MT
13 лет назад

Aveal, большее вам спасибо. помогли.

Константин
Константин
13 лет назад

Спасибо огромное, за Ваш пинок.
PS ну то есть СТАРТ.

Yevgeniy_F
Yevgeniy_F
12 лет назад

Я тоже сделал всё как Вы сказали, но компилятор ругается:
Build target 'Target 1'
assembling startup_stm32f4xx.s...
compiling stm32f4xx_gpio.c...
stm32f4xx.h(7116): error: #5: cannot open source input file "stm32f4xx_conf.h": No such file or directory
compiling stm32f4xx_rcc.c...
stm32f4xx.h(7116): error: #5: cannot open source input file "stm32f4xx_conf.h": No such file or directory
compiling LED.c...
stm32f4xx.h(7116): error: #5: cannot open source input file "stm32f4xx_conf.h": No such file or directory
Target not created

Yevgeniy_F
Yevgeniy_F
12 лет назад

Включил, всё равно не помогает

Yevgeniy_F
Yevgeniy_F
12 лет назад

Я включил этот файл, но всё равно не работает

Ярослав
Ярослав
12 лет назад

Очень полезная статья и крайне познавательный ресурс))))

Юрий
Юрий
11 лет назад

Доброго времени суток! за статью огромное спасибо на просторах инета ничего лучше не нашел!
одно но, я вот начинающий и был бы весьма признателен если бы посоветовали какую нибудь книгу по языку С и С++ максимально близкую к программированию ARM на KEIL., возможно у меня не достаточно опыта, я программировал PIC в ССS и там надо сказать С сильно отличается... в плане обращения к портам и тд..сам синтаксис команд. заранее огромное спасибо!

Юрий
Юрий
11 лет назад

Build target 'Target 1'
linking...
.\target.axf: Error: L6218E: Undefined symbol main (referred from rtentry2.o).
Not enough information to list image symbols.
Finished: 1 information, 0 warning and 1 error messages.
".\target.axf" - 1 Error(s), 0 Warning(s).
Target not created
Дает такую вот ошибку может я что-то не до понял...
Пожалуйста помогите.

Юрий
Юрий
11 лет назад

Большие спасибо я разобрался.

Павел
Павел
11 лет назад

Думаю хорошей идеей будет выкладывать к публикации исходник проекта в архиве

Дмитрий
Дмитрий
11 лет назад

Build target 'STM'
compiling Main.c...
linking...
.\Objects\rabota.axf: Error: L6218E: Undefined symbol assert_param (referred from stm32f30x_gpio.o).
Not enough information to list image symbols.
Finished: 1 information, 0 warning and 1 error messages.
".\Objects\rabota.axf" - 1 Error(s), 0 Warning(s).
Target not created.

Помогите советом? В чем может быть загвоздка? Использовал CMSIS и startup от Keil 5. SPL, conf.h перепробовал разные : как от этого сайта, так и с сайта stm

Дмитрий
Дмитрий
11 лет назад

Здравствуйте, уважаемые знатоки) Не подскажите ли, как сделать так, чтоб данные файлы (соответсвующие задействованной периферии процессора) подгружались в проект автоматически (как сделано к примеру в CooCox) и не надо было маяться и все это вручную добавлять, путь к папкам указывать и тому подобное. Примочка, предусмотренная в Keil для этого, называемая "Manage Run-Time Environment", подгружает какие-то свои библиотеки. С ними конечно тоже все работает, но при этом пропадает универсальность, да и написаны они немного по другому. Подскажите, есть ли способ?

Дмитрий
Дмитрий
11 лет назад

Или может я не совсем понимаю, что такое этот hal?)

Александр
Александр
5 лет назад

Отлично, смог "по старинке" на spl/cmsis прошить контроллер, когда сам делал - застревало на systeminit. Думал уже придется изучать HAL.

Обзор конфиденциальности

На этом сайте используются файлы cookie, что позволяет нам обеспечить наилучшее качество обслуживания пользователей. Информация о файлах cookie хранится в вашем браузере и выполняет такие функции, как распознавание вас при возвращении на наш сайт и помощь нашей команде в понимании того, какие разделы сайта вы считаете наиболее интересными и полезными.