STM32F103. Начало работы в Keil
Статья ориентирована на одного моего товарища, вполне перспективного программиста, надеюсь она ему поможет. Если вы не он, закройте страницу тоже можете читать.
Основные вопросы этой заметки:
- как начать разрабатывать ПО для stm32 в Keil ;
- что для этого необходимо.
Начать необходимо со второго вопроса. Необходимый минимум это среда программирования ( Keil ), программатор и отладочная плата. Можно конечно и в симуляторе запускать программу, но это не так инетресно, так что плата и программатор нужны. Где брать писать не буду, не моя это забота.
Для начала необходимо установить keil, его можно взять на официальном сайте, на данный момент последняя версия 5.26 , если у вас 5.25 не отчаивайтеся, там различий не много, есть весьма полезные функции, но они вам не нужны.
Я сразу же после установки на новую машину произвожу настройку среды программирования:

Вот так они выглядят. Теперь по пунктам, что и где настроено.
- Изменена кодировка файлов на юникод, так у вас гарантированно будут отображаться русские символы в комментариях
- Настраиваю замену табуляции на 4 пробела (это довольно холиварная тема, но я любю так), с такими настройками код гарантированно одинаково будет выглядить в любом редакторе.
Теперь установим паки (различные библиотеки) необходимые для разработки под наш чип. Минимум установлен на картинке. FreeRTOS на самом деле не обязательно устанавливать, но пусть будет, ведь после игр с различной переферией будет пытаться оседлать её.

И так, все настройки сделаны, всё установлено, пробудем создать новый проект. Делается это через меню Project->New μVision Project. Сразу после нажатия откроется окно с предложением выбрать используемый чип, его название можно посмотреть на корпусе =)

Следующим этапом нам будет предложено выбрать необходимые в нашей работе паки. Отмечаем всё как на картинке.

- CMSIS (Cortex Microcontroller Software Interface Standard);
- Startup — это ассемблерный файл для запуска нашей программы, с содержимым можно будет ознакомиться самостоятельно;
- STDPeriph — Библиотека переферийных устройств:
- Fraemwork — оснойной файл, подлючающий бибилотеку;
- GPIO — для управления портами ввода-вывода;
- RCC — для управления тактированием.
Всё выбрано, значить пожно приступать к следующему шагу. Настройка проекта. открывается через меню Project->Option for Target.
Рассмотрим наиболее интересные и необходимые вкладки.
Здесь можно выбрать версию компилятора, для простоты будем использовать версию 5.

Вкладка для настройки компилятора. Здесь можно включить оптимизацию, выбрать уровень предупреждений, установить список инклудов и предопределенных макросов, и многое другое.

Нажатие на кнопку обведенную синим открывает диалоговое окно для добавления путей к используемым зголовочным файлам.

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

Настройки программатора. При загрузке прошивки будем стирать весь чип, программировать, верифицировать и запускать программу на исполнение.

Ну вот с настройка мы разобрались.
Приступим к написанию кода.
Программа для микроконтроллера выглядит в виде бесконечного цикла. Что бы это понять предлагаю ознакомиться с кодом:
/* Точка входа в программу */ int main( void ) < /* Здесь производится инициализация основных узлов программы и микроконтроллера */ while( 1 ) < /* Вечный цикл необходим для работы, иначе программа останомиться Сюда обычно помещают код который выполняется постоянно или оставляют цикл пустым если работают на прерываниях, можно совмещать. */ >>Что нужно сделать чтоб ы помигать светодиодом?
- Включить тактирование порта к которому подключен светодиод;
- Настроить порт на выход;
- в вечном цикле переключать вывод с небольшой задержкой то в 0 , то в 1 .
Вот и наш учебный код:
#include "stm32f10x.h" #include "stm32f10x_gpio.h" // Файл с функциями управления ножками контроллера #include "stm32f10x_rcc.h" // Управление тактированием #include // Правильные типы данных, вместо всяких int, char и тому подобных // Далее будут ссылки на страницы референс мануала, его можно сказать по ссылке: // https://www.st.com/resource/en/reference_manual/CD00171190.pdf // Примитивнейшая функция задержки // Для орагнизации задержек (или периодических событий) // обычно применяются таймеры, но нам пока рано, так что // тупо мотаем такты void Delay( void ) < for( uint16_t i = 0; i // точка входа в программу, всегда именно "int main ( void )" int main( void ) < // ---------------- Включаем тактирование порта GPIOC // 1. С использованием SPL RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE ); // 2. С использованием CMSIS, магические числа // RCC->APB2ENR |= (1 CRH |= (0x00 ODR |= (1 BSRR = (1 ODR &= ~(1 BRR = (1 BSRR = (1 > // В конце файла для Кейла обязательна пустая строка! Хз зачем, просто нужна.Код мигалки специально реализован несколькими возможными способами, используя STDPeriph и без него (только CMSIS )
Проект с этим кодом можно скачать здесь. Но лучше научиться создавать проект с нуля.
Будут вопросы пишите в комментариях, я обычно быстро отвечаю.
Как всегда — Спасибо за внимание и хорошего кодинга! =)
- Миландр. Неожиданное поведение CAN.
- Библиотека CMSIS DSP. Так ли быстр целочисленный квадратный корень?
CDEblog
Блог инженера-схемотехника, конструктора и немного программиста
Создание проекта в Keil uVision.
Один из вопросов, который возникает, при переходе на STM32:
«Какую среду разработки выбрать?»
Наверное самые популярные — это Coocox, IAR и Keil uVision, я пользуюсь последней.
Главное её преимущество перед другими — это мощный симулятор, с поддержкой периферии и множеством виртуальных приборов.
Все эти плюшки «упрощают жизнь» опытному разработчику и помогают новичку разбираться с богатой периферией современных МК. Ниже изображён скриншот интерфейса.
Размер прошивки при использовании бесплатной версии ограничен и составляет 32К, чего в большинстве случаев достаточно.
Для того чтобы её установить, качаем MDK-ARM с официального сайта.



И устанавливаем его.
Всё хорошо, но при создании проекта не получится выбрать нужный МК. Исправить это можно, установив необходимый пакет, например, для линейки STM32F1xx этот пакет называется Keil.STM32F1xx_DFP.x.x.x.pack
Теперь когда среда установлена, приступим к созданию проекта.

Желательно создать отдельную папку для проекта так, как файлов будет много.

Если в проекте не используется библиотека StdPeriph достаточно подключить файл стартапа и ядро CMSIS.


Теперь необходимо создать или добавить нужные файлы.




После того как все необходимые файлы включены в проект, можно перейти к настройке проекта.

Если МК тактируется от кварца, необходимо указать его частоту.

Частоту тактирования SYSCLK, которая тактирует все шины МК, можно выбрать, в файле system_stm32f10x.c, для этого достаточно раскомментировать нужную.


Название функций, в которых обрабатываются прерывания, можно посмотреть в файле startup.

Приготовления закончены и можно переходить непосредственно к отладке, предварительно скомпилировав проект.

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

Далее, пользуясь кнопками изображенными ниже, можно отлаживать программу.

На самом деле функционал программы гораздо шире, а в статье описан лишь тот минимум, который необходим для того, чтобы начать работу.
Установка и настройка Keil. Настройка для программирования МК Миландр.
Данная заметка будет в виде небольшого туториала. Буду рассмотрены несколько моментов: установка keil v5 и настройка для работы с микроконтроллерами различных производителей на примере STMicroelectronics и АО «ПКК Миландр».
Установка Keil.
Одним Keil нравится, другие его презирают, другие просто его не использовали ни разу. Я себя отношу к первой группе людей, меня он в принципе устраивает многим, хороший компилятор, поддержка многих семейств микроконтроллеров, удобная отладка. Из минусов разве что бедный текстовый редактор, который можно сравнить с notepad++, который за счет большого числа плагинов и то имеет более продвинутый функционал. Но всё же есть подсветка синтаксиса, индикация ошибок, какое никакое, но автодополнение и навигация по коду. И ещё он платный, что не мало важно, хотя и имеется бесплатная версия с ограничением размера кода(прошивки) в 32 килобайта.
Вот бесплатную версию мы и будем использовать.
Для начала необходимо скачать инсталляционный пакет с сайта keil.com, предварительно заполнив небольшую анкету.
Затем просто установить следуя инструкции установщика.
Теперь пошла магия:
Для поддержки различных микроконтроллеров необходимо установить необходимые пакеты с помощью Pack installer. Просто выбрав необходимого производителя и нажав Install.
На этом в принципе вся установка и заканчивается. Далее нужно лишь настроить среду программирования под себя. К сожалению у keil’а не так много настроек, но самое основное можно настроить:

- размер отступов;
- цветовую схему;
- кодировку (которую советую сразу сменить на UNICODE);
- и др.
Настройка для программирования микроконтроллеров Миландр.
Вы наверно уже заметили, что в списке поддерживаемых устройств нет «нашего» ARM’а, но это легко исправить. Необходимо скачать с сайта производителя Software pack для Keil MDK 5. На сайте не всегда лежит самая новая версия пака, её можно поискать на форуме.
После скачивания пак необходимо установить через Pack Installer: меню File -> Import. ; или открыть пак в проводнике, кеил должен предложить установить его.
На этом в принципе процесс установки и настройки окончен.
В следующей заметке будет рассмотрен алгоритм создания проекта для микроконтроллера 1986ВЕ9х.
- Библиотека для работы с дисплеем 1602
- Плата переходник IR2113SPBF в 1308ЕУ3АУ. Иногда приходится немного извращаться.
CDEblog
Блог инженера-схемотехника, конструктора и немного программиста
Последние публикации
- Настройка и работа в vscode на сервере без интернета.
- Altium Designer. Мои правила создания футпринтов.
- Генератор конфигураций c/c++ для vscode из Makefile
- Очередной драйвер SPI флэшек… Но уже с кэшем и «нормальным» api
- Что было интересного в январе.
Установка Keil μVision

Использовать мы будем отладочную плату 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 здесь
Чтобы включить возможность писать комментарии на русском языке,
в панели инструментов нажимаем пункт «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, тем самым зажжем светодиод
Соберём код, прошьём контроллер и посмотрим результат


Post Views: 18 259
40 комментариев на “ 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.
Я уже вторую неделю не могу диодом моргнуть на blue pill. И на борту программатот st-link.
Мануалы просто трубовые . У всех !
90% диких перепечаток .stm32 обзывают arduino . Ни у кого 5 лет подряд нет 3 бакса на программатор . Подключают всякие чёрт те што. Шьют где угодно , но только не в бесплатных от родной stm.
От самоката плату в openocd-0.10.0 перепрошил практически сразу.
Этот автор тоже перец . Я себе даже в дурном сне не могу представить total comander в пользовании . Зачем он в роликах щёлкает этим командером ?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.