Top.Mail.Ru

STM32 с нуля. Создание проекта и подключение библиотек в Keil.

Итак, компилятор установлен, пришло время создания первого проекта. Сразу думаю надо обсудить библиотеки, которые мы будем использовать в нашей работе с STM32.

Во-первых, CMSIS. Это замечательная библиотека, единый стандарт для всех Cortex. CMSIS  позволяет легко переносить код с одного контроллера с ядром ARM Cortex на любой другой. Короче, в CMSIS стандартизирован доступ к разной периферии разных микроконтроллеров STM.  Библиотека состоит из нескольких файлов, которые нам надо будет добавить в проект, но об этом немного позднее.

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

Во-вторых, библиотека Standard Peripheral Library. В SPL очень удобно реализована настройка всевозможных периферийных модулей, а также есть множество функций для работы с ними же. Эту библиотеку достаточно подробно будем изучать при обсуждении какой-либо конкретной периферии в будущих статьях. А сейчас кратенько рассмотрим ее структуру в общих чертах. Для любого модуля микроконтроллера есть 2 файла: заголовочный файл и, собственно, файл с исходным кодом. Так что, создавая проект для работы, например, с АЦП, мы будем включать в проект два файла из Standard Peripheral Library.

Возможно, кто-то сомневается, стоит ли использовать эту библиотеку. Речь, конечно о SPL (по поводу CMSIS думаю ни у кого нет особых сомнений). Так вот, я для себя однозначно решил, что стоит. Потому что ни к чему изобретать велосипед, библиотека написана и очень удобна, гораздо удобнее, чем напрямую ковыряться в многочисленных регистрах. НО! При всем этом, надо все-таки иметь представление какой регистр за что отвечает, и как с ними работать. Для этого не лишним будет просматривать раздел даташита на конкретную периферию при работе с ней.

Итак, скачиваем CMSIS и Standard Peripheral Library (SPL) и шагаем дальше:

Теперь, наконец-то, переходим к нашему первому проекту. Создадим отдельную папку для проектов, и в ней будем создавать по папке для каждого отдельно взятого проекта. Если этого не делать, то в итоге получится просто каша из файлов. А если проект большой, то есть включает большое количество файлов, то лучше сгруппировать файлы в группы и разложить по разным подпапкам. Итак, запускаем Keil!

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

Идем в Project -> New uVision Project. Появляется окошко для выбора папки, в которой будет создан проект. Также надо дать нашему проекту имя. Пусть будет, например, test, это будет просто тестовый проект. Скриншот приводить не буду, тут все и так понятно. Теперь нам надо выбрать микроконтроллер. Я остановил свой выбор на STM32F103CB:

Keil. Создание нового проекта, выбор контроллера.

Жмем OK,  появляется диалоговое окно, жмем "Да", и вот первый шаг позади.

В левой части видим окошко Project. Там будут отображаться все файлы, добавленные в наш проект. Я обычно переименовываю группы, которые по умолчанию называются Target 1 и Source Group 1 в STM32 и StartUp соответственно. Сразу же добавим еще пару групп – для библиотек, а также для наших файлов, в которых будет собственно сам код. У меня после модификации все выглядит вот так:

STM32, учебный курс, дерево нового проекта.

Конечно, такой вариант не является единственно верным, просто так удобнее, а пока проект содержит немного файлов, пары папок вполне хватит. Идем дальше. Создадим пустой файл .c: File - New .

Появляется пустой файл, жмем File - Save As и называем наш первый файл test.c. Готово! Теперь нужно добавить все необходимые файлы в проект. Дважды тыкаем на папку CMSIS  в дереве проекта и добавляем следующие файлы:

  • core_cm3.c
  • system_stm32f10x.c

И вот они, первые грабли, с которыми я столкнулся. Проект отказался собираться без файла stm32f10x_conf.h. А в моей скачанной CMSIS  он напрочь отсутствовал. Поэтому качаем его отдельно и тоже добавляем в проект (если качали библиотеки по ссылкам выше, то там уже есть этот файл). Далее открываем этот файл, находим строчку #include "stm32f10x_type.h" и комментируем ее. Этот файл мы использовать не будем. Такие действия лично мне пришлось осуществить, чтобы успокоить компилятор,  возможно, у меня просто оказалась битая библиотека. Мне было проще поправить имеющуюся под себя, чем искать какие то другие варианты 🙂

Теперь аналогично добавим файлы библиотеки SPL. Пока они нам не понадобятся, но пусть будут. Добавим, например stm32f10x_rcc.c и подхватим includ’ом stm32f10x_rcc.h (файлы, содержащие все связанное с тактированием различной периферии). И наконец добавим наш созданный файл test.c в папку Source Files в дереве проекта.

Далее идем в Project - Options for target… Тут несколько вкладок для различных настроек. Идем во вкладку Output и ставим галку Create HEX File. Теперь наша цель – вкладка C/C++. В поле define пишем следующее: USE_STDPERIPH_DRIVER. Без этого проект не соберется. Осталось в Include Paths добавить пути ко всем(!) файлам, включенным в проект. Получим примерно следующее:

Создание нового проекта, пути к файлам.

И вот тут еще одни грабли. Все папки, которые добавляем в Include Paths не должны содержать пробелов. Так что мои Header Files, Source Files и Project Files плавно превращаются в Header_Files, Source_Files и Project_Files.

Еще один шаг к созданию проекта сделан, в принципе, осталось совсем чуть-чуть. В файл test.c закинем следующий тестовый код, который абсолютно ничего не делает:

#include "stm32f10x.h"
#include "stm32f10x_rcc.h"

int main()
{
	while(1);
}

Осталось лишь нажать F7 (build) и проект соберется. Все отлично, но мы наблюдаем непредвиденные warning’и. Хорошо написанная программа не должна их содержать, так что будем править. К счастью, это потребует от нас минимум усилий. Итак:

incompatible redefinition of macro "HSE_Value"

Чтобы это не вылетало, открываем stm32f10x_conf.h, ищем:

#define HSE_Value    ((u32)8000000) /* Value of the External oscillator in Hz*/

И беспощадно комментируем эту строку. Вот и все... Если у кого-то вылезло:

warning:  #1-D: last line of file ends without a newline

то надо сделать так, чтобы файл test.c не заканчивался строкой кода. Проще говоря, ставим курсор после последней скобки в этом файле и жмем Enter. Warning сразу же пропадает.

Ну вот, первые шаги сделаны. Мы создали пустой проект, который абсолютно ничего не делает полезного (бесполезного впрочем тоже 🙂 ). Но для начала уже неплохо, в следующих статьях будем заполнять проект кодом. Кстати, если у кого-нибудь возникли какие-либо трудности при создании проекта, пишите в комментарии, не стесняйтесь! И не пропустите статью нашего курса по STM32CubeMx, описывающую аналогичный процесс создания базового проекта.

Подписаться
Уведомить о
guest

93 комментариев
Старые
Новые
Межтекстовые Отзывы
Посмотреть все комментарии
Егор
Егор
10 лет назад

Зделал всё как написано . вылетела ошибка
1234.c: Error: C3065E: type of input file '1' unknown

Maks
Maks
10 лет назад

А в дефайнах проекта там не надо писать что-то типа USE_STDPERIPH_LIBRARY?

Егор
Егор
10 лет назад

А можно ещё узнать где брать эти библиотеки, например на F4

Алиса Алексеева
10 лет назад

О, как боевик прочитала:) так эмоционально, только фраза "находим строчку #include «stm32f10x_type.h» и комментируем ее нафиг" - остановила:) что значит комментируем? почему не удалить?

Алиса Алексеева
Ответ на комментарий  Aveal
10 лет назад

ок, а комментировать - это как? что-то добавить или изменить назначение?

Алиса Алексеева
Ответ на комментарий  Aveal
10 лет назад

если не удаляем, а прячем, - может ли она пригодиться?

Николай
Николай
10 лет назад

Build target 'STM 32'
assembling startup_stm32f10x_md_vl.s...
startup_stm32f10x_md_vl.s: Error: A1071E: Cannot open listing file 'startup_stm32f10x_md_vl.lst': Invalid argument
Target not created

Николай
Николай
Ответ на комментарий  Николай
10 лет назад

Разобрался. Файл был для асемблера, в настройках переделал на С

JekaKey
JekaKey
10 лет назад

Камрады, напишите, по возможности, статью про задание частоты тактового генератора, после PIC совсем не понимаю как выставлять частоты в STM32 и как использовать wizard в Keil, уверен, что у кого то есть уже такой опыта. Спасибо!

Кирилл
Кирилл
10 лет назад

В наборе МК при создании проекта у меня нет тулсета ARM, только C51. При этом в File->Device Database все присутствует. Есть ли советы как починить?

NERV
NERV
10 лет назад

Большое спасибо, за статью!
Но есть одно но.
Когда запускаешь проект в режиме "Use ST-Link Debugger" (в качестве примера). То стоит установить галочку не только на вкладке "Debug", но и на вкладке "Utilies" стоит выбрать требуемое устройство (в рамках данного примера это будет ST-Link Debugger).

LEV
LEV
9 лет назад

Подскажите пожалуйста, как настроить комбинации горячих клавиш Ctrl+C, Ctrl+V.

Заранее спасибо!

Серж
Серж
9 лет назад

Ух, сразу споткнулся на "сразу же добавим еще пару групп" - а где они добавляются-то?

alexandr
alexandr
9 лет назад

А у меня вот такая ошибка вылезла:
Build target 'STM32'
compiling test.c...
linking...
test.axf: Error: L6320W: Ignoring --entry command. Cannot find argument 'Reset_Handler'.
test.axf: Warning: L6320W: Ignoring --first command. Cannot find argument '__Vectors'.
Target not created

alexandr
alexandr
9 лет назад

Keil mVision4

alexandr
alexandr
9 лет назад

точно для ARM, такой же как на рисунке на этой страничке

alexandr
alexandr
9 лет назад

блин..), спасибо, извините

Anatoly
Anatoly
9 лет назад

Помогите плиз.
Всё ругается

.\CMSIS\Device\ST\STM32L1xx\Include\stm32l1xx.h(247): error: #67: expected a "}"
SDIO_IRQn = 45, /*!< SDIO global Interrupt */

Anton
Anton
9 лет назад

Здравствуйте 🙂
Делал по аналогии с вашим мануалом под контроллер stm32f30 .

После попытки компиляции :
.\second.axf: Error: L6320W: Ignoring --entry command. Cannot find argument 'Reset_Handler'.
.\second.axf: Warning: L6320W: Ignoring --first command. Cannot find argument '__Vectors'.
Not enough information to list image symbols.
Not enough information to list the image map.
Finished: 2 information, 1 warning and 1 error messages.

🙁

Антон
Антон
9 лет назад

Делаю по аналогии с контроллером stm32f30.
Была ошибка, связанная с отсутствием startup_stm32f30x.S. Добавил в проект.
При компиляции выдает 53 ошибки в startup_stm32f30x.S
.......
startup_stm32f30x.S(9): error: A1159E: Label missing from line start
startup_stm32f30x.S(37): error: A1137E: Unexpected characters at end of line

Помогите , пожалуйста!

Антон
Антон
9 лет назад

uVision 5 под arm

Mihail
Mihail
9 лет назад

Я скачал новую версию Keil с офф. сайта и там в списке нет stm32. Что я не очень понял как тогда начать?

Mihail
Mihail
9 лет назад

Спасибо. Да вроде уже разобрался. Теперь качнул MDK-ARM v4.73. До этого был С51 v9.52. Но об этом в статья явно не писано :)) Я как новичек не знал, что все так разделено!!!

Mihail
Mihail
9 лет назад

Почему-то в скаченной с офф.сайта MDK-ARM v4.73 теперь вообще ни чего нет в списке.

Mihail
Mihail
9 лет назад

Все снес, папку удалил, реестр почистил, поставил заново MDK-ARM v4.73 скаченный с офф.сайта - ура заработало!!

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

Немного критики.
На мой взгляд подход "боремся с этим неправильным кейлом и неправильной CMSIS" сам по себе неправильный. Гораздо лучше использовать современные инструменты от STM. Есть такая шикарная вещь как STM32CubeMX. Она генерирует готовый проект для кейла с CMSIS и библиотечными функциями для периферии. При этом можно в любой момент поменять конфигурацию и перегенерировать проект, не потеряв пользовательский код программы. А для отладочных плат типа DISCOVERY автоматически настраиваются подключения периферии на плате, и уже случайно не попадешь на занятый пин. Да еще и графический режим назначения ног, настройки тактирующих частот и основных интерфейсов. Код эта штука дает валидный, комментированный и разлаженный по файлам и группам. Изучать ARM так в миллион раз проще, чем ковырять совершенно непонятный новичку файлы.

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

На дату написания статьи я и правда не посмотрел. За это извиняюсь.
Я все таки считаю, что следует использовать простые инструменты для решения каждой конкретной задачи. Знать основы, понимать регистры и прочее - это конечно обязательно. Но совсем необязательно ковырять код на уровне близкому к ассемблеру, что бы писать эффективный код. В современных реалиях железо стоит дешевле программиста. Поэтому выгоднее взять более производительную железку, чем отказаться от использования готовых библиотек. Даже при разработке серийной продукции.
Я все к чему: лучше учить правильно пользоваться высокоуровневыми инструментами,но давать выжимку из низкоуровневой области и HAL подчеркивая важные моменты. А писать эффективный и качественный код (что на уровне регистров, что на уровне библиотек) кто-то может, а кто-то нет. Это больше связано со складом ума.
А Cube мне например очень понравился в части настройки тактирующих частот с графическим пояснением и визуализации расположения и предназначения выводов. Весьма полезные вещи при ознакомлении даже с новым камнем, а не только с линейкой STM32. При этом для правильной настройки нужны те же знания, что и для работы с SPL , только применять их легче, и ничего не пропустить и не забыть проще.
А умение правильно подшаманить CMSIS практических навыков не дает.
PS Я все равно очень уважаю Ваш труд по написанию данного цикла статей. И не в коем случае не хочу сказать, что статья плохая. Написанное мною выше основано на личном опыте преподавания и обучения. Может это будет Вам полезно.

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

Приветсвую!
Поставил mVision 5.0. Там немножко инчаче создаётся проект. Например, выбор устройства (device) возможен только после добавления устройтсва через "Pack Installer" (справа в поле поиска нужно ввести интересующий контроллер, в статье - STM32F103CB), а после выбора контроллера слева нужно установить DFP (Device Family Pack) - после этого можно создавать проект, т.к. устройство будет доступно для выбора.
На данный момент мне не понятно, как работает "Pack Installer" вот в каком отношении: через "Pack Installer" было видоно, что ,библиотека ARM::CMSIS установлена. Вопрос, нужно ли явно искать и добавлять в проект файлы этой библиотеки или они будут автоматически добавляться во время сборки.... Если всё будет работать автоматически, то "Pack Installer" - удобная штука!

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

Добрый день!

А можно как-то обойтись без библиотек и насколько это будет сложно?
А то не хочется разбираться в чужих библиотеках.

Андрей
Андрей
8 лет назад

Спасибо. Всё с первого раза получилось))

Vandroid
Vandroid
8 лет назад

Доброго времени суток. Могли бы кто-нибудь из здесь присутствующих подсказать, откуда можно скачать CMSIS - STM32_CMSIS и Standard Peripheral Library — STM32_SPL для STM32F051R8?

nick
nick
8 лет назад

помогите пожалуйста с такими ошибками:
FCARM FILE CONVERTER V2.50
Completed 36 File (s), Ratio 100%
compiling pro ...
pro: Error: C4065E: type of input file 'pro' unknown
pro: Error: C4079E: ArmCC command with no effect
". \ pro.axf" - 2 Error (s), 0 Warning (s).
Target not created

Андрей
Андрей
8 лет назад

.\Example.axf: Error: L6200E: Symbol SystemInit multiply defined (by system_stm32f4xx_1.o and system_stm32f4xx.o).

Подскажите, пожалуйста, в чем причина этой ошибки? У меня 7 их вылазит при построении.

Sergey
Sergey
8 лет назад

мда. Стартую не с нуля и стартануть не могу. Хоть бы написали, как установить IDE, как добавить в неё библиотеки микроконтроллеров и т.д. Бьюсь об неё уже час, первый проект создать не могу. В кокосе уже бы давным давно программу писал.

Sergey
Sergey
8 лет назад

Немного не так поняли. Например, в окне select device for target у меня была всего одна строка с одним устройством. Микроконтроллеров stm32 там не было. Чтобы они там появились, надо зайти в прилагающуюся к IDE утилиту и там установить библиотеки. Вроде всё просто, а провозился с этим с полчаса. Вот первые грабли, дальше не получилось что- то ещё и ещё. Как итог- старт не состоялся, я остаюсь на CooCox. Как говорится, хорошая попытка, keil.

Tim
Tim
8 лет назад

Аналогично... А вот работая с плисинами в зайлинксовом ISE вообще никаких проблем не испытывал (во всяком случае на этапе сборки проекта). А в кейле очень мутно...

Семён
Семён
8 лет назад

Помогите, пожалуйста!
Ошибка core_cm3.c: Error: #869: could not set locale ".1252" to allow processing of multibyte characters

Алексей
Алексей
8 лет назад

День добрый. Подскажите, что за варнинг выскакивает - ".\Objects\Primer.axf" - 0 Error(s), 1 Warning(s).

Алексей
Алексей
8 лет назад

Прошу прощения, что сразу не написал. Проект оставил на рабочем компьютере.
Я скопировал весь текст.
*** Using Compiler 'V5.05 update 2 (build 169)', folder: 'D:\Program Files\Keil_v5\ARM\ARMCC\Bin'
Build target 'Target 1'
compiling core_cm3.c...
linking...
.\Objects\Primer.axf: Warning: L6304W: Duplicate input file .\objects\core_cm3_1.o ignored.
Program Size: Code=548 RO-data=224 RW-data=4 ZI-data=1636
Finished: 0 information, 1 warning and 0 error messages.
FromELF: creating hex file...
".\Objects\Primer.axf" - 0 Error(s), 1 Warning(s).
Build Time Elapsed: 00:00:12
То есть я каким-то образом задействовал дважды core_cm3_1.o.

Алексей
Алексей
8 лет назад

Спасибо. Да есть такое. Нашел. Один исключил и варнинга нет.

Leonid
Leonid
8 лет назад

День добрый. Подскажите, что за WARNINGS:
compiling stm32f10x_rcc.c...
STM32_SPL\src\stm32f10x_rcc.c(273): warning: #223-D: function "assert_param" declared implicitly
assert_param(IS_RCC_HSE(RCC_HSE));
STM32_SPL\src\stm32f10x_rcc.c(338): warning: #223-D: function "assert_param" declared implicitly
assert_param(IS_RCC_CALIBRATION_VALUE(HSICalibrationValue));
STM32_SPL\src\stm32f10x_rcc.c(357): warning: #223-D: function "assert_param" declared implicitly
assert_param(IS_FUNCTIONAL_STATE(NewState));
STM32_SPL\src\stm32f10x_rcc.c(383): warning: #223-D: function "assert_param" declared implicitly
assert_param(IS_RCC_PLL_SOURCE(RCC_PLLSource));
STM32_SPL\src\stm32f10x_rcc.c(404): warning: #223-D: function "assert_param" declared implicitly
assert_param(IS_FUNCTIONAL_STATE(NewState));
STM32_SPL\src\stm32f10x_rcc.c(431): warning: #223-D: function "assert_param" declared implicitly
assert_param(IS_RCC_PREDIV1_SOURCE(RCC_PREDIV1_Source));
STM32_SPL\src\stm32f10x_rcc.c(568): warning: #223-D: function "assert_param" declared implicitly
assert_param(IS_RCC_SYSCLK_SOURCE(RCC_SYSCLKSource));
STM32_SPL\src\stm32f10x_rcc.c(612): warning: #223-D: function "assert_param" declared implicitly
assert_param(IS_RCC_HCLK(RCC_SYSCLK));
STM32_SPL\src\stm32f10x_rcc.c(638): warning: #223-D: function "assert_param" declared implicitly
assert_param(IS_RCC_PCLK(RCC_HCLK));
STM32_SPL\src\stm32f10x_rcc.c(664): warning: #223-D: function "assert_param" declared implicitly
assert_param(IS_RCC_PCLK(RCC_HCLK));
STM32_SPL\src\stm32f10x_rcc.c(703): warning: #223-D: function "assert_param" declared implicitly
assert_param(IS_RCC_IT(RCC_IT));
STM32_SPL\src\stm32f10x_rcc.c(731): warning: #223-D: function "assert_param" declared implicitly
assert_param(IS_RCC_USBCLK_SOURCE(RCC_USBCLKSource));
STM32_SPL\src\stm32f10x_rcc.c(770): warning: #223-D: function "assert_param" declared implicitly
assert_param(IS_RCC_ADCCLK(RCC_PCLK2));
STM32_SPL\src\stm32f10x_rcc.c(832): warning: #223-D: function "assert_param" declared implicitly
assert_param(IS_RCC_LSE(RCC_LSE));
STM32_SPL\src\stm32f10x_rcc.c(865): warning: #223-D: function "assert_param" declared implicitly
assert_param(IS_FUNCTIONAL_STATE(NewState));
STM32_SPL\src\stm32f10x_rcc.c(882): warning: #223-D: function "assert_param" declared implicitly
assert_param(IS_RCC_RTCCLK_SOURCE(RCC_RTCCLKSource));
STM32_SPL\src\stm32f10x_rcc.c(896): warning: #223-D: function "assert_param" declared implicitly
assert_param(IS_FUNCTIONAL_STATE(NewState));
STM32_SPL\src\stm32f10x_rcc.c(1067): warning: #223-D: function "assert_param" declared implicitly
assert_param(IS_RCC_AHB_PERIPH(RCC_AHBPeriph));
STM32_SPL\src\stm32f10x_rcc.c(1098): warning: #223-D: function "assert_param" declared implicitly
assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));
STM32_SPL\src\stm32f10x_rcc.c(1129): warning: #223-D: function "assert_param" declared implicitly
assert_param(IS_RCC_APB1_PERIPH(RCC_APB1Periph));
STM32_SPL\src\stm32f10x_rcc.c(1188): warning: #223-D: function "assert_param" declared implicitly
assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));
STM32_SPL\src\stm32f10x_rcc.c(1219): warning: #223-D: function "assert_param" declared implicitly
assert_param(IS_RCC_APB1_PERIPH(RCC_APB1Periph));
STM32_SPL\src\stm32f10x_rcc.c(1240): warning: #223-D: function "assert_param" declared implicitly
assert_param(IS_FUNCTIONAL_STATE(NewState));
STM32_SPL\src\stm32f10x_rcc.c(1253): warning: #223-D: function "assert_param" declared implicitly
assert_param(IS_FUNCTIONAL_STATE(NewState));
STM32_SPL\src\stm32f10x_rcc.c(1285): warning: #223-D: function "assert_param" declared implicitly
assert_param(IS_RCC_MCO(RCC_MCO));
STM32_SPL\src\stm32f10x_rcc.c(1332): warning: #223-D: function "assert_param" declared implicitly
assert_param(IS_RCC_FLAG(RCC_FLAG));
STM32_SPL\src\stm32f10x_rcc.c(1406): warning: #223-D: function "assert_param" declared implicitly
assert_param(IS_RCC_GET_IT(RCC_IT));
STM32_SPL\src\stm32f10x_rcc.c(1451): warning: #223-D: function "assert_param" declared implicitly
assert_param(IS_RCC_CLEAR_IT(RCC_IT));
STM32_SPL\src\stm32f10x_rcc.c: 28 warnings, 0 errors
linking...
.\test1.axf: Error: L6218E: Undefined symbol assert_param (referred from stm32f10x_rcc.o).
Not enough information to list image symbols.
Finished: 1 information, 0 warning and 1 error messages.
".\test1.axf" - 1 Error(s), 28 Warning(s).
Target not created

Leonid
Leonid
8 лет назад

Прописано в Preprocessor Symbols --> Define. У меня STM32F103RB на плате MSBSTM32, paths выглядят C:\Keil\ARM\Boards\Keil\MCBSTM32\LLL\STM32_SPL\inc.
LLL создана для Вашего tutorial.

Виктор
Виктор
7 лет назад

Я вижу главную проблему в SPL и HAL. Что эти знания оказываются бесполезными, как только попадается АРМ не производства STM. А вероятность этого для специалиста продающего свой труд весьма вероятна.

Victor
Victor
7 лет назад

С того, что CMSIS подходит ко ВСЕМ АРМ (в большой степени)

Sergey
Sergey
7 лет назад

Когда открываю новый проект, в разделе STM нет стм-ских устройств. там только upsd-ские устройства.
Что делать-то? Качал с торрента, 12-14 гигов. Что качал, непонятно..

Sergey
Sergey
7 лет назад

Подскажите пожалуйста, что делать? Я два раза проходил по одному видеоуроку и повылезали ошибки.
Т.е. первоначально я выбрал не то устройство, о котором говорилось в уроке, а дальше делал все как говорили - скачивал библиотеку с сайта st.com, прописывал пути, создавал папки (user, periph, CMSIS) и т.д.
Качал отсюда - http://rutracker.org/forum/viewtopic.php?t=2305709

Вот ошибки: Build target 'Target 1'
compiling system_stm32f4xx.c...
.\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h(666): warning C318: can't open file 'core_cm4.h'
\Users\Сергей\Desktop\MyKeilProject\CMSIS\Device\ST\STM32F4xx\Include\system_stm32f4xx.h(59): error C129: missing ';' before 'SystemCoreClock'
.\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h(668): warning C318: can't open file 'stdint.h'
CMSIS\Device\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c(483): warning C322: unknown identifier
compiling misc.c...
.\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h(666): warning C318: can't open file 'core_cm4.h'
\Users\Сергей\Desktop\MyKeilProject\CMSIS\Device\ST\STM32F4xx\Include\system_stm32f4xx.h(59): error C129: missing ';' before 'SystemCoreClock'
...
Target not created.
Build Time Elapsed: 00:01:04

Перед Target еще куча всего, но не хочу загромождать комментарий.

Сергей
Сергей
7 лет назад

Здравствуйте. Подскажите пожалуйста, как тут происходит настройка тактирования? Одну, похожую на настройку строку вы рекомендуете закомментить: #define HSE_Value ((u32)8000000) /* Value of the External oscillator in Hz*/ Может как то еще оно настраивается? Или STM умеет сам распознавать частоту резонатора? А как узнавать частоту работы всей периферии (особенно новичкам)? С кубом все понятно, а вот Standard Peripheral Library для меня загадочна.

Vlad
Vlad
7 лет назад

Объясните следующую ошибку:
.\gpio.axf: Error: L6218E: Undefined symbol main (referred from rtentry2.o)
Not enough information to list image symbol

Vlad
Vlad
Ответ на комментарий  Vlad
7 лет назад

Можно не отвечать, глупость зашкаливает

Dmitriy
7 лет назад

У меня 5-й Keil. Сделал всё как у вас. Правда выбрал другой контроллер. Пути прописал ВСЕ! Ошибка:
*** Using Compiler 'V5.06 update 1 (build 61)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin'
Build target 'Target 1'
linking...
.\Objects\test.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.
".\Objects\test.axf" - 1 Error(s), 0 Warning(s).
Target not created.
Build Time Elapsed: 00:00:03

Так вот, в папке Object даже нет такого файла - \test.axf. А он там должен быть?

Алексей
Алексей
7 лет назад

А чем Keil лучше чем CooCox?
Здесь строчку надо прописать, иначе не заработает... тут строку закомментировать, а то проект не соберется... еще и к каждому файлу(!) из проекта путь указать... В кокосе библиотеки предельно просто добавляются, и без всяких заморочек. Почему именно кейл?

oleg
oleg
2 лет назад

не совсем это и для начинающих ! Вы пропускаете необходимые вещи как раз полезные для начинающих и приходится заглядывать в сторонние проекты !
Пример :
Теперь аналогично добавим файлы библиотеки SPL. Пока они нам не понадобятся, но пусть будут. Добавим, например  stm32f10x_rcc.c  и подхватим includ’ом  stm32f10x_rcc.h
Это как ?

93
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x