Статья, по большому счету, написана как напоминалка что нужно сделать чтобы создать чистый компилируемый проект на камнях STM32F10x.
Начнем с того что нужен сам Keil, у кого есть - молодцы, нету - качаем. Для работы с каждой серией контроллеров, а их вот сколько -
нужен свой набор библиотек, все прелесть то что они в общем доступе непосредственно на странице у конкретного камня на сайте ST, раз уж мы пишем проект под STM32F100RB просто идем по его ссылке на ST, дальше переходим на вкладку Design Resources, ищем графу Related Tools and Software и в поле Discription, то бишь Описание, должны увидеть что-то подобное - STM32F10x standard peripheral library. Именно этот файлик и качаем. Ну а для ленивых - просто качаем отсюда .
Кстати х в названии STM32F10x говорит о том что библиотеки подходят для контроллеров с любим числовым обозначением на его месте. В архиве есть куча не нужных примеров и еще мусор, нам нужна папка Libraries - именно там зарыта собака. Если серьезно собираемся заниматься камнями нужно запомнить минимальный список файлов который нужен для запуска проекта. Создадим отдельную папочку и назовем её, например, STM32F10x_Clear и в ней же папку с именем CMSIS. теперь из папки Libraries будем перекидывать нужные нам файлы. Очень важно что бы в полном пути не было кириллицы!
- STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport\core_cm3.с
- STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport\core_cm3.h
- STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\stm32f10x.h
- STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.c
- STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\system_stm32f10x.h
Еще нужен файл stm32f10x_conf.h - STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\ и вытяните его из любого проекта, можно просто вбить в поиск. Keil берет его обычно из своих папок, но часто бывает что из-за невиданных магнитных бурь находиться один счастливчик у которого его нужно подключать отдельно, сделаем это сразу.
Выглядеть всё это дело должно примерно так
Теперь в корне STM32F10x_Clear создаем вторую папку с именем SPL (Standard Peripheral Library) , и копируем туда папки inc и src, которые находятся в
- STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\ <--------
В итоге у вас должна быть папка STM32F10x_Clear в которой находятся папки CMSIS и SPL.
Папка CMSIS - содержит самые важные файлы, а SPL - готовые библиотеки периферии.
Вкратце о каждом из них:
core_cm3 - файлы описания ядра M3
stm32f10x.h — файл описания периферии
system_stm32f10x - файл начальной инициализации
Компилятор готов, библиотеки подготовлены, дело за малым, собрать всё это воедино.
Первый шаг - создание нового проекта в Keil. Ищем меню Project, в выпадающем списке - New uVision Project, называем и сохраняем проектик. Дальше или ищем по поиску либо по древовидному меню натыкаемся на наш камень, а именно - STM32F100RB, после выплывает сообщение о копировании стартап файла - там находятся файлы инициализации стека и таблицы векторов прерываний, в общем нужные вещи, жмем - ОК. Видим следующую картину
Теперь работаем с областью подключенных файлов - вот она
Там уже есть наши подключенные Startup файлы, теперь подключим остальное. Для наглядности переименуем SourceGroup1 в Startup.
Клацаем ПКМ на Target1 и жмем Add Group
Таким образом создаем еще 3 группы, походу называем их CMSIS, SPL, Source. Двойным кликом на имя группы мы открываем проводник для подключения файлов в группу, в CMSIS - добавляем все файлы из папки STM32F10x_Clear\CMSIS, в группу SPL из папки STM32F10x_Clear\SPL все файлы из inc и src. Итого осталась пустая папка группы Source - там будет хранится наш main, что бы его создать File-New, после File-Save as - в папку с нашим проектом сохраняем файл с именем main.c, теперь добавляем его через проводник группы Source. Все подключили, вроде можно пить пиво...а нет теперь - настройка.
Первым делом, идем к нашей папке STM32F10x_Clear и в ее Свойствах в Атрибутах снимаем галку Только для чтения, это нужно что бы менять содержимое подключенных файлов, ибо в окне файлов Keil'a напротив файлов будет стоят ключик и делайте что хотите. Идем дальше, клацаем на файлик stm32f10x.h в CMSIS и ищем строку
#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_HD_VL) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL)
/* #define STM32F10X_LD */ /*!< STM32F10X_LD: STM32 Low density devices */
/* #define STM32F10X_LD_VL */ /*!< STM32F10X_LD_VL: STM32 Low density Value Line devices */
/* #define STM32F10X_MD */ /*!< STM32F10X_MD: STM32 Medium density devices */
/* #define STM32F10X_MD_VL */ /*!< STM32F10X_MD_VL: STM32 Medium density Value Line devices */
/* #define STM32F10X_HD */ /*!< STM32F10X_HD: STM32 High density devices */
/* #define STM32F10X_HD_VL */ /*!< STM32F10X_HD_VL: STM32 High density value line devices */
/* #define STM32F10X_XL */ /*!< STM32F10X_XL: STM32 XL-density devices */
/* #define STM32F10X_CL */ /*!< STM32F10X_CL: STM32 Connectivity line devices */
#endif
Это директива выбора камня, делать это нужно обязательно, иначе не соберете проект. Так как у нас STM32 Medium density Value Line devices - её нужно раскомментировать убрав перед ней /*.
Следующая строка
#if !defined USE_STDPERIPH_DRIVER
/**
* @brief Comment the line below if you will not use the peripherals drivers.
In this case, these drivers will not be included and the application code will
be based on direct access to peripherals registers
*/
/*#define USE_STDPERIPH_DRIVER*/
#endif
Убираем комент на строке - #define USE_STDPERIPH_DRIVER
Теперь настройка компилятора. Клацаем ПКМ на Target1 - Options for Target "Target1". Видим следующее
Разделы которые нам нужны это:
Output - ставим галочку напротив Create HEX File
C/C++ - в поле Preprocessor Symbols указываем STM32F10X_MD_VL - именно его же мы раскомментировали, и USE_STDPERIPH_DRIVER через запятую, смотрим на скрин
Теперь нужно указать путь к папкам всех подключенных файлов, а это CMSIS и SPL. В поле Include Paths жмём на ... потом New и добавляем папки CMSIS, SPL/inc, SPL/src, должно выйти так
Запомните на будущее, когда будете подключать сторонние библиотеки или другие файлы ОБЯЗАТЕЛЬНО! добавлять их в этом меню иначе ждите ерроры.
Раздел Debug - говорит за себя, делаем так как на картинке, а именно ставим галку и выбираем ST-Link Debugger
Там же жмем на Settings:
Вкладка Debug - в разделе Port ставим SW вместо JTAG, и выставляем галку Verify Code Download(Сверка залитого кода с исходным)
И не мало важное в разделе Flash Download выставить галку Reset and Run(после заливки перезагрузить мк и запустить программу), очень часть народ забывает сбрасывать мк вручную после чего, для того что бы запустить программу, делаем это для автоматического рестарта.
Усьё! Остальное пока нас не интересует.
В мейне добавляем следующее
#include "stm32f10x.h"
int main()
{
while(1)
{
};
}
Жмём F7 (Build) или на иконку в менюшке, должно скомпилироватся без предупреждений и ошибок
Хотел бы заметить что неважно для какой серии камня вы подготавливаете проект, все действия остаются теми же. Вот почему я назвал ее напоминалкой.
В конце прилагаю сам проект и уже собранную и отредактированную папку с библиотеками. Очень удобно иметь её, скопировал, создал проект подключил всё и можно писать свои куски кода=)
Проект -
Библиотека на всё это дело -