Всем привет! Решил сделать статью в виде урока по программированию микроконтроллеров семейства stm32. И сегодня я расскажу, как написать программу, которая будет мигать светодиодов, который находится на ножке PC13 на плате blue pill. Среда - cubeIDE. Приступим.
1. Настройка проекта.
Итак, вот мы создали проект, и перед нами такая картина:
Что же тут необходимо сделать? На самом деле, всё просто. В этом окне настраиваются все интерфейсы, частота работы, режим работы пинов. Так как сегодня мы не будем работать с интерфейсами, то нам нужно только настроить частоту и пин pc13. Для настройки частоты заходим в system core - rcc и выбираем в обоих строчках crystal/ceramic resonator.
Если вы всё сделали правильно, выводы pc14, pc15, pd0 и pd1 станут зелёного цвета, как на фото. Также вы можете заметить, что на фото пин pc13 также зелёный. Это как раз наш вывод со светодиодом. Чтобы его настроить, кликаем на него левой кнопкой мыши и выбираем GPIO output. Всё, настройка пина завершена. Осталось до конца настроить частоту. Для этого переходим в раздел clock configuration. В трапеции PLL source mux выбираем HSE, в трапеции System Clock mux выбираем PLLCLK. Осталось написать в прямоугольнике HCLK число 72, и нажать enter. Всё, настройка частоты завершена.
2. Пишем код.
Для того, чтобы приступить к генерации кода необходимо нажать на значок шестерёнки. После чего нам открывается вот такая картина:
У меня код сразу открылся перед основным циклом, если у нас он открылся где то в другом месте - ищем его. Ориентироваться можно по комментариям user code begin2/end2. В нескольких строчках под ними будем тот самый цикл.
Писать код нужно либо перед user code end while, либо после user code begin 3. Я решил писать перед первым.
Что же нам нужно, чтобы зажечь наш светодиод? Правильно, нужно опустить логический уровень на пине pc13. Почему именно опустить? Потому что светодиод подключен в данной плате к плюсу питания, а значит, чтобы ток начал течь, надо сделать напряжение на выходе меньше, чем на плюсе. Ну мы всё же для начала поднимем уровень, так как это необходимо для того, чтобы светодиод погасить.
Вызываем такую функцию:
HAL_GPIO_Write(). Кстати, если вы нажмете Ctrl+space, то среда вам покажет все варианты функций.
Давайте разбираться, что нужно писать в аргументы функций. GPIOx - наш порт. У нас это C, поэтому меняем x на C. Далее, GPIO_Pin. Это пин нашего порта. У нас он 13, поэтому пишем GPIO_PIN_13. Ну и последнее - PinState. Это состояние нашего пина, 1 или 0. Пишем 1.
Дальше нужно вызвать функцию задержки. Пишется она так:
HAL_Delay(x), где x - это количество миллисекунд. Я написал 1000.
Остается скопировать и вставить две данные строчки кода ещё раз. Единственное отличие - состояние пина меняем на 0.
Все, компилируем код и прошиваем микроконтроллер. В этой статье не буду рассказывать, как это делать, если интересно - пишите в комментариях, и я выпущу на эту тему отдельную статью.
Смотрим на нашу плату.
Проходит секунда, и...
Светодиод зажигается. А через секунду опять гаснет. Потом опять зажигается. Значит, программу мы написали верно.
Заключение.
Ну а на этом у меня всё. Если вам понравился такой тип статей, то пишите об этом в комментариях, и я выпущу другие статьи по программированию stm32. Всем до скорого!