Для самостоятельного повторения приведённых в данной статье примеров вам понадобится установить:
- System Workbench for STM32 – среда разработки для микроконтроллеров STM32, рекомендованная фирмой STMicroelectronics.
- STM32CubeMX – продвинутый генератор проектов для STM32.
Данные продукты являются бесплатными, но требуют быстрой регистрации для скачки. Спам после регистрации не приходит.
После установки обеих программ, вам следует создать папку, которая будет «workspace» для System Workbench for STM32.
Записки капитана очевидность(для начинающих может быть полезно):
«workspace» – это папка проектов под один и тот же микроконтроллер или серию микроконтроллеров. Если у вас к примеру есть 2 проекта, и в них во всех используется одинаковый подключаемый файл, то в области «workspace» можно подключить один файл на оба проекта.
Конец записок капитана.
Желательно создавать эту папку в корне диска (хотя и не обязательно), и рекомендуется избегать кириллицы в названиях папки.
После создания папки, запускаем System Workbench for STM32, видим окно, в котором следует указать созданную нами папку.
После того, как мы указали нашу папку как «workspace», запустится System Workbench for STM32 и покажет нам окно приветствия. Закроем его, нажав на крестик около надписи “Welcome”.
Закрыв окно приветствия мы увидим рабочую область, с которой нам и придётся работать в последствии. С более подробным описанием данной области мы познакомимся далее в статье.
После совершённых действий, следует запустить STM32CubeMX и установить необходимые библиотеки для наших микроконтроллеров. Что бы это сделать, после запуска программы нажмите сочетание клавиш “Alt+U”, и в появившемся окне выберите самую последнюю версию библиотеки для используемой серии микроконтроллеров. В нашем случае это F4 и F7, и установите их. Более старые библиотеки устанавливать не обязательно, на моём скриншоте они установлены, так как STM32CubeMX не стирает старые версии после обновления.
Стоит добавить, что при желании обновить STM32CubeMX или добавить новую библиотеку, его ВСЕГДА следует запускать от администратора.
Затем на потребутеся создать проект под микроконтроллер, установленный на вашей плате (STM32F407VGT6 для STM32F4EvaluationBoard, STM32F746VGT6 для STM32F7EvaluationBoard). Я надеюсь что с данной операцией вы сможете справится без скриншотов 🙂
После того, как вы создали проект в STM32CubeMX, следует провести настройки этого проекта, а именно:
- Кликаем левой кнопкой мышки на ножке “PE1” и в выпавшем списке выбираем “GPIO_Input”.
- Кликаем левой кнопкой мышки на ножке “PE0” и в выпавшем списке выбираем “GPIO_Output”.
- Кликаем правой кнопкой мышки на ножке “PE1”, в выпавшем списке выбираем “Enter User Label” и вписываем имя ножки, которое будет использоваться в программе. Так как на отладочных платах STM32F4EvaluationBoard и STM32F7EvaluationBoard ножка “PE1” присоединена к кнопке, то я присвою этой ножке имя “Button”.
- Кликаем правой кнопкой мышки на ножке “PE0”, в выпавшем списке выбираем “Enter User Label” и вписываем имя ножки, которое будет использоваться в программе. Так как на отладочных платах STM32F4EvaluationBoard и STM32F7EvaluationBoard ножка “PE0” присоединена к светодиоду синего цвета, то я присвою этой ножке имя “LED_Blue”.
- В списке, который находится слева находим пункт “RCC”, в этом пункте открываем выпадающий список около строки “High Speed Clock (HSE)” и выбираем пункт “Crystal/Ceramic Resonator”.
После совершения описанных действий у вас должно получиться примерно так (Для микроконтроллера STM32F746VGT6 картина такая же):
После этого следует перейти в закладку “Clock Configuration”, которую вы найдёте в STM32CubeMX сверху, и произвести настройки так как показано на скриншотах. Значения, подлежащие настройке будут выделены.
Для STM32F407VGT6:
Для STM32F746VGT6:
После того, как вы сделали всё как описано выше, следует выбрать находящийся сверху пункт “Project” и там выбрать пункт “Settings”, или нажать сочетание клавиш “ALP+P”. Настройки в данном пункте идентичные для всех микроконтроллеров. Пункт “Project Name” это, как очевидно, имя вашего проекта, так же это имя будет присвоено папке в которую будет проект положен. В сроке “Project Location” следует указать созданную вами папку “workspace”. Все остальные настройки сделать как на скриншотах:
После этого в пункте “Project” выбираем пункт “Generate Code”, и переходим к System Workbench for STM32.
STM32CubeMX уже сгенерировал проект проект у указанную папку, теперь надо этот проект открыть в System Workbench for STM32. Для этого в открытом ранее окне жмём “File->Import” в появившемся окошке выбираем “General”, выбираем там “Existing Projects into Workspace”, и жмём “Next”.
Следующим шагом в пункте “Select root directory” выбирем нашу папку “workspace”, после чего System Workbench for STM32 должен сам найти все проекты, которые находятся в выбранной папке.
Жмём финиш и радуемся подключённому проекту.
После того, как вы закончили активную часть радости, пришло время писать строчки кода. Для этого в левой части экрана находим “Progect Explorer”, при помощи него находим нужный нам файлик “main.c”. Ориентируемся по картинке:
Теперь мы можем редактировать данный файл.
Находим функцию “main” и в ней бесконечный цикл “while (1)”. В теле бесконечного цикла пишем строчки:
if(HAL_GPIO_ReadPin(Button_GPIO_Port,Button_Pin) == GPIO_PIN_SET){
HAL_GPIO_WritePin(LED_Blue_GPIO_Port,LED_Blue_Pin,GPIO_PIN_SET);
} else{
HAL_GPIO_WritePin(LED_Blue_GPIO_Port,LED_Blue_Pin,GPIO_PIN_RESET);
}
Немножко о написанном: (записки капитана очевидность, но для самых начинающих пригодится)
Все функции работы с периферией начинаются с “HAL_” далее следует название того, с чем мы хотим работать (в нашем случае это GPIO), ну а дальше что мы собственно хотим сделать. Соответственно в теле функции мы передаём с каким конкретно пином и что конкретно мы хотим сделать, если идёт запись в пин, или мы сравниваем функцию со значением, если идёт чтение пина.
Кстати смысл этих строк – зажигать светодиод пока зажата кнопка, и тушить при отпускании.
Записки капитана очевидность закончены.
Что ещё полезно знать, так это назначение таких комментариев в коде как:
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
и им подобные. Это области, в которых всё написанное остаётся неизменным при повторной генерации проекта при помощи STM32CubeMX. А делать это может понадобится например при добавлении работы с разной периферией.
Но мы отвлеклись.
После того как мы написали наш код в бесконечном цикле “while (1)”, в неизменяемой области, следует скомпилировать проект. Для этого в верхнем меню находим “Project->Bild Project”. Проект должен компилироваться без проблем.Хотя в ошибках может висеть вот такой пункт:
Это глюк, который почему то проявляется в версии, являющейся последней на момент написания этой статьи (Mars.2 Release (4.5.2)). Компиляции он не мешает, так что не обращаем на него внимание.
Теперь пришло время поиграться с реальным железом.
Для этого подключаем вашу отладочную плату к компьютеру (если она была подключена до этого, то пусть продолжает быть подключена) и переключаем джамперы около кнопки и светодиода пользуясь подсказками шелкографии. После этого находим вверху кнопочку в виде жучка, и жмём на стрелочку рядом с ним. Нас интересует пункт, показанный на скриншоте:
В открывшемся окне вписываем имя нашего борда (STM32F4EvaluationBoard или STM32F7EvaluationBoard или какой у вас), а так же выбираем отладчик и интерфейс отладки. Подробнее на скриншоте:
После нажатия кнопки “ОК” начнётся компиляция и прошивка. Во всех окнах с вопросами, которые будут выпадать, ставим галочку напротив надписи “запомнить ответ” (написано ес-но будет по английски) и соглашаемся с предложенным.
После компиляции нас отправит в раздел “Debug” (что бы вернутся в раздел написания кода, надо выбрать закладку C/C++. На скриншоте эта область отмечена жёлтым), где для запуска программы на МК нам надо нажать кнопку “F8”.
Всё, теперь можно проверить работу нашей программы. А именно, при нажатии на кнопку, подключенную на отладочной плате к “PE1” у нас должен загораться светодиод подключенный к “PE0” и гаснуть, когда мы кнопку отпускаем.
Заработало? Поздравляю! Нет? Проверяем внимательно правильность действий.
На этом вводная статья закончена, далее будем рассматривать работу с другими интерфейсами,а так же будем подключать разнообразные девайсы. Следите за обновлениями.