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

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

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

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

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

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

скачать CMSIS — STM32_CMSIS

скачать Standard Peripheral Library — STM32_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, хотя пока мы будем отлаживать программы в симуляторе Keil’а, хекс нам не понадобится. Теперь наша цель – вкладка 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 сразу же пропадает.

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

Понравилась статья? Поделись с друзьями!

STM32 с нуля. Keil. Создание проекта.: 89 комментариев
  1. Зделал всё как написано . вылетела ошибка
    1234.c: Error: C3065E: type of input file ‘1’ unknown

    • Добавлю вечером ссылку на библиотеку для F4, а так в интернете все что угодно можно найти)

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

  3. 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

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

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

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

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

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

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

  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

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

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

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

    🙁

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

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

    • Аа.. тогда даже не знаю, что сказать, сам пятым не пользуюсь, и вообще постоянно люди жалуются, что в пятом что-то не работает. Ставь uVision 4))

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

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

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

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

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

    • Ну, во-первых, на момент создания статьи Cube еще был в зародышевом состоянии в головах специалистов ST.
      Во-вторых, даже на сегодняшний день Cube — сырой проект, который требует доработок и исправлений.
      В-третьих, как раз-таки новичок, используя сразу Cube, не получает толком никаких знаний о структуре проекта, о построении программы и тому подобных вещах. Таким образом, использование STM32, в целом, начинает напоминать использование недоинструментов типа Arduino.
      Кроме того, библиотека HAL, выпускаемая как замена SPL, от поддержки которой ST отказались, заточена под легкость и доступность программирования, а не под оптимизацию и «качественность» получаемого программного продукта.
      И все вышесказанное, опять же на фоне того, что продукты реально сырые на данный момент, что, в принципе и понятно, поскольку работа над ними в самом разгаре.

    • Есть несколько основных подходов, по большому счету — работа непосредственно с регистрами микроконтроллера, в результате человек, занимающийся программированием получает весь спектр знаний о конкретной периферии, с которой работает. Компромиссом является использование библиотек типа SPL — программист также получает необходимые знания, понимает работу устройств/контроллеров/программ в целом. Третьим подходом является как раз продукты типа CubeMX — «нажал на ножку, поставил пару галок, получил отдельный файл со всей инициализацией, работает и фиг с ним». И если для разбирающихся людей это не проблема, то для новичков такой способ изучения просто фатален.

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

    • Простите, если я резко чересчур высказался ) Просто тема наболевшая, часто очень попадаться стали программисты, которые ничего не знают толком и, что самое плохое, ничего не хотят учить и понимать.

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

  20. Добрый день!

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

    • CMSIS — базовая библиотека, без нее врядли, а без SPL вполне можно — вручную выставлять в регистрах биты.

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

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

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

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

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

    • Я даже растерялся поначалу, прочитав.

      Вообще 90 процентов статьи посвящено именно тому как добавить файлы библиотек в новый проект, как прописать к ним пути и т. д.

      А уж писать про установку IDE на сайте, ориентированном все-таки на программистов или людей, которые хотят ими стать, по меньшей мере странно.

      Вы серьезно полагаете, что тут будет уместно описание таких шагов как — скачивание установочного файла (.exe) из интернета, запуск этого файла, нажатие кнопки Next в открывающихся диалоговых окнах, указание директории установки программы и т. д…?

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

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

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

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

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

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

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

    • Надо перепроверить, что точно правильно прописано и что пути ко всем хэдерам есть в настройках. Симптомы ошибки очень уж типичные для этих двух проблем.

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

    • Также знание, к примеру, регистров AVR абсолютно никак не помогает при работе с любым другим контроллером. С чего вообще библиотеки ST должны быть полезными при использовании других контроллеров?

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

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

  35. .\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h(666): warning C318: can’t open file ‘core_cm4.h’ — не получается открыть файл. Либо файла нет в проекте, либо пути к нему не прописаны в настройках.

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

    • Там строка закомментирована только из-за того, что она дублируется в другом файле, а так в SPL тоже есть файлы для работы с тактированием (stm32f10x_rcc.c) и там есть набор функций нужный.

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

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

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

    • Я IAR’ом только пользуюсь последние несколько лет. В 5 Кейле тоже можно добавлять библиотеки насколько я помню.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *