keil uvision 5 stm32 обучение
START: Создание проекта в Keil uVision
ARM ( Advanced RISC Machine — усовершенствованная RISC-машина) архитектура, разработанная компанией ARM Limited, лежит в основе множества 32-х и 64-х битных микропроцессорных ядер. В свою очередь одним из таких ядер, а именно ARM Cortex-M оснащены микроконтроллеры STM32 от компании STMicroelectronics.
В семействе Cortex-M присутствуют: Cortex-M3 (выпущен в 2004 году), Cortex-M1 (2007 год), Cortex-M0 (2009 год), Cortex-M4F (2010 год),
Cortex-M0+ (2012 год), Cortex-M7F (2014 год), Cortex-M23 (2016), Cortex-M33F(2016).
В данной статье мы рассмотрим подготовку программного обеспечения и создание первого проекта в среде Keil uVision, для микроконтроллера STM32F303RBT6. В основе этого контроллера лежит ядро Cortex-M4.
Keil uVision дает возможность создавать проекты любой степени сложности. В этой среде пишется и редактируется исходный код программы, производится внутрисхемная отладка и прошивка ПЗУ микроконтроллера. Под управлением единой оболочки собран стек различных модулей которые используются по мере необходимости и возрастании сложности реализуемых задач.
Для того что бы приступить к созданию проекта необходимо скачать архив KEIL uVision and other, в архиве находятся 9 файлов (рисунок 1):
1) mdk511.exe (установочный файл Keil uVision 5)
2) Keil.STM32F3xx_DFP.1.4.0.pack (пакет для работы с микроконтроллером STM32F303RBT6)
3) STM32F30x_Clock_Configuration_V1.0.0.xls (Визард для настройки тактирования микроконтроллера STM32F303RBT6)
4,5,6) StdPeriph, StartUP, CMSIS (необходимые файлы для работы с ядром Cortex-M)
7,8) USBSource, USBLib (Необходимые файлы для работы c USB)
9) Папка VCP_V1.5.0 с драйверами последовательного COM порта для микроконтроллера STM32F303RBT6
Далее устанавливаем Keil uVision 5 (проблем с установкой быть не должно, следуем инструкциям установщика) и переходим к настройкам среды.
Нажимаем на кнопку Pack Installer (рисунок 2).
Откроется диалоговое окно Pack Installer, жмем на File->Import (рисунок 3) и выбираем файл Keil.STM32F3xx_DFP.1.4.0.pack (рисунок 4).
Рисунок 3
Теперь создаем новый проект Project->New uVision Project. (рисунок 5).
Теперь нужно выбрать папку где будет расположен наш проект и присвоить ему имя. У меня это папка Keil_EX_1 и название проекта EX_1 (рисунок 6). Давайте сразу скопируем в эту папку файлы: StdPeriph, StartUP, CMSIS из скаченного архива KEIL_uVision_and_other
После нажатия на кнопку сохранить появится диалоговое окно Select Device for Target ‘Target 1’. в котором нам предложат выбрать микроконтроллер с которым мы будем работать. Нажимаем на вкладку STM32F303 (рисунок 7) после чего в раскрывшемся списке выбираем наш микроконтроллер STM32F303RB как показано на (рисунке 8).
Рисунок 7
Нажимаем на кнопку ОК и автоматически появится диалоговое окно Manage Run-Time Environment (рисунок 9), просто жмем Cancel и идем дальше.
Теперь в появившемся окне Project (рисунок 10) необходимо подготовить структуру папок для удобства работы.
Правой кнопкой мыши жмем на папку Target 1 и выбираем Manage Project items. как на (рисунке 11).
Появится диалоговое окно Manage Project items в котором теперь необходимо добавить с помощью кнопок New/Delet (1) следующие папки: StartUP, USER, CMSIS, StdPeriph (2), после жмем ОК (3) (рисунок 12).
Следующим шагом нужно добавить в созданные нами папки: StartUP, CMSIS, StdPeriph необходимые файлы с помощью команды Add Exsisting Files to Group ‘Название папки’. (рисунок 13).
В составе папки StartUP должны быть следующие файлы: startup_stm32f30x.s, core_cm4.h.
В составе папки CMSIS должен быть файл: system_stm32f30x.c.
В составе папки StdPeriph в первую очередь должен быть конфигурационный файл: stm32f30x_conf.h. Остальные в зависимости от используемой периферии. Я сразу добавил в эту папку все файлы для работы с периферией.
Перейдем к папке USER, в ней будет лежать файл исходного кода main и прочие на ваше усмотрение. Для добавления нового файла воспользуемся командой Add New item to Group ‘USER’. (рисунок 14).
Выбираем тип добавляемого файла CFile(.c) (1), присваиваем файлу имя main (2), нажимаем на кнопку добавить Add(3) (рисунок 15).
После всех манипуляций ваш проект должен выглядеть так же как на (рисунке 16), за исключением нескольких строчек кода которые я написал в main для демонстрации ошибки. Здесь нет ни чего страшного просто нужно произвести окончательные настройки проекта (рисунок 17):
(1) Нажимаем на кнопку Options for Target.
(2) Заходим во вкладку С/С++
(3) В поле Define вводим USE_STDPERIPH_DRIVER
(4) Жмем на кнопку добавить путь (1) и прописываем пути ко всем файлам проекта (2) (рисунок 18)
Заходим во вкладку Output выставляем галочку Create HEX File (рисунок 19), этот файл будет использоваться нами для прошивки микроконтроллера. Жмем ОК.
Все готово, теперь осталось только собрать проект. Жмем на кнопку Build (рисунок 20). Ошибок быть не должно.
STM Урок 1. Установка Keil μVision
Урок 1
Установка Keil μVision
Вводим на поисковом сайте строку stm32f4 spl
Скачиваем отсюда библиотеку
Использовать мы будем отладочную плату STM32F4-DISCOVERY.
Запускаем там pack installer
Слева выбираем наш контроллер
А справа затем Device Specific и жмем Install.
После загрузки пакета выбираем справа еще ARM::CMSIS также жмем Install.
Создаем новый проект Project->New uVision Project
Даем ему имя, выбираем контроллер
Появляется Manage Run-Time Enveroment
Выбираем CMSIS->CORE и Device->Startup, ставим галки напротив и жмем «ОК»
В Target1 добавляем новую папки pl, а папку Source Group 1 переименовываем в user
Такие же папки создаем в физическом каталоге проекта.
Копируем файл \STM32F4xx_DSP_StdPeriph_Lib_V1.6.1\Libraries\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h
в папку pl и снимаем с него атрибут «для чтения».
Также в данную папку копируем две папки (inc и src) из \STM32F4xx_DSP_StdPeriph_Lib_V1.6.1\Libraries\STM32F4xx_StdPeriph_Driver
Можно также снять с этих папок тот же атрибут, включая их содержимое.
Также из любого примера в \STM32F4xx_DSP_StdPeriph_Lib_V1.6.1\Project\
Копируем в папку pl файл stm32f4xx_conf.h
В проекте в группу pl добавляем все файлы из папки \pl\src, кроме файла stm32f4xx_fmc.c,
а также тот файл stm32f4xx_conf.h, который мы копировали выше.
В папке user создаем новый пустой файл main.c
Подключаем его в группу user в проекте
Пишем туда подключение добавленного хедер-файла вот таким образом (нажмите на картинку для увеличения размера)
Затем пропишем пути, выбрав контекстное меню на группе Target 1 и выбрав там следующий пункт
На закладке C/C++ нажмем … справа от поля Include Paths и в открывшийся диалог добавим пути
Добавим в main.c функцию main с бесконечным циклом
Вызовем контекстное меню на объявлении заголовочного файла
И внесем следующие исправления
и /*#define USE_STDPERIPH_DRIVER */
изменить 25000000 на 8000000 здесь
#define HSE_VALUE ((uint32_t) 8000000 ) /*!
Чтобы включить возможность писать комментарии на русском языке,
в панели инструментов нажимаем пункт «Configuration»
И выбираем там кодовую страницу
Также вот здесь можно поменять размер и тип шрифта в редакторе
Добавим код в main()
RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN; // включим тактирование порта
GPIOD->MODER = 0x55000000; // включим ножки 12,13,14,15 на выход
GPIOD->OTYPER = 0; //подтянем резистор ко всем ножкам порта
GPIOD->OSPEEDR = 0; //установим скорость LOW на все лапки порта
GPIOD->ODR = 0xF000; // 12,13,14,15 лапки установим в 1, тем самым зажжем светодиод
Соберём код, прошьём контроллер и посмотрим результат
35 комментариев на “ STM Урок 1. Установка Keil μVision ”
Для скачивания нужной STM32F10x_StdPeriph_Lib_V3.5.0 (например) не нужно ничего писать в строке. Идем на сайт http://www.st.com выбираем Products->Microcontrollers->STM32F1(например) и в Total Parts ищем свой МК (STM32f103c8t6 например – мой случай). Выбираем его. Идем вниз где расположены архивы MCUS EMBEDDED SOFTWARE. Уделяем внимание тем ссылкам которые начинаются с STSW-STM и среди них находим ту рядом с которой есть такое описание (с правой стороны) STM32F10x standard peripheral library. Скачиваем.
На момент съёмки урока и написания сценария было так.
Спасибо за подсказку!
Думаю, многим пригодится, хотя в актуальности на данный момент этой библиотеки, есть определённые сомнения.
Копируем файл \STM32F4xx_DSP_StdPeriph_Lib_V1.6.1\Libraries\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h
в папку pl и снимаем с него атрибут «для чтения».
Также в данную папку копируем две папки (inc и src) из \STM32F4xx_DSP_StdPeriph_Lib_V1.6.1\Libraries\STM32F4xx_StdPeriph_Driver-А где их взять то?
Посмотрите видеоурок, возможно Вам станет понятнее.
В любом случае, спасибо за критику, хотя конечно этому уроку уже более 2х лет.
Посмотрите последние уроки, заодно и оцените, исправился ли я за это время или нет.
Поддерживаю! Хорошо бы в духе уроков по AVR.
Total commander – очень удобный файловый менеджер, большинство программистов, воспинанных на нортон командере им пользуются. Видно размер, расширение, время модификации файлов. Так что предъява не принимается.
ArduinoIDE полдня настраивается.
В уроках по AVR вы подробно рассказывали про регистры, хотелось бы и здесь.
Спасибо!
Имеется контроллер STM32L476 но нет к нему библиотек ни в Keil μVision3 ни в Keil μVision4, а Keil μVision5 нет
Непонятна цель манипуляций с переименовыванием папок, файлов, копированием туда – сюда. У меня проект заработал и без этих манипуляций. Тогда зачем эти получасовые танцы с бубнем при создании проекта – осталось загадкой. )))
Это такой порядок. А ещё для того, чтобы посмотреть, где всё находится. Цель моих занятий – не дать проект, который работает, а показать, почему оно работает.
Я очень рад, что у Вас всё заработало!
Пользуясь случаем, выражаю Вам свою глубокую благодарность за эти уроки!
Я не сомневаюсь что эти манипуляции для чего то нужны, и это заведенный Вами порядок. Но для чего они нужны и зачем заведен такой сложный порядок создания пооекта, ни одним словом не объясняется. Прошу прощения, но это сбивает с толку начинающего. Спасибо Вам еще раз!
И Вам также спасибо за интерес к ресурсу!
А вообще, по большому счёту, урок этот был записан очень давно, когда Keil 5 практически только появился, также невозможно было по-нормальному найти и собрать библиотеки, поэтому получилось у меня только вот так.
Понял Вас. Представьте, два раза собирал проект пошагово, как сказано в уроке, ничего не получилось, куча ошибок. Видимо где то, что то напутал. В третий раз собрал проект по умолчанию, только вставил код и все заработало. Поэтому возникли у меня вышеозвученные вопросы.
«Цель моих занятий — не дать проект, который работает, а показать, почему оно работает.»
Абсолютно не показали «почему это работает». Вот как Вы пришли к решению переименовывать папки, например? Если доступно объясните, то у остальных не будет вопросов. Также необходимо пояснять зачем эти файлы в данных папках, что они дают. Вы просто запутали начинающих. А гуру уже все умеют. Здесь надо как в детском саду:)
Я думаю, что это элементарно и все поняли, почему мы это делаем, так как данный урок был сделан 2,5 года назад, видео по нему «претерпело» 85 тысяч просмотров, 623 лайка к 59 дизлайкам, что составляет более 90 процентов и такой вопрос прозвучал за это время впервые.
Посему предъява не принимается.
Это не предъява. Если кто-то спросил, значит он не понял элементарного и хочет получить ответ (и до сих пор не получил). Если трудно объяснить – не напрягайся. Ведь у тебя столько лайков. Пойдем к другим изучать элементарное.
умник, влет могу тебе дизлайков накрутить! малейшие пояснения можно дать, что для чего делается, абсолютно бесполезный урок, не поясняются действия при создании проекта, отсюда и вывод = ничерта не работает! пришлось самому переделывать все.
Пожалуйста поподробнее. И не надо, пожалуйста, угрожать дизлайками и разными там хейтерствами. Слава Богу, дизлайки сейчас ничем не грозаят, сейчас это в ранжирование ресурса не учитывается. Сейчас учитывается только общее время просмотра. Если Вы как-то хотите навредить какому-то каналу, единственное, что Вы можете сделать, это только поменьше его смотреть. Больше никак.
Что именно у Вас не получилось с установкой IDE?
Может быть то, что уроку уже 2,5 года на что-то повлияло, и сейчас уже установка как-то по-другому происходит. Я, например в ту пору ничего подобного и бесплатного по установке не нашел, поэтому и решил поделиться своими мыслями, как это делаю именно я. Мне кажется подробнее-то некуда.
Недовольства свои мамке с папкой своим высказывай, за то-что дебила вырастили. Если не можешь мозги включить, как программировать собираешься? К тому-же, тебе никто ничего не обязан. Нравится – читай, нет – иди лесом.
Автору СПАСИБО за ресурс.
Иван,
Спасибо за высокую оценку ресурса!
Только, пожалуйста, поаккуратней с высказываниями друг против друга, старайтесь как-то в личных сообщениях.
Автору большое спасибо за материал. Долго не знал как подойти к stm, какую среду выбрать и как откуда что брать. Очень помогло видео урока.
Хочу поблагодарить автора за данные уроки. Хочу задать вопрос. Для создания паяльноц станции нлвичку какую платформу выбрать stm32 или avr. Еще мне не понятно если я выберу stm32 f3 или f4, то я смогу шить только такие же контроллеры, которые установленные на отладочной плате? Ну и если stm 32то какую модель дискавери брать (или не дискавери)!?
Здравствуйте!
Спасибо!
Шить можно и желательно все-таки STM. А шить с помощью ST-Link, а не Discovery. Discovery – это отладочная плата, в которой стоит и контроллер и программатор ST-Link.
В вкладке выбора процессора нет списка процессоров. В чем причина?
Начало работы с STM32 в Keil MDK-ARM
Все картинки в этой статье кликабельны.
STM32 — это семейство 32-разрядных микроконтроллеров фирмы STMicroelectronics.
Микроконтроллеры содержат микропроцессорное ядро ARM, точнее ARM Cortex-M. Это ядро присуще не только микроконтроллерам STM32, оно существует само по себе, и на его основе выпускается множество микроконтроллеров от разных производителей.
Keil MDK-ARM (произносится «Кеил эм-ди-кей арм») — это среда разработки для микроконтроллеров с ядром ARM Cortex-M.
Среда продается за большие деньги, но существует бесплатная ограниченная версия, которую можно скачать с официального сайта.
Существует множество других сред разработки. Например, последнее время автор пользуется средой, которую описал в другой статье. Но в этой пойдет речь о Keil MDK-ARM, потому что она имеет большую популярность и достаточно проста.
Первым делом качаем последнюю версию Keil MDK-ARM с официального сайта. Она имеет ряд ограничений, которые не влияют на большинство задач. Самое существенное ограничение состоит в том, что среда не сгенерирует программу объемом больше 32 КБ, но такую программу надо постараться написать. Хотя микроконтроллеры STM32 часто имеют намного больший объем, вплоть до 2 МБ.
На момент написания статьи последняя версия Keil MDK-ARM — 5.18 (от 5 февраля 2016).
Чтобы скачать среду, надо заполнить форму на сайте Keil:
Следует ввести настоящий адрес электронной почты, иначе сайт будет ругаться. После заполнения и нажатия Submit, дается ссылка для скачивания:
Если вы хотите избежать заполнения формы, то воспользуйтесь страницей, которую сделал автор, чтобы облегчить скачивание.
Качаем и устанавливаем. Установленная среда занимает на диске около 1,3 ГБ. После установки автоматически запускается менеджер пакетов:
Он нужен, чтобы качать, устанавливать и обновлять различные дополнения (пакеты).
Менеджер пакетов появился в MDK-ARM версии 5, что уменьшило объем установочного файла почти в два раза (версия 4.71 была объемом 550 МВ, а версия 5.00 — 300 МБ).
В левой части менеджера мы выбираем устройства (микроконтроллеры), а в правой соответствующие им пакеты.
Допустим, нам надо вести разработку под микроконтроллер STM32F407VG, который установлен на отладочной плате STM32F4-Discovery.
Тогда находим этот микроконтроллер в списке слева и устанавливаем соответствующий пакет DFP:
Можно заметить, что среди установленных пакетов есть CMSIS. CMSIS — это библиотека для ядра Cortex-M, общая для всех микроконтроллеров. Библиотека разрабатывается фирмой ARM и доступна для скачивания с официального сайта после регистрации. Можно было бы не устанавливать этот пакет, а пользоваться официальным выпуском библиотеки, но это дополнительные сложности.
Закрываем менеджер пакетов и запускаем Keil uVision5 (произносится мю-вижен):
Keil uVision5 — это часть MDK-ARM, графический интерфейс среды, который включает редактор кода:
Эти настройки довольно спорные. У каждого разработчика свои предпочтения.
После сохранения появится окно выбора устройства. Выбираем нужный микроконтроллер и нажимаем «ОК». Если бы мы не установили нужный пакет, то микроконтроллера не было бы в списке:
В следующем окне предстоит выбрать компоненты, которые будут использоваться в проекте. Необходимо выбрать «CMSIS:CORE» и «Device:Startup»:
После нажатия «OK» процесс создания проекта завершится.
При выборе компонентов может оказаться, что какой-то компонент зависит от других компонентов, которые вы не выбрали. Об этом вы узнаете из сообщений в нижней части окна. Необходимо будет выбрать зависимые компоненты.
После создания проекта описанным способом, в окне справа вы увидите следующую структуру проекта:
Здесь мы видим название проекта «example», цель проекта «Target 1», пустую группу файлов «Source Group 1», компоненты CMSIS и Device.
Целей проекта может быть сколько угодно. Цель включает в себя важнейшие настройки проекта в том числе выбор микроконтроллера. Цели нужны, чтобы можно было собрать программу разными способами для одних и тех же файлов исходного кода. Например, вам может понадобиться, чтобы проект охватывал множество микроконтроллеров.
Группы файлов нужны, чтобы красиво группировать файлы исходного кода. Группы помогают легко ориентироваться в файлах в большом проекте. Например, у вас может быть группа файлов, отвечающих за светодиоды, и отдельная группа с файлами для взаимодействия с USB.
В структуре мы видим два файла. Один с расширением «s». Он содержит исходный код на языке ассемблера. Другой с расширением «с». Он содержит исходный код на языке Си.
Собрать проект и получить файл прошивки можно нажав клавишу F7. Но в таком виде проект не будет собран и вы получите ошибку, потому что отсутствует функция «main()».
Функция «main()» — это точка входа в вашу программу, то с чего начинается программа. Ее наличие обязательно если вы пишите программу на языке Си.
Давайте создадим эту функцию. Кликнем на группе «Source Group 1» правой кнопкой и выберем «Add New Item to ‘Source Group 1’…» (перевод: добавить новый элемент в группу ‘Source Group 1’). Создадим файл «main.c»:
В созданный файл добавим код:
В конец файла стоит добавить пустую строку, иначе при сборке вы получите предупреждение «warning: #1-D: last line of file ends without a newline».
Теперь проект можно собрать клавишей F7. В результате вы получите файл «Objects\example.axf» (по умолчанию имя файла совпадает с именем проекта). Файл располагается в папке с проектом.
Обычно разработчику требуется файл прошивки в формате Intel HEX. Чтобы получить его, надо произвести настройку цели. Чтобы увидеть настройки цели нажмите Alt-F7, перейдите на вкладку «Output» и выберите «Create HEX File».
После очередной сборки вы получите файл «Objects\example.hex».
Сейчас программа не делает ничего, и прошивать ее бессмысленно. Давайте напишем программу, которая управляет состоянием ножки микроконтроллера.
В нижней части окна мы увидим неудовлетворенную зависимость «Device:STM32Cube Hal:Common». Выберем этот компонент и увидим еще больший список зависимостей. Необходимо выбрать все требуемые зависимости:
STM32Cube — это библиотека, которую предоставляет STMicroelectronics.
При выборе компонентов мы выбираем какие возможности этой библиотеки использовать.
Микроконтроллер, кроме ядра, содержит большое количество периферийных устройств: АЦП, ЦАП, таймеры, различные интерфейсы и многое другое. Каждое периферийное устройство имеет свое название. Например, устройство для работы с портами микроконтроллера называется GPIO, об этом можно узнать из документации на микроконтроллер.
Библиотека STM32Cube многоуровневая, то есть включает в себя множество промежуточных библиотек. Одна из промежуточных библиотек называется STM32Cube HAL, или просто HAL. Она поделена на модули и каждый модуль соответствует какому-нибудь периферийному устройству. Название модуля совпадает с названием устройства, например, имеется модуль GPIO.
Существует большое количество документации по STM32Cube. Но основное описание по работе с периферийными устройствами содержится в руководстве по HAL. Это руководство разработчик использует большую часть времени. Обратимся к нему, чтобы заставить шевелиться ножки микроконтроллера.
Для начала подключим HAL в нашей программе, добавив строчку перед определением функции «main()»:
В самом начале функции «main()» вызовем функцию «HAL_Init()», которая инициализирует библиотеку.
Таким образом мы получим следующий код в файле «main.c»:
Продолжение следует…
На этом я вынужден прервать свою статью, так как в данный момент мне не на чем отлаживать программу, то есть нет под рукой отладочной платы.
Я написал программу, которая собирается и теоретически должна работать, но я не хочу вводить в заблуждение читателя. Выше изложенный материал считаю полезным и без конечного результата.
В статье я хотел еще привести конечный код и объяснить, как он работает. Могу лишь поделиться непроверенной программой: