Урок 1
Установка Keil μVision
Программирование МК STM32 Следующий урок
Вводим на поисковом сайте строку stm32f4 spl
Попадаем сюда http://www.st.com/web/en/catalog/tools/PF257901
Скачиваем отсюда библиотеку
Использовать мы будем отладочную плату STM32F4-DISCOVERY.
Запускаем Keil5
Запускаем там 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 с бесконечным циклом
int main(void)
{
while(1)
{
}
}
Вызовем контекстное меню на объявлении заголовочного файла
И внесем следующие исправления
Разкоментируем
#define STM32F40_41xxx
и /*#define USE_STDPERIPH_DRIVER */
изменить 25000000 на 8000000 здесь
#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
Чтобы включить возможность писать комментарии на русском языке,
в панели инструментов нажимаем пункт «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, тем самым зажжем светодиод
Полный код
#include «stm32f4xx.h»
//GPIO_InitTypeDef GPIO_InitStructure;
int main(void)
{
uint32_t i;
RCC->AHB1ENR|=RCC_AHB1ENR_GPIODEN;
GPIOD->MODER = 0x55000000;
GPIOD->OTYPER = 0;
GPIOD->OSPEEDR = 0;
while(1)
{
GPIOD->ODR = 0x8000;
for(i=0;i<500000;i++){}
GPIOD->ODR = 0x4000;
for(i=0;i<500000;i++){}
GPIOD->ODR = 0x2000;
for(i=0;i<500000;i++){}
GPIOD->ODR = 0x1000;
for(i=0;i<500000;i++){}
}
}
Соберём код, прошьём контроллер и посмотрим результат
Программирование МК STM32 Следующий урок
Отладочную плату можно приобрести здесь STM32F4-DISCOVERY
Смотреть ВИДЕОУРОК в RuTube (нажмите на картинку)
Смотреть ВИДЕОУРОК в YouTube (нажмите на картинку)
Для скачивания нужной 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.
В вкладке выбора процессора нет списка процессоров. В чем причина?
Что-то недоустановилось.
STM32F0-Discovery подойдёт для обучения данному курсу?
В принципе, для начала хватит.
Не могли бы Вы обновить информацию по установке.
Заранее спасибо.
Дмитрий
Возможно, но позже. Пока не планировал.
В третьем уроке упомянуто, что урок первый это SPL, а второй CMSIS. Мне бы как раз хотелось понять где заканчивается одно и начинается второе. Отсюда вопрос.
В этом уроке мы копируем и из папок SPL библиотек, в частности это
— STM32F4xx_DSP_StdPeriph_Lib_V1.6.1\Libraries\CMSIS\Device\ST\STM32F4xx\Include\stm32f4xx.h. Затем обращаясь к регистрам GPIOD настраиваем и управляем каналами. И, вроде бы, все что нам нужно описано в stm32f4xx.h. А это, судя по пути это CMSIS. В общем вопрос в каких отношениях CMSIS c SPL
./pl\stm32f4xx.h:817:10: fatal error: 'core_cm4.h' file not found
#include «core_cm4.h» /* Cortex-M4 processor and core peripherals */
^~~~~~~~~~~~
1 error generated.
«.\Objects\lesson001.axf» — 1 Error(s), 0 Warning(s).
Target not created.
Build Time Elapsed: 00:00:34
Что делаю не так?
Подскажите, почему программа в режиме дебаг пошагово все отрабатывает, отсвечивает, но без дебага светодиоды не отрабатывают, подал питание и плата как мертвая. Один и тот же текст программы. Шью в IAR, залил и плата исполняет все сама.
Приветствую, вроде, урок для начинающих, но что такое регистры и как ими пользоваться ни слова. С 36-й минуту отсутствуют какие-либо комментарии, что делается, для чего делается, как высчитываются адрес регистра. Нулевые знания от просмотра. 36 минут ни о чём бу-бу-бу и потом галопом… F4-серия большая и регистры другие нужно это было сказать. Для чего эти регистры в проекте и без них всё будет работать GPIOD->OTYPER, GPIOD->OSPEEDR?!
//включаю синий светодиод/stm32F469i disco
#include «stm32f4xx.h» // Device header
#define RCC_AHB1ENR (*(volatile uint32_t*)0x40023830) //включаю тактирование AHB1
#define GPIOG_MODER (*(volatile uint32_t*)0x40021800) //регистр GPIO-G
#define GPIOG_ODR (*(volatile uint32_t*)0x40021814) //вывод регистра GPIO-G
int main()
{
RCC_AHB1ENR |= 1<<6; //включаю тактирование GPIO-порта-G
GPIOG_MODER |= 0<<13 | 1<<12; //назначаю порт-G как выход
GPIOG_ODR |= 1<<15; // записываю 1-(включаю) в порт-G, вывод 15 микроконтроллера
}
Добрый день. Может у кого архивы программ завалялись? В связи с санкциями, сайт не дает скачивать программы, а хотелось попробовать STM32F4XX запрограммировать, пока время появилось.
«.\Objects\lesson001.axf» — 1 Error(s),кто подскажет в чем дело. Будьте любезны,подскажите.
«.\Objects\lesson001.axf» — 1 Error(s),