Мигание светодиодом на STM32
Когда мы начинаем работать с микроконтроллерами, первым шагом часто становится мигание светодиодом — своеобразный «Hello, World!» в мире встроенных систем. Этот простой пример позволяет убедиться, что плата работает, а среда разработки настроена правильно. Мы разберем, как запрограммировать мигание встроенного светодиода на STM32F4 Discovery, используя STM32CubeIDE, и заодно познакомимся с основами работы с GPIO(портами ввода вывода).Это первый шаг к созданию более сложных проектов, таких как управление моторами, работа с датчиками или создание интерфейсов связи.
Краткий обзор STM32F4 Discovery
Стоит сказать пару слов про нашу плату STM32F4 Discovery, потому что её мы будем часто использовать в наших проектах. Она предназначена для изучения возможностей STM32F4-серии и быстрой разработки проектов. Плата оснащена всем необходимым для старта: встроенным программатором/отладчиком ST-Link, USB-интерфейсом, кнопками и, что особенно важно для нашей задачи, встроенными светодиодами. Поэтому в этом проекте не придётся ничего собирать или паять, всё есть готовое. Схема расположения светодиодов на плате.
Создание проекта и настройка тактирования
Давайте создадим наш проект. Как создать проект мы рассмотрели в этой статье (ссылка на статью 1). Выставим настройки частоты. Для этого переходим во вкладку RCC и выберем внешний резонатор.
Обратите внимание CubeIde подсветил зелёным ножки RCC_OSC_IN и RCC_ISC_OUT отвечающие за входы резонатора на нашем микроконтроллере.
Дальше переходим в Clock Configuration и так как мы выбрали внешний резонатор то меняем частоту на 8МГц в HSE. ( Полный разбор Clock Configuration в этой статье . ссылка на статью ) что на выходе даст нам 16МГц на шине HCLK. Для нашего проекта это повлияет только на задержу HAL_Delay(1000);
Вернёмся во вкладку Pinout&Configuration и настроим GPIO. Наша задача помигать светодиодом D4 который подключен к выводу PD12. Для этого нажимаем на вывод и выбираем из списка GPIO_Output.
Больше ничего не требуется. Запустим генерацию кода для нашего проекта.
Написание кода
CubeIDE сделает первоначальную настройку за нас.
Напишем код, он очень простой. В библиотеке HAL есть готовая функция для мигания светодиодом.
HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12); // Переключает светодиод на PD12 </span> HAL_Delay(500); // Ждём 500 мс</span>
Функция изменяет (инвертирует) состояние указанного пина:
- Если пин был в 1 (HIGH) → станет 0 (LOW).
- Если был в 0 (LOW) → станет 1 (HIGH).
Добавим наш код в цикл While чтобы он выполнялся постоянно.
while(1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12); HAL_Delay(500); } /* USER CODE END 3 */
Обратите внимание что код должен быть строго между /* USER CODE BEGIN 3 */ и /* USER CODE END 3 */
Иначе при следующей генерации он сотрётся. Теперь собираем наш проект. нажимаем Build.
Прошиваем нашу плату и видим следующее. Наш светодиод загорается и тухнет.
Здесь можно посмотреть полное видео про создание проекта и мигание светодиодом.
https://youtube.com/shorts/RjEI1Ydd83U?feature=shared
Вывод и следующие шаги
Этот пример демонстрирует базовую работу с GPIO в STM32, что является фундаментальным навыком для работы с микроконтроллерами. Его часто используют для поиска неисправностей в вашем программном коде. В дальнейшем можно расширить проект, добавив обработку кнопок, управление яркостью через PWM или асинхронное мигание с использованием таймеров. Этим мы займемся в следующих статьях.