Интерфейс пользователя. Тактовые кнопки и светодиоды

Электроника

Давайте разберем, как настраивать порты микропроцессора и как создать шаблонную программу с помощью CubeIDE. Начнем!
Глоссарий
Для успешного освоения материала рекомендуем вам изучить следующие понятия:
Микроконтроллер
(англ. Micro Controller Unit, MCU) — микросхема, предназначенная для управления электронными устройствами. По сути, это однокристальный компьютер, способный выполнять относительно простые задачи. Отличается от микропроцессора интегрированными в микросхему устройствами ввода-вывода, таймерами и другими периферийными устройствами
Кнопка
один из элементов интерфейса пользователя компьютерной программы, «нажатие» на который приводит к некоторому действию, заложенному в программе
Светодиод или светоизлучающий диод
(СД, СИД; англ. light-emitting diode, LED) — полупроводниковый прибор с электронно-дырочным переходом, создающий оптическое излучение при пропускании через него электрического тока в прямом направлении
Видеолекция
Конспект
Ниже мы разберем настройку портов микропроцессора и создание шаблонной программы с помощью CubeIDE. Начнем!

Процесс создания программы
1. Настройка модуля микроконтроллера

2. Описание функционального блока

3. Отладка функционального блока

4. Выдача блока в продакшн (или переход к пункту 1)
Важно
В проект встраивается библиотека HAL, которая позволяет оперировать всеми модулями микроконтроллера, не зная все его тонкости. Например, битовые регистры и маски
Создание проекта в CubeIDE
1. Выбор микроконтроллера

2. Настройка модулей в Device Configuration Tool

3. Редактирование кода

4. Отладка кода

5. Прошивка кода

Давайте разберем каждый этап.

У нас есть модель:
и наша задача — написать программу, которая будет включать светодиод при нажатии на соответствующую кнопку.
Алгоритм
//инициализация портов средствами HAL
while (1)
{
	if(кнопка №1 нажата)
		Вывод в порт светодиода №1 логическую единицу
	else
		Вывод в порт №1 логический ноль
	if(кнопка №2 нажата)...
И так для каждой кнопки.
Работа на компьютере
1. Запускаем CubeIDE

2. Файл → New → STM 32 Project

3. В поиске забиваем процессор STM32L476RG
4. Подтверждаем выбор микроконтроллера

5. Выбираем расположение проекта
Важно
Желательно диск С. Директорию, папку и проект называем латинскими буквами
6. Переходим во вкладку настройки модулей и ставим частоту 80 МГц
7. Запускаем решатель, который автоматически установит все регистры

8. Сохраняем и генерируем шаблон кода

9. Настраиваем порты на микроконтроллере
Важно
Если функции недостаточно для настройки, она будет выделяться желтым, в противном случае функция выделится зеленым
10. Обозначаем известные порты. Например, первые порты обозначим для индикатора 1602
Важно
Рекомендуется давать выводам осмысленные имена, чтобы их легче было найти в коде
11. Для набора кнопок выбираем функцию входа

12. Для светодиодов выбираем порты и указываем цифровой выход

13. Переходим к дополнительным настройкам портов Categories → System Core
Важно
Список портов можно отсортировать, нажав на столбик с названиями
14. Указываем для кнопок, что у них есть подтяжка к плюсу питания

15. Для светодиодов выбираем неактивный уровень (ноль), чтобы они не горели в режиме питания
Важно
При настройке светодиодов необходимо указать максимальную выводную скорость порта, чтобы впоследствии не было задержек
16. Резервируем выводы для программатора, чтобы иметь возможность онлайн-отладки при трассировке кода

17. Сохраняем файл и получаем шаблон кода
Редактирование кода
Для перехода в редактор кода: Src → main.c

  • код добавляем в основную функция main внутрь вставок от user code begin до user code end

  • определенные вызовы функций для инициализации модулей микроконтроллера уже прописаны

  • добавляем код в определенные разделы
Важно
Если курсор поставить на функцию, то среда покажет нам ее содержимое
HAL_GPIO_WritePin(GPIOA, RS_Pin|E_Pin|DB4_Pin|LED2_Pin 
                          |LED1_Pin, GPIO_PIN_RESET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOB, DB5_Pin|LED5_Pin|LED4_Pin|LED3_Pin, GPIO_PIN_RESET);

  /*Configure GPIO pins : DB7_Pin DB6_Pin */
  GPIO_InitStruct.Pin = DB7_Pin|DB6_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
Важно
Если не получается вызвать текст функции, то необходимо перекомпилировать код
Итоговый код для while выглядит так:
Далее необходимо скопировать текст условий для первой кнопки и использовать для остальных кнопок.

Аналогичные действия проводим и для светодиодов.
Важно
Не забудьте поставить задержку выполнения кода с помощью функции HAL_Delay. Параметр функции — количество миллисекунд
Функции
Все функции по блокам располагаются в определенных файлах. Для каждой описан заголовок с комментариями (зачем эта функция) и тело функции (какие параметры передаются, и что выполняется).

Чтобы увидеть файлы для каждого инициализированного блока:

Stm32L4xx_HAL_Driver → Src → srt32l4xx_hal_gpio.c

В файле:
  • блок описания
  • блок примеров использования драйверов
Сохранение
1. Заходим Project → Build Project

2. Смотрим результат после компиляции
Важно
Можно также посмотреть объем памяти, занятой нашей программой
3. Run → Debug

4. Подтверждаем дополнительные режимы для программирования

5. Нажимаем красный квадратик. Программа показывает «Download verified successfully»
Тестирование платы
При нажатии соответствующей кнопки загорается нужный светодиод
Важно
Не забудьте по окончании работы отключить программатор платы от компьютера
Мы уже умеем настраивать порты микроконтроллера и работать в коде программы. Вы научились считывать состояния портов и устанавливать их. Давайте потренируемся!
Интерактивное задание
Тест
Для закрепления полученных знаний пройдите тест
Стартуем!
Зачем встраивается библиотека HAL?
Дальше
Проверить
Узнать результат
Какими цветами выделяются функции при выборе на микроконтроллере?
Дальше
Проверить
Узнать результат
Как увидеть содержимое функции?
Дальше
Проверить
Узнать результат
К сожалению, вы ответили неправильно
Прочитайте лекцию и посмотрите видео еще раз
Пройти еще раз
Неплохо!
Но можно лучше. Прочитайте лекцию и посмотрите видео еще раз
Пройти еще раз
Отлично!
Вы отлично справились. Теперь можете ознакомиться с другими компетенциями
Пройти еще раз