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 комментариев
Старые
Новые
Межтекстовые Отзывы
Посмотреть все комментарии
Егор
Егор
11 лет назад

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

Maks
Maks
11 лет назад

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

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

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

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

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

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

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

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

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

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

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

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

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

JekaKey
JekaKey
11 лет назад

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

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

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

NERV
NERV
11 лет назад

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

LEV
LEV
11 лет назад

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

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

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

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

alexandr
alexandr
11 лет назад

А у меня вот такая ошибка вылезла:
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
11 лет назад

Keil mVision4

alexandr
alexandr
11 лет назад

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

alexandr
alexandr
11 лет назад

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

Anatoly
Anatoly
11 лет назад

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

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

Anton
Anton
10 лет назад

Здравствуйте 🙂
Делал по аналогии с вашим мануалом под контроллер 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.

🙁

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

Делаю по аналогии с контроллером 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

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

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

uVision 5 под arm

Mihail
Mihail
10 лет назад

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

Mihail
Mihail
10 лет назад

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

Mihail
Mihail
10 лет назад

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

Mihail
Mihail
10 лет назад

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

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

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

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

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

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

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

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

Добрый день!

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

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

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

Vandroid
Vandroid
9 лет назад

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

nick
nick
9 лет назад

помогите пожалуйста с такими ошибками:
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

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

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

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

Sergey
Sergey
9 лет назад

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

Sergey
Sergey
9 лет назад

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

Tim
Tim
9 лет назад

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

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

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

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

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

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

Прошу прощения, что сразу не написал. Проект оставил на рабочем компьютере.
Я скопировал весь текст.
*** 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.

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

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

Leonid
Leonid
9 лет назад

День добрый. Подскажите, что за 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
9 лет назад

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

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

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

Victor
Victor
9 лет назад

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

Sergey
Sergey
9 лет назад

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

Sergey
Sergey
9 лет назад

Подскажите пожалуйста, что делать? Я два раза проходил по одному видеоуроку и повылезали ошибки.
Т.е. первоначально я выбрал не то устройство, о котором говорилось в уроке, а дальше делал все как говорили - скачивал библиотеку с сайта 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 еще куча всего, но не хочу загромождать комментарий.

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

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

Vlad
Vlad
8 лет назад

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

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

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

Dmitriy
8 лет назад

У меня 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. А он там должен быть?

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

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

oleg
oleg
4 лет назад

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

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